]> andersk Git - openssh.git/commitdiff
- markus@cvs.openbsd.org 2001/06/03 14:55:39
authormouring <mouring>
Sat, 9 Jun 2001 01:11:59 +0000 (01:11 +0000)
committermouring <mouring>
Sat, 9 Jun 2001 01:11:59 +0000 (01:11 +0000)
     [channels.c channels.h session.c]
     use fatal_register_cleanup instead of atexit, sync with x11 authdir
     handling

ChangeLog
channels.c
channels.h
session.c

index df9b6e62056f3ae449ef9aad0f6b0d282289ac39..fc44f9a25b06afb0ee7142012429996cdd597b9d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
    - markus@cvs.openbsd.org 2001/05/31 13:08:04
      [sshd_config]
      group options and add some more comments
+   - markus@cvs.openbsd.org 2001/06/03 14:55:39
+     [channels.c channels.h session.c]
+     use fatal_register_cleanup instead of atexit, sync with x11 authdir 
+     handling
 
 20010606
  - OpenBSD CVS Sync
index 518a071b844f28fc3aaf3861840bb64549d5e8d1..110613896616c64eabc77002a5c3d359fe8b2785 100644 (file)
@@ -40,7 +40,7 @@
  */
 
 #include "includes.h"
-RCSID("$OpenBSD: channels.c,v 1.121 2001/05/31 10:30:14 markus Exp $");
+RCSID("$OpenBSD: channels.c,v 1.122 2001/06/03 14:55:38 markus Exp $");
 
 #include "ssh.h"
 #include "ssh1.h"
@@ -2777,10 +2777,13 @@ auth_get_socket_name()
 /* removes the agent forwarding socket */
 
 void
-cleanup_socket(void)
+auth_sock_cleanup_proc(void *ignored)
 {
-       unlink(auth_sock_name);
-       rmdir(auth_sock_dir);
+       if (auth_sock_name) {
+               unlink(auth_sock_name);
+               rmdir(auth_sock_dir);
+               auth_sock_name = NULL;
+       }
 }
 
 /*
@@ -2822,11 +2825,9 @@ auth_input_request_forwarding(struct passwd * pw)
        snprintf(auth_sock_name, MAXPATHLEN, "%s/agent.%d",
                 auth_sock_dir, (int) getpid());
 
-       if (atexit(cleanup_socket) < 0) {
-               int saved = errno;
-               cleanup_socket();
-               packet_disconnect("socket: %.100s", strerror(saved));
-       }
+       /* delete agent socket on fatal() */
+       fatal_add_cleanup(auth_sock_cleanup_proc, NULL);
+
        /* Create the socket. */
        sock = socket(AF_UNIX, SOCK_STREAM, 0);
        if (sock < 0)
@@ -2855,6 +2856,7 @@ auth_input_request_forwarding(struct passwd * pw)
            0, xstrdup("auth socket"), 1);
        if (nc == NULL) {
                error("auth_input_request_forwarding: channel_new failed");
+               auth_sock_cleanup_proc(NULL);
                close(sock);
                return 0;
        }
index e9d583656864a650f41313938215f357d08fedf7..c1815d58d6262d71578b2cbdbfae0b7e1b869072 100644 (file)
@@ -32,7 +32,7 @@
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
-/* RCSID("$OpenBSD: channels.h,v 1.35 2001/05/31 10:30:15 markus Exp $"); */
+/* RCSID("$OpenBSD: channels.h,v 1.36 2001/06/03 14:55:39 markus Exp $"); */
 
 #ifndef CHANNEL_H
 #define CHANNEL_H
@@ -223,6 +223,7 @@ void        deny_input_open(int type, int plen, void *ctxt);
 
 void    auth_request_forwarding(void);
 char   *auth_get_socket_name(void);
+void   auth_sock_cleanup_proc(void *ignored);
 int     auth_input_request_forwarding(struct passwd * pw);
 void    auth_input_open_request(int type, int plen, void *ctxt);
 
index 0625bf81f10d2ca25d27aa629fc44a913845825f..ce9b2002b840bae85b8b466adf8feb1f036ac122 100644 (file)
--- a/session.c
+++ b/session.c
@@ -33,7 +33,7 @@
  */
 
 #include "includes.h"
-RCSID("$OpenBSD: session.c,v 1.78 2001/05/31 10:30:16 markus Exp $");
+RCSID("$OpenBSD: session.c,v 1.79 2001/06/03 14:55:39 markus Exp $");
 
 #include "ssh.h"
 #include "ssh1.h"
@@ -132,6 +132,7 @@ void        do_pre_login(Session *s);
 void   do_child(Session *s, const char *command);
 void   do_motd(void);
 int    check_quietlogin(Session *s, const char *command);
+void   xauthfile_cleanup_proc(void *ignore);
 
 void   do_authenticated1(Authctxt *authctxt);
 void   do_authenticated2(Authctxt *authctxt);
@@ -196,6 +197,12 @@ do_authenticated(Authctxt *authctxt)
                do_authenticated2(authctxt);
        else
                do_authenticated1(authctxt);
+
+       /* remote user's local Xauthority file and agent socket */
+       if (xauthfile)
+               xauthfile_cleanup_proc(NULL);
+       if (auth_get_socket_name())
+               auth_sock_cleanup_proc(NULL);
 }
 
 /*
@@ -446,9 +453,6 @@ do_authenticated1(Authctxt *authctxt)
 
                        if (command != NULL)
                                xfree(command);
-                       /* Cleanup user's local Xauthority file. */
-                       if (xauthfile)
-                               xauthfile_cleanup_proc(NULL);
                        return;
 
                default:
@@ -2105,6 +2109,4 @@ do_authenticated2(Authctxt *authctxt)
 {
 
        server_loop2();
-       if (xauthfile)
-               xauthfile_cleanup_proc(NULL);
 }
This page took 0.141548 seconds and 5 git commands to generate.