version 1.200, 2015/04/24 01:36:01 |
version 1.201, 2015/04/24 05:26:44 |
|
|
int |
int |
main(int ac, char **av) |
main(int ac, char **av) |
{ |
{ |
int c_flag = 0, d_flag = 0, k_flag = 0, s_flag = 0; |
int c_flag = 0, d_flag = 0, D_flag = 0, k_flag = 0, s_flag = 0; |
int sock, fd, ch, result, saved_errno; |
int sock, fd, ch, result, saved_errno; |
u_int nalloc; |
u_int nalloc; |
char *shell, *format, *pidstr, *agentsocket = NULL; |
char *shell, *format, *pidstr, *agentsocket = NULL; |
|
|
OpenSSL_add_all_algorithms(); |
OpenSSL_add_all_algorithms(); |
#endif |
#endif |
|
|
while ((ch = getopt(ac, av, "cdksE:a:t:")) != -1) { |
while ((ch = getopt(ac, av, "cDdksE:a:t:")) != -1) { |
switch (ch) { |
switch (ch) { |
case 'E': |
case 'E': |
fingerprint_hash = ssh_digest_alg_by_name(optarg); |
fingerprint_hash = ssh_digest_alg_by_name(optarg); |
|
|
s_flag++; |
s_flag++; |
break; |
break; |
case 'd': |
case 'd': |
if (d_flag) |
if (d_flag || D_flag) |
usage(); |
usage(); |
d_flag++; |
d_flag++; |
break; |
break; |
|
case 'D': |
|
if (d_flag || D_flag) |
|
usage(); |
|
D_flag++; |
|
break; |
case 'a': |
case 'a': |
agentsocket = optarg; |
agentsocket = optarg; |
break; |
break; |
|
|
ac -= optind; |
ac -= optind; |
av += optind; |
av += optind; |
|
|
if (ac > 0 && (c_flag || k_flag || s_flag || d_flag)) |
if (ac > 0 && (c_flag || k_flag || s_flag || d_flag || D_flag)) |
usage(); |
usage(); |
|
|
if (ac == 0 && !c_flag && !s_flag) { |
if (ac == 0 && !c_flag && !s_flag) { |
|
|
* Fork, and have the parent execute the command, if any, or present |
* Fork, and have the parent execute the command, if any, or present |
* the socket data. The child continues as the authentication agent. |
* the socket data. The child continues as the authentication agent. |
*/ |
*/ |
if (d_flag) { |
if (D_flag || d_flag) { |
log_init(__progname, SYSLOG_LEVEL_DEBUG1, SYSLOG_FACILITY_AUTH, 1); |
log_init(__progname, |
|
d_flag ? SYSLOG_LEVEL_DEBUG3 : SYSLOG_LEVEL_INFO, |
|
SYSLOG_FACILITY_AUTH, 1); |
format = c_flag ? "setenv %s %s;\n" : "%s=%s; export %s;\n"; |
format = c_flag ? "setenv %s %s;\n" : "%s=%s; export %s;\n"; |
printf(format, SSH_AUTHSOCKET_ENV_NAME, socket_name, |
printf(format, SSH_AUTHSOCKET_ENV_NAME, socket_name, |
SSH_AUTHSOCKET_ENV_NAME); |
SSH_AUTHSOCKET_ENV_NAME); |
|
|
parent_alive_interval = 10; |
parent_alive_interval = 10; |
idtab_init(); |
idtab_init(); |
signal(SIGPIPE, SIG_IGN); |
signal(SIGPIPE, SIG_IGN); |
signal(SIGINT, d_flag ? cleanup_handler : SIG_IGN); |
signal(SIGINT, (d_flag | D_flag) ? cleanup_handler : SIG_IGN); |
signal(SIGHUP, cleanup_handler); |
signal(SIGHUP, cleanup_handler); |
signal(SIGTERM, cleanup_handler); |
signal(SIGTERM, cleanup_handler); |
nalloc = 0; |
nalloc = 0; |