=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/ssh/ssh-agent.c,v retrieving revision 1.56 retrieving revision 1.57 diff -u -r1.56 -r1.57 --- src/usr.bin/ssh/ssh-agent.c 2001/06/25 08:25:40 1.56 +++ src/usr.bin/ssh/ssh-agent.c 2001/06/26 04:07:06 1.57 @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-agent.c,v 1.56 2001/06/25 08:25:40 markus Exp $ */ +/* $OpenBSD: ssh-agent.c,v 1.57 2001/06/26 04:07:06 markus Exp $ */ /* * Author: Tatu Ylonen @@ -36,7 +36,7 @@ */ #include "includes.h" -RCSID("$OpenBSD: ssh-agent.c,v 1.56 2001/06/25 08:25:40 markus Exp $"); +RCSID("$OpenBSD: ssh-agent.c,v 1.57 2001/06/26 04:07:06 markus Exp $"); #include #include @@ -702,7 +702,7 @@ int main(int ac, char **av) { - int sock, c_flag = 0, k_flag = 0, s_flag = 0, ch; + int sock, c_flag = 0, d_flag = 0, k_flag = 0, s_flag = 0, ch; struct sockaddr_un sunaddr; struct rlimit rlim; pid_t pid; @@ -712,7 +712,7 @@ SSLeay_add_all_algorithms(); - while ((ch = getopt(ac, av, "cks")) != -1) { + while ((ch = getopt(ac, av, "cdks")) != -1) { switch (ch) { case 'c': if (s_flag) @@ -727,6 +727,11 @@ usage(); s_flag++; break; + case 'd': + if (d_flag) + usage(); + d_flag++; + break; default: usage(); } @@ -734,10 +739,10 @@ ac -= optind; av += optind; - if (ac > 0 && (c_flag || k_flag || s_flag)) + if (ac > 0 && (c_flag || k_flag || s_flag || d_flag)) usage(); - if (ac == 0 && !c_flag && !k_flag && !s_flag) { + if (ac == 0 && !c_flag && !k_flag && !s_flag && !d_flag) { shell = getenv("SHELL"); if (shell != NULL && strncmp(shell + strlen(shell) - 3, "csh", 3) == 0) c_flag = 1; @@ -801,6 +806,14 @@ * Fork, and have the parent execute the command, if any, or present * the socket data. The child continues as the authentication agent. */ + if (d_flag) { + log_init(__progname, SYSLOG_LEVEL_DEBUG1, SYSLOG_FACILITY_AUTH, 1); + format = c_flag ? "setenv %s %s;\n" : "%s=%s; export %s;\n"; + printf(format, SSH_AUTHSOCKET_ENV_NAME, socket_name, + SSH_AUTHSOCKET_ENV_NAME); + printf("echo Agent pid %d;\n", parent_pid); + goto skip; + } pid = fork(); if (pid == -1) { perror("fork"); @@ -841,6 +854,8 @@ perror("setsid"); cleanup_exit(1); } + +skip: if (atexit(cleanup_socket) < 0) { perror("atexit"); cleanup_exit(1); @@ -851,8 +866,10 @@ alarm(10); } idtab_init(); - signal(SIGINT, SIG_IGN); - signal(SIGPIPE, SIG_IGN); + if (!d_flag) { + signal(SIGINT, SIG_IGN); + signal(SIGPIPE, SIG_IGN); + } signal(SIGHUP, cleanup_handler); signal(SIGTERM, cleanup_handler); while (1) {