version 1.351, 2010/09/02 16:08:39 |
version 1.352, 2010/09/20 04:41:47 |
|
|
#include <sys/stat.h> |
#include <sys/stat.h> |
#include <sys/types.h> |
#include <sys/types.h> |
#include <sys/time.h> |
#include <sys/time.h> |
|
#include <sys/wait.h> |
|
|
#include <ctype.h> |
#include <ctype.h> |
#include <errno.h> |
#include <errno.h> |
|
|
static int ssh_session(void); |
static int ssh_session(void); |
static int ssh_session2(void); |
static int ssh_session2(void); |
static void load_public_identity_files(void); |
static void load_public_identity_files(void); |
|
static void main_sigchld_handler(int); |
|
|
/* from muxclient.c */ |
/* from muxclient.c */ |
void muxclient(const char *); |
void muxclient(const char *); |
|
|
tilde_expand_filename(options.user_hostfile2, original_real_uid); |
tilde_expand_filename(options.user_hostfile2, original_real_uid); |
|
|
signal(SIGPIPE, SIG_IGN); /* ignore SIGPIPE early */ |
signal(SIGPIPE, SIG_IGN); /* ignore SIGPIPE early */ |
|
signal(SIGCHLD, main_sigchld_handler); |
|
|
/* Log into the remote system. Never returns if the login fails. */ |
/* Log into the remote system. Never returns if the login fails. */ |
ssh_login(&sensitive_data, host, (struct sockaddr *)&hostaddr, |
ssh_login(&sensitive_data, host, (struct sockaddr *)&hostaddr, |
|
|
bzero(pwdir, strlen(pwdir)); |
bzero(pwdir, strlen(pwdir)); |
xfree(pwdir); |
xfree(pwdir); |
} |
} |
|
|
|
static void |
|
main_sigchld_handler(int sig) |
|
{ |
|
int save_errno = errno; |
|
pid_t pid; |
|
int status; |
|
|
|
while ((pid = waitpid(-1, &status, WNOHANG)) > 0 || |
|
(pid < 0 && errno == EINTR)) |
|
; |
|
|
|
signal(sig, main_sigchld_handler); |
|
errno = save_errno; |
|
} |
|
|