]> andersk Git - openssh.git/blobdiff - ssh-agent.c
- (djm) Stop shadow expiry checking from preventing logins with NIS. Based
[openssh.git] / ssh-agent.c
index 8a69b1d088166f2b8afdbdb317f0ea2bd3db5602..7bfa290423bf1603e9255c60cd81fdeb4f5834fa 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ssh-agent.c,v 1.25 2000/01/02 21:51:03 markus Exp $   */
+/*     $OpenBSD: ssh-agent.c,v 1.31 2000/04/29 18:11:52 markus Exp $   */
 
 /*
  * Author: Tatu Ylonen <ylo@cs.hut.fi>
@@ -9,7 +9,7 @@
  */
 
 #include "includes.h"
-RCSID("$OpenBSD: ssh-agent.c,v 1.25 2000/01/02 21:51:03 markus Exp $");
+RCSID("$OpenBSD: ssh-agent.c,v 1.31 2000/04/29 18:11:52 markus Exp $");
 
 #include "ssh.h"
 #include "rsa.h"
@@ -21,12 +21,7 @@ RCSID("$OpenBSD: ssh-agent.c,v 1.25 2000/01/02 21:51:03 markus Exp $");
 #include "getput.h"
 #include "mpaux.h"
 
-#ifdef HAVE_OPENSSL
 #include <openssl/md5.h>
-#endif
-#ifdef HAVE_SSL
-#include <ssl/md5.h>
-#endif
 
 typedef struct {
        int fd;
@@ -51,7 +46,7 @@ Identity *identities = NULL;
 int max_fd = 0;
 
 /* pid of shell == parent of agent */
-int parent_pid = -1;
+pid_t parent_pid = -1;
 
 /* pathname and directory for AUTH_SOCKET */
 char socket_name[1024];
@@ -60,7 +55,7 @@ char socket_dir[1024];
 #ifdef HAVE___PROGNAME
 extern char *__progname;
 #else /* HAVE___PROGNAME */
-const char *__progname = "ssh-agent";
+static const char *__progname = "ssh-agent";
 #endif /* HAVE___PROGNAME */
 
 void
@@ -183,7 +178,7 @@ process_remove_identity(SocketEntry *e)
        buffer_get_bignum(&e->input, n);
 
        if (bits != BN_num_bits(n))
-               error("Warning: identity keysize mismatch: actual %d, announced %d",
+               log("Warning: identity keysize mismatch: actual %d, announced %d",
                      BN_num_bits(n), bits);
 
        /* Check if we have the key. */
@@ -412,11 +407,12 @@ prepare_select(fd_set *readset, fd_set *writeset)
                }
 }
 
-void 
+void
 after_select(fd_set *readset, fd_set *writeset)
 {
        unsigned int i;
        int len, sock;
+       socklen_t slen;
        char buf[1024];
        struct sockaddr_un sunaddr;
 
@@ -426,8 +422,8 @@ after_select(fd_set *readset, fd_set *writeset)
                        break;
                case AUTH_SOCKET:
                        if (FD_ISSET(sockets[i].fd, readset)) {
-                               len = sizeof(sunaddr);
-                               sock = accept(sockets[i].fd, (struct sockaddr *) & sunaddr, &len);
+                               slen = sizeof(sunaddr);
+                               sock = accept(sockets[i].fd, (struct sockaddr *) & sunaddr, &slen);
                                if (sock < 0) {
                                        perror("accept from AUTH_SOCKET");
                                        break;
@@ -444,6 +440,8 @@ after_select(fd_set *readset, fd_set *writeset)
                                        shutdown(sockets[i].fd, SHUT_RDWR);
                                        close(sockets[i].fd);
                                        sockets[i].type = AUTH_UNUSED;
+                                       buffer_free(&sockets[i].input);
+                                       buffer_free(&sockets[i].output);
                                        break;
                                }
                                buffer_consume(&sockets[i].output, len);
@@ -454,6 +452,8 @@ after_select(fd_set *readset, fd_set *writeset)
                                        shutdown(sockets[i].fd, SHUT_RDWR);
                                        close(sockets[i].fd);
                                        sockets[i].type = AUTH_UNUSED;
+                                       buffer_free(&sockets[i].input);
+                                       buffer_free(&sockets[i].output);
                                        break;
                                }
                                buffer_append(&sockets[i].input, buf, len);
@@ -468,7 +468,7 @@ after_select(fd_set *readset, fd_set *writeset)
 void
 check_parent_exists(int sig)
 {
-       if (kill(parent_pid, 0) < 0) {
+       if (parent_pid != -1 && kill(parent_pid, 0) < 0) {
                /* printf("Parent has died - Authentication agent exiting.\n"); */
                exit(1);
        }
@@ -507,6 +507,7 @@ main(int ac, char **av)
        struct sockaddr_un sunaddr;
        pid_t pid;
        char *shell, *format, *pidstr, pidstrbuf[1 + 3 * sizeof pid];
+       extern int optind;
 
        /* check if RSA support exists */
        if (rsa_alive() == 0) {
@@ -515,7 +516,11 @@ main(int ac, char **av)
                        __progname);
                exit(1);
        }
+#ifdef __GNU_LIBRARY__
+       while ((ch = getopt(ac, av, "+cks")) != -1) {
+#else /* __GNU_LIBRARY__ */
        while ((ch = getopt(ac, av, "cks")) != -1) {
+#endif /* __GNU_LIBRARY__ */
                switch (ch) {
                case 'c':
                        if (s_flag)
@@ -554,6 +559,7 @@ main(int ac, char **av)
                }
                pid = atoi(pidstr);
                if (pid < 1) {  /* XXX PID_MAX check too */
+               /* Yes, PID_MAX check please */
                        fprintf(stderr, "%s=\"%s\", which is not a good PID\n",
                                SSH_AGENTPID_ENV_NAME, pidstr);
                        exit(1);
@@ -645,8 +651,8 @@ main(int ac, char **av)
        }
        signal(SIGINT, SIG_IGN);
        signal(SIGPIPE, SIG_IGN);
-       signal(SIGHUP, cleanup_exit);                                          
-       signal(SIGTERM, cleanup_exit);                                          
+       signal(SIGHUP, cleanup_exit);
+       signal(SIGTERM, cleanup_exit);
        while (1) {
                FD_ZERO(&readset);
                FD_ZERO(&writeset);
This page took 0.061053 seconds and 4 git commands to generate.