version 1.278, 2015/04/24 01:36:00 |
version 1.279, 2015/10/24 22:52:22 |
|
|
login_cap_t *lc; |
login_cap_t *lc; |
|
|
static int is_child = 0; |
static int is_child = 0; |
|
static int in_chroot = 0; |
|
|
/* Name and directory of socket for authentication agent forwarding. */ |
/* Name and directory of socket for authentication agent forwarding. */ |
static char *auth_sock_name = NULL; |
static char *auth_sock_name = NULL; |
|
|
exit(1); |
exit(1); |
} |
} |
|
|
if (options.chroot_directory != NULL && |
if (!in_chroot && options.chroot_directory != NULL && |
strcasecmp(options.chroot_directory, "none") != 0) { |
strcasecmp(options.chroot_directory, "none") != 0) { |
tmp = tilde_expand_filename(options.chroot_directory, |
tmp = tilde_expand_filename(options.chroot_directory, |
pw->pw_uid); |
pw->pw_uid); |
|
|
/* Make sure we don't attempt to chroot again */ |
/* Make sure we don't attempt to chroot again */ |
free(options.chroot_directory); |
free(options.chroot_directory); |
options.chroot_directory = NULL; |
options.chroot_directory = NULL; |
|
in_chroot = 1; |
} |
} |
|
|
/* Set UID */ |
/* Set UID */ |
|
|
if (chdir(pw->pw_dir) < 0) { |
if (chdir(pw->pw_dir) < 0) { |
/* Suppress missing homedir warning for chroot case */ |
/* Suppress missing homedir warning for chroot case */ |
r = login_getcapbool(lc, "requirehome", 0); |
r = login_getcapbool(lc, "requirehome", 0); |
if (r || options.chroot_directory == NULL || |
if (r || !in_chroot) { |
strcasecmp(options.chroot_directory, "none") == 0) |
|
fprintf(stderr, "Could not chdir to home " |
fprintf(stderr, "Could not chdir to home " |
"directory %s: %s\n", pw->pw_dir, |
"directory %s: %s\n", pw->pw_dir, |
strerror(errno)); |
strerror(errno)); |
|
} |
if (r) |
if (r) |
exit(1); |
exit(1); |
} |
} |