From d94580c708175649f4e433451ac096425d3b81e2 Mon Sep 17 00:00:00 2001 From: Ben Lindstrom Date: Wed, 4 Jul 2001 03:48:02 +0000 Subject: [PATCH] - markus@cvs.openbsd.org 2001/06/26 04:07:06 [ssh-agent.1 ssh-agent.c] add debug flag --- ChangeLog | 5 ++++- ssh-agent.1 | 8 +++++++- ssh-agent.c | 35 ++++++++++++++++++++++++++--------- 3 files changed, 37 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2d9df43b5..39f871269 100644 --- a/ChangeLog +++ b/ChangeLog @@ -19,6 +19,9 @@ - markus@cvs.openbsd.org 2001/06/26 02:47:07 [ssh-keygen.c] allow loading a private RSA key to a cyberflex card. + - markus@cvs.openbsd.org 2001/06/26 04:07:06 + [ssh-agent.1 ssh-agent.c] + add debug flag 20010629 - (bal) Removed net_aton() since we don't use it any more @@ -5846,4 +5849,4 @@ - Wrote replacements for strlcpy and mkdtemp - Released 1.0pre1 -$Id: ChangeLog,v 1.1349 2001/07/04 03:44:03 mouring Exp $ +$Id: ChangeLog,v 1.1350 2001/07/04 03:48:02 mouring Exp $ diff --git a/ssh-agent.1 b/ssh-agent.1 index 1d214698d..0aecfc0f0 100644 --- a/ssh-agent.1 +++ b/ssh-agent.1 @@ -1,4 +1,4 @@ -.\" $OpenBSD: ssh-agent.1,v 1.24 2001/04/10 09:13:21 itojun Exp $ +.\" $OpenBSD: ssh-agent.1,v 1.25 2001/06/26 04:07:06 markus Exp $ .\" .\" Author: Tatu Ylonen .\" Copyright (c) 1995 Tatu Ylonen , Espoo, Finland @@ -48,6 +48,8 @@ .Op Fl c Li | Fl s .Nm ssh-agent .Fl k +.Nm ssh-agent +.Fl d .Sh DESCRIPTION .Nm is a program to hold private keys used for public key authentication @@ -80,6 +82,10 @@ does not look like it's a csh style of shell. Kill the current agent (given by the .Ev SSH_AGENT_PID environment variable). +.It Fl d +Debug mode. When this option is specified +.Nm +will fork. .El .Pp If a commandline is given, this is executed as a subprocess of the agent. diff --git a/ssh-agent.c b/ssh-agent.c index 54b375fce..573efaf89 100644 --- a/ssh-agent.c +++ b/ssh-agent.c @@ -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 @@ -706,7 +706,7 @@ usage(void) 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; #ifdef HAVE_SETRLIMIT struct rlimit rlim; @@ -726,9 +726,9 @@ main(int ac, char **av) seed_rng(); #ifdef __GNU_LIBRARY__ - while ((ch = getopt(ac, av, "+cks")) != -1) { + while ((ch = getopt(ac, av, "+cdks")) != -1) { #else /* __GNU_LIBRARY__ */ - while ((ch = getopt(ac, av, "cks")) != -1) { + while ((ch = getopt(ac, av, "cdks")) != -1) { #endif /* __GNU_LIBRARY__ */ switch (ch) { case 'c': @@ -744,6 +744,11 @@ main(int ac, char **av) usage(); s_flag++; break; + case 'd': + if (d_flag) + usage(); + d_flag++; + break; default: usage(); } @@ -751,10 +756,10 @@ main(int ac, char **av) 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; @@ -827,6 +832,14 @@ main(int ac, char **av) * 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"); @@ -869,6 +882,8 @@ main(int ac, char **av) perror("setsid"); cleanup_exit(1); } + +skip: if (atexit(cleanup_socket) < 0) { perror("atexit"); cleanup_exit(1); @@ -879,8 +894,10 @@ main(int ac, char **av) 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) {