version 1.94, 2011/06/17 21:46:16 |
version 1.95, 2013/01/03 12:54:49 |
|
|
int in, out, max, ch, skipargs = 0, log_stderr = 0; |
int in, out, max, ch, skipargs = 0, log_stderr = 0; |
ssize_t len, olen, set_size; |
ssize_t len, olen, set_size; |
SyslogFacility log_facility = SYSLOG_FACILITY_AUTH; |
SyslogFacility log_facility = SYSLOG_FACILITY_AUTH; |
char *cp, buf[4*4096]; |
char *cp, *homedir = NULL, buf[4*4096]; |
long mask; |
long mask; |
|
|
extern char *optarg; |
extern char *optarg; |
|
|
|
|
log_init(__progname, log_level, log_facility, log_stderr); |
log_init(__progname, log_level, log_facility, log_stderr); |
|
|
while (!skipargs && (ch = getopt(argc, argv, "f:l:u:cehR")) != -1) { |
pw = pwcopy(user_pw); |
|
|
|
while (!skipargs && (ch = getopt(argc, argv, "d:f:l:u:cehR")) != -1) { |
switch (ch) { |
switch (ch) { |
case 'R': |
case 'R': |
readonly = 1; |
readonly = 1; |
|
|
if (log_facility == SYSLOG_FACILITY_NOT_SET) |
if (log_facility == SYSLOG_FACILITY_NOT_SET) |
error("Invalid log facility \"%s\"", optarg); |
error("Invalid log facility \"%s\"", optarg); |
break; |
break; |
|
case 'd': |
|
cp = tilde_expand_filename(optarg, user_pw->pw_uid); |
|
homedir = percent_expand(cp, "d", user_pw->pw_dir, |
|
"u", user_pw->pw_name, (char *)NULL); |
|
free(cp); |
|
break; |
case 'u': |
case 'u': |
errno = 0; |
errno = 0; |
mask = strtol(optarg, &cp, 8); |
mask = strtol(optarg, &cp, 8); |
|
|
} else |
} else |
client_addr = xstrdup("UNKNOWN"); |
client_addr = xstrdup("UNKNOWN"); |
|
|
pw = pwcopy(user_pw); |
|
|
|
logit("session opened for local user %s from [%s]", |
logit("session opened for local user %s from [%s]", |
pw->pw_name, client_addr); |
pw->pw_name, client_addr); |
|
|
|
|
set_size = howmany(max + 1, NFDBITS) * sizeof(fd_mask); |
set_size = howmany(max + 1, NFDBITS) * sizeof(fd_mask); |
rset = (fd_set *)xmalloc(set_size); |
rset = (fd_set *)xmalloc(set_size); |
wset = (fd_set *)xmalloc(set_size); |
wset = (fd_set *)xmalloc(set_size); |
|
|
|
if (homedir != NULL) { |
|
if (chdir(homedir) != 0) { |
|
error("chdir to \"%s\" failed: %s", homedir, |
|
strerror(errno)); |
|
} |
|
} |
|
|
for (;;) { |
for (;;) { |
memset(rset, 0, set_size); |
memset(rset, 0, set_size); |