3d007cb virt-login-shell: fix regressions in behavior

Authored and Committed by ericb 10 years ago
    virt-login-shell: fix regressions in behavior
    
    Our fixes for CVE-2013-4400 were so effective at "fixing" bugs
    in virt-login-shell that we ended up fixing it into a useless
    do-nothing program.
    
    Commit 3e2f27e1 picked the name LIBVIRT_SETUID_RPC_CLIENT for
    the witness macro when we are doing secure compilation.  But
    commit 9cd6a57d checked whether the name IN_VIRT_LOGIN_SHELL,
    from an earlier version of the patch series, was defined; with
    the net result that virt-login-shell invariably detected that
    it was setuid and failed virInitialize.
    
    Commit b7fcc799 closed all fds larger than stderr, but in the
    wrong place.  Looking at the larger context, we mistakenly did
    the close in between obtaining the set of namespace fds, then
    actually using those fds to switch namespace, which means that
    virt-login-shell will ALWAYS fail.
    
    This is the minimal patch to fix the regressions, although
    further patches are also worth having to clean up poor
    semantics of the resulting program (for example, it is rude to
    not pass on the exit status of the wrapped program back to the
    invoking shell).
    
    * tools/virt-login-shell.c (main): Don't close fds until after
    namespace swap.
    * src/libvirt.c (virGlobalInit): Use correct macro.
    
    Signed-off-by: Eric Blake <eblake@redhat.com>
    
        
file modified
+1 -1
file modified
+11 -10