]> andersk Git - openssh.git/blobdiff - ssh-agent.c
- (dtucker) [Makefile.in ssh-keysign.c ssh.c] Use permanently_set_uid() since
[openssh.git] / ssh-agent.c
index d595479f9984c480bb359ae9059b18e380fa2fae..bc4d8d33a2875da09cfe30b799dc5209eeb61893 100644 (file)
@@ -35,7 +35,7 @@
 
 #include "includes.h"
 #include "openbsd-compat/sys-queue.h"
-RCSID("$OpenBSD: ssh-agent.c,v 1.115 2003/10/14 19:54:39 markus Exp $");
+RCSID("$OpenBSD: ssh-agent.c,v 1.120 2004/08/11 21:43:05 avsm Exp $");
 
 #include <openssl/evp.h>
 #include <openssl/md5.h>
@@ -50,13 +50,16 @@ RCSID("$OpenBSD: ssh-agent.c,v 1.115 2003/10/14 19:54:39 markus Exp $");
 #include "authfd.h"
 #include "compat.h"
 #include "log.h"
-#include "readpass.h"
 #include "misc.h"
 
 #ifdef SMARTCARD
 #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,
@@ -103,11 +106,7 @@ char socket_dir[1024];
 int locked = 0;
 char *lock_passwd = NULL;
 
-#ifdef HAVE___PROGNAME
 extern char *__progname;
-#else
-char *__progname;
-#endif
 
 /* Default lifetime (0 == forever) */
 static int lifetime = 0;
@@ -179,7 +178,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)
@@ -786,8 +785,7 @@ new_socket(sock_type type, int fd)
 {
        u_int i, old_alloc, new_alloc;
 
-       if (fcntl(fd, F_SETFL, O_NONBLOCK) < 0)
-               error("fcntl O_NONBLOCK: %s", strerror(errno));
+       set_nonblock(fd);
 
        if (fd > max_fd)
                max_fd = fd;
@@ -818,7 +816,7 @@ new_socket(sock_type type, int fd)
 }
 
 static int
-prepare_select(fd_set **fdrp, fd_set **fdwp, int *fdl, int *nallocp)
+prepare_select(fd_set **fdrp, fd_set **fdwp, int *fdl, u_int *nallocp)
 {
        u_int i, sz;
        int n = 0;
@@ -1004,7 +1002,8 @@ int
 main(int ac, char **av)
 {
        int c_flag = 0, d_flag = 0, k_flag = 0, s_flag = 0;
-       int sock, fd,  ch, nalloc;
+       int sock, fd,  ch;
+       u_int nalloc;
        char *shell, *format, *pidstr, *agentsocket = NULL;
        fd_set *readsetp = NULL, *writesetp = NULL;
        struct sockaddr_un sunaddr;
@@ -1023,6 +1022,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]);
@@ -1138,7 +1142,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);
        }
This page took 0.036882 seconds and 4 git commands to generate.