=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/ssh/ssh-agent.c,v retrieving revision 1.129.2.2 retrieving revision 1.130 diff -u -r1.129.2.2 -r1.130 --- src/usr.bin/ssh/ssh-agent.c 2006/11/08 00:17:14 1.129.2.2 +++ src/usr.bin/ssh/ssh-agent.c 2006/03/19 18:51:18 1.130 @@ -1,4 +1,3 @@ -/* $OpenBSD: ssh-agent.c,v 1.129.2.2 2006/11/08 00:17:14 brad Exp $ */ /* * Author: Tatu Ylonen * Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -34,32 +33,25 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include -#include +#include "includes.h" + #include #include #include -#include #include -#include -#include -#include - -#include -#include #include #include -#include -#include -#include -#include -#include -#include "xmalloc.h" +#include +#include + #include "ssh.h" #include "rsa.h" #include "buffer.h" +#include "bufaux.h" +#include "xmalloc.h" +#include "getput.h" #include "key.h" #include "authfd.h" #include "compat.h" @@ -109,8 +101,8 @@ pid_t parent_pid = -1; /* pathname and directory for AUTH_SOCKET */ -char socket_name[MAXPATHLEN]; -char socket_dir[MAXPATHLEN]; +char socket_name[1024]; +char socket_dir[1024]; /* locking */ int locked = 0; @@ -315,8 +307,8 @@ Identity *id = lookup_identity(key, 2); if (id != NULL && (!id->confirm || confirm_key(id) == 0)) ok = key_sign(id->key, &signature, &slen, data, dlen); - key_free(key); } + key_free(key); buffer_init(&msg); if (ok == 0) { buffer_put_char(&msg, SSH2_AGENT_SIGN_RESPONSE); @@ -691,7 +683,7 @@ if (buffer_len(&e->input) < 5) return; /* Incomplete message. */ cp = buffer_ptr(&e->input); - msg_len = get_u32(cp); + msg_len = GET_32BIT(cp); if (msg_len > 256 * 1024) { close_socket(e); return; @@ -803,7 +795,10 @@ } old_alloc = sockets_alloc; new_alloc = sockets_alloc + 10; - sockets = xrealloc(sockets, new_alloc, sizeof(sockets[0])); + if (sockets) + sockets = xrealloc(sockets, new_alloc * sizeof(sockets[0])); + else + sockets = xmalloc(new_alloc * sizeof(sockets[0])); for (i = old_alloc; i < new_alloc; i++) sockets[i].type = AUTH_UNUSED; sockets_alloc = new_alloc; @@ -884,7 +879,7 @@ if (FD_ISSET(sockets[i].fd, readset)) { slen = sizeof(sunaddr); sock = accept(sockets[i].fd, - (struct sockaddr *)&sunaddr, &slen); + (struct sockaddr *) &sunaddr, &slen); if (sock < 0) { error("accept from AUTH_SOCKET: %s", strerror(errno)); @@ -961,7 +956,6 @@ _exit(i); } -/*ARGSUSED*/ static void cleanup_handler(int sig) { @@ -969,7 +963,6 @@ _exit(2); } -/*ARGSUSED*/ static void check_parent_exists(int sig) { @@ -1003,7 +996,7 @@ main(int ac, char **av) { int c_flag = 0, d_flag = 0, k_flag = 0, s_flag = 0; - int sock, fd, ch; + int sock, fd, ch; u_int nalloc; char *shell, *format, *pidstr, *agentsocket = NULL; fd_set *readsetp = NULL, *writesetp = NULL; @@ -1064,24 +1057,20 @@ if (ac == 0 && !c_flag && !s_flag) { shell = getenv("SHELL"); - if (shell != NULL && - strncmp(shell + strlen(shell) - 3, "csh", 3) == 0) + if (shell != NULL && strncmp(shell + strlen(shell) - 3, "csh", 3) == 0) c_flag = 1; } if (k_flag) { - const char *errstr = NULL; - pidstr = getenv(SSH_AGENTPID_ENV_NAME); if (pidstr == NULL) { fprintf(stderr, "%s not set, cannot kill agent\n", SSH_AGENTPID_ENV_NAME); exit(1); } - pid = (int)strtonum(pidstr, 2, INT_MAX, &errstr); - if (errstr) { - fprintf(stderr, - "%s=\"%s\", which is not a good PID: %s\n", - SSH_AGENTPID_ENV_NAME, pidstr, errstr); + pid = atoi(pidstr); + if (pid < 1) { + fprintf(stderr, "%s=\"%s\", which is not a good PID\n", + SSH_AGENTPID_ENV_NAME, pidstr); exit(1); } if (kill(pid, SIGTERM) == -1) { @@ -1124,7 +1113,7 @@ memset(&sunaddr, 0, sizeof(sunaddr)); sunaddr.sun_family = AF_UNIX; strlcpy(sunaddr.sun_path, socket_name, sizeof(sunaddr.sun_path)); - if (bind(sock, (struct sockaddr *)&sunaddr, sizeof(sunaddr)) < 0) { + if (bind(sock, (struct sockaddr *) & sunaddr, sizeof(sunaddr)) < 0) { perror("bind"); *socket_name = '\0'; /* Don't unlink any existing file */ cleanup_exit(1);