]> andersk Git - gssapi-openssh.git/blobdiff - openssh/ssh-agent.c
fail gss userauth if we received a limited globus proxy
[gssapi-openssh.git] / openssh / ssh-agent.c
index e1e6cae9b29f268fc7eef5082db78ee0ec5a4c5e..f5fce6b2aa016d7f2dd4d9621d2efce583ee73c8 100644 (file)
@@ -35,7 +35,7 @@
 
 #include "includes.h"
 #include "openbsd-compat/sys-queue.h"
-RCSID("$OpenBSD: ssh-agent.c,v 1.112 2003/09/18 08:49:45 markus Exp $");
+RCSID("$OpenBSD: ssh-agent.c,v 1.117 2003/12/02 17:01:15 markus Exp $");
 
 #include <openssl/evp.h>
 #include <openssl/md5.h>
@@ -57,6 +57,10 @@ RCSID("$OpenBSD: ssh-agent.c,v 1.112 2003/09/18 08:49:45 markus Exp $");
 #include "scard.h"
 #endif
 
+#if defined(HAVE_SYS_PRCTL_H)
+#include <sys/prctl.h> /* For prctl() and PR_SET_DUMPABLE */
+#endif
+
 typedef enum {
        AUTH_UNUSED,
        AUTH_SOCKET,
@@ -179,7 +183,7 @@ confirm_key(Identity *id)
        p = read_passphrase(prompt, RP_ALLOW_EOF);
        if (p != NULL) {
                /*
-                * Accept empty responses and responses consisting 
+                * Accept empty responses and responses consisting
                 * of the word "yes" as affirmative.
                 */
                if (*p == '\0' || *p == '\n' || strcasecmp(p, "yes") == 0)
@@ -949,7 +953,7 @@ after_select(fd_set *readset, fd_set *writeset)
 }
 
 static void
-cleanup_socket(void *p)
+cleanup_socket(void)
 {
        if (socket_name[0])
                unlink(socket_name);
@@ -957,17 +961,17 @@ cleanup_socket(void *p)
                rmdir(socket_dir);
 }
 
-static void
+void
 cleanup_exit(int i)
 {
-       cleanup_socket(NULL);
-       exit(i);
+       cleanup_socket();
+       _exit(i);
 }
 
 static void
 cleanup_handler(int sig)
 {
-       cleanup_socket(NULL);
+       cleanup_socket();
        _exit(2);
 }
 
@@ -1023,6 +1027,11 @@ main(int ac, char **av)
        setegid(getgid());
        setgid(getgid());
 
+#if defined(HAVE_PRCTL) && defined(PR_SET_DUMPABLE)
+       /* Disable ptrace on Linux without sgid bit */
+       prctl(PR_SET_DUMPABLE, 0);
+#endif
+
        SSLeay_add_all_algorithms();
 
        __progname = ssh_get_progname(av[0]);
@@ -1100,7 +1109,7 @@ main(int ac, char **av)
 
        if (agentsocket == NULL) {
                /* Create private directory for agent socket */
-               strlcpy(socket_dir, "/tmp/ssh-XXXXXXXX", sizeof socket_dir);
+               strlcpy(socket_dir, "/tmp/ssh-XXXXXXXXXX", sizeof socket_dir);
                if (mkdtemp(socket_dir) == NULL) {
                        perror("mkdtemp: private socket dir");
                        exit(1);
@@ -1138,7 +1147,7 @@ main(int ac, char **av)
 #ifdef HAVE_CYGWIN
        umask(prev_mask);
 #endif
-       if (listen(sock, 128) < 0) {
+       if (listen(sock, SSH_LISTEN_BACKLOG) < 0) {
                perror("listen");
                cleanup_exit(1);
        }
@@ -1209,7 +1218,6 @@ main(int ac, char **av)
 #endif
 
 skip:
-       fatal_add_cleanup(cleanup_socket, NULL);
        new_socket(AUTH_SOCKET, sock);
        if (ac > 0) {
                mysignal(SIGALRM, check_parent_exists);
This page took 0.042772 seconds and 4 git commands to generate.