*** openssh-3.5p1/session.c	Wed Sep 25 19:38:28 2002
--- chroot-openssh-3.5p1/session.c	Mon Oct 28 10:31:22 2002
***************
*** 64,69 ****
--- 64,71 ----
  #define is_winnt       (GetVersion() < 0x80000000)
  #endif
  
+ #define CHROOT
+ 
  /* func */
  
  Session *session_new(void);
***************
*** 1195,1200 ****
--- 1197,1207 ----
  void
  do_setusercontext(struct passwd *pw)
  {
+ #ifdef CHROOT
+       char *user_dir;
+       char *new_root;
+ #endif /* CHROOT */
+ 
  #ifdef HAVE_CYGWIN
  	if (is_winnt) {
  #else /* HAVE_CYGWIN */
***************
*** 1221,1226 ****
--- 1228,1254 ----
  
  		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);

