*** ./openssh-3.4p1/session.c Wed Jun 26 06:51:06 2002 --- ./openssh-3.4p1-chroot/session.c Mon Jul 8 10:35:44 2002 *************** *** 64,69 **** --- 64,71 ---- #define is_winnt (GetVersion() < 0x80000000) #endif + #define CHROOT + /* func */ Session *session_new(void); *************** *** 1159,1164 **** --- 1161,1171 ---- void do_setusercontext(struct passwd *pw) { + #ifdef CHROOT + char *user_dir; + char *new_root; + #endif /* CHROOT */ + char tty='\0'; #ifdef HAVE_CYGWIN *************** *** 1187,1192 **** --- 1194,1220 ---- if (setlogin(pw->pw_name) < 0) error("setlogin failed: %s", strerror(errno)); + + #ifdef CHROOT + user_dir = xstrdup(pw->pw_dir); + new_root = user_dir + 1; + + while((new_root = strchr(new_root, '.')) != NULL) { + new_root--; + if(strncmp(new_root, "/./", 3) == 0) { + *new_root = '\0'; + new_root += 2; + + if(chroot(user_dir) != 0) + fatal("Couldn't chroot to user directory %s", user_dir); + + pw->pw_dir = new_root; + break; + } + new_root += 2; + } + #endif /* CHROOT */ + if (setgid(pw->pw_gid) < 0) { perror("setgid"); exit(1);