[BACK]Return to session.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / ssh

Diff for /src/usr.bin/ssh/session.c between version 1.59 and 1.60

version 1.59, 2001/03/04 01:46:30 version 1.60, 2001/03/15 22:07:08
Line 96 
Line 96 
 void    do_exec_pty(Session *s, const char *command, struct passwd * pw);  void    do_exec_pty(Session *s, const char *command, struct passwd * pw);
 void    do_exec_no_pty(Session *s, const char *command, struct passwd * pw);  void    do_exec_no_pty(Session *s, const char *command, struct passwd * pw);
 void    do_login(Session *s, const char *command);  void    do_login(Session *s, const char *command);
   void    do_child(Session *s, const char *command);
   
 void  
 do_child(const char *command, struct passwd * pw, const char *term,  
     const char *display, const char *auth_proto,  
     const char *auth_data, const char *ttyname);  
   
 /* import */  /* import */
 extern ServerOptions options;  extern ServerOptions options;
 extern char *__progname;  extern char *__progname;
Line 505 
Line 501 
 #endif /* USE_PIPES */  #endif /* USE_PIPES */
   
                 /* Do processing for the child (exec command etc). */                  /* Do processing for the child (exec command etc). */
                 do_child(command, pw, NULL, s->display, s->auth_proto, s->auth_data, NULL);                  do_child(s, command);
                 /* NOTREACHED */                  /* NOTREACHED */
         }          }
         if (pid < 0)          if (pid < 0)
Line 592 
Line 588 
                         do_login(s, command);                          do_login(s, command);
   
                 /* Do common processing for the child, such as execing the command. */                  /* Do common processing for the child, such as execing the command. */
                 do_child(command, pw, s->term, s->display, s->auth_proto,                  do_child(s, command);
                     s->auth_data, s->tty);  
                 /* NOTREACHED */                  /* NOTREACHED */
         }          }
         if (pid < 0)          if (pid < 0)
Line 798 
Line 793 
  * ids, and executing the command or shell.   * ids, and executing the command or shell.
  */   */
 void  void
 do_child(const char *command, struct passwd * pw, const char *term,  do_child(Session *s, const char *command)
          const char *display, const char *auth_proto,  
          const char *auth_data, const char *ttyname)  
 {  {
         const char *shell, *hostname = NULL, *cp = NULL;          const char *shell, *hostname = NULL, *cp = NULL;
           struct passwd * pw = s->pw;
         char buf[256];          char buf[256];
         char cmd[1024];          char cmd[1024];
         FILE *f = NULL;          FILE *f = NULL;
Line 811 
Line 805 
         extern char **environ;          extern char **environ;
         struct stat st;          struct stat st;
         char *argv[10];          char *argv[10];
           int do_xauth = s->auth_proto != NULL && s->auth_data != NULL;
   
         /* login(1) is only called if we execute the login shell */          /* login(1) is only called if we execute the login shell */
         if (options.use_login && command != NULL)          if (options.use_login && command != NULL)
Line 933 
Line 928 
                  get_remote_ipaddr(), get_remote_port(), get_local_port());                   get_remote_ipaddr(), get_remote_port(), get_local_port());
         child_set_env(&env, &envsize, "SSH_CLIENT", buf);          child_set_env(&env, &envsize, "SSH_CLIENT", buf);
   
         if (ttyname)          if (s->ttyfd != -1)
                 child_set_env(&env, &envsize, "SSH_TTY", ttyname);                  child_set_env(&env, &envsize, "SSH_TTY", s->tty);
         if (term)          if (s->term)
                 child_set_env(&env, &envsize, "TERM", term);                  child_set_env(&env, &envsize, "TERM", s->term);
         if (display)          if (s->display)
                 child_set_env(&env, &envsize, "DISPLAY", display);                  child_set_env(&env, &envsize, "DISPLAY", s->display);
         if (original_command)          if (original_command)
                 child_set_env(&env, &envsize, "SSH_ORIGINAL_COMMAND",                  child_set_env(&env, &envsize, "SSH_ORIGINAL_COMMAND",
                     original_command);                      original_command);
Line 1031 
Line 1026 
         if (!options.use_login) {          if (!options.use_login) {
                 if (stat(_PATH_SSH_USER_RC, &st) >= 0) {                  if (stat(_PATH_SSH_USER_RC, &st) >= 0) {
                         if (debug_flag)                          if (debug_flag)
                                 fprintf(stderr, "Running %s %s\n", _PATH_BSHELL, _PATH_SSH_USER_RC);                                  fprintf(stderr, "Running %s %s\n", _PATH_BSHELL,
                                       _PATH_SSH_USER_RC);
                         f = popen(_PATH_BSHELL " " _PATH_SSH_USER_RC, "w");                          f = popen(_PATH_BSHELL " " _PATH_SSH_USER_RC, "w");
                         if (f) {                          if (f) {
                                 if (auth_proto != NULL && auth_data != NULL)                                  if (do_xauth)
                                         fprintf(f, "%s %s\n", auth_proto, auth_data);                                          fprintf(f, "%s %s\n", s->auth_proto,
                                               s->auth_data);
                                 pclose(f);                                  pclose(f);
                         } else                          } else
                                 fprintf(stderr, "Could not run %s\n", _PATH_SSH_USER_RC);                                  fprintf(stderr, "Could not run %s\n",
                                       _PATH_SSH_USER_RC);
                 } else if (stat(_PATH_SSH_SYSTEM_RC, &st) >= 0) {                  } else if (stat(_PATH_SSH_SYSTEM_RC, &st) >= 0) {
                         if (debug_flag)                          if (debug_flag)
                                 fprintf(stderr, "Running %s %s\n", _PATH_BSHELL, _PATH_SSH_SYSTEM_RC);                                  fprintf(stderr, "Running %s %s\n", _PATH_BSHELL,
                                       _PATH_SSH_SYSTEM_RC);
                         f = popen(_PATH_BSHELL " " _PATH_SSH_SYSTEM_RC, "w");                          f = popen(_PATH_BSHELL " " _PATH_SSH_SYSTEM_RC, "w");
                         if (f) {                          if (f) {
                                 if (auth_proto != NULL && auth_data != NULL)                                  if (do_xauth)
                                         fprintf(f, "%s %s\n", auth_proto, auth_data);                                          fprintf(f, "%s %s\n", s->auth_proto,
                                               s->auth_data);
                                 pclose(f);                                  pclose(f);
                         } else                          } else
                                 fprintf(stderr, "Could not run %s\n", _PATH_SSH_SYSTEM_RC);                                  fprintf(stderr, "Could not run %s\n",
                 } else if (options.xauth_location != NULL) {                                      _PATH_SSH_SYSTEM_RC);
                   } else if (do_xauth && options.xauth_location != NULL) {
                         /* Add authority data to .Xauthority if appropriate. */                          /* Add authority data to .Xauthority if appropriate. */
                         if (auth_proto != NULL && auth_data != NULL) {                          char *screen = strchr(s->display, ':');
                                 char *screen = strchr(display, ':');  
                                 if (debug_flag) {                          if (debug_flag) {
                                   fprintf(stderr,
                                       "Running %.100s add "
                                       "%.100s %.100s %.100s\n",
                                       options.xauth_location, s->display,
                                       s->auth_proto, s->auth_data);
                                   if (screen != NULL)
                                         fprintf(stderr,                                          fprintf(stderr,
                                             "Running %.100s add %.100s %.100s %.100s\n",                                              "Adding %.*s/unix%s %s %s\n",
                                             options.xauth_location, display,                                              (int)(screen - s->display),
                                             auth_proto, auth_data);                                              s->display, screen,
                                         if (screen != NULL)                                              s->auth_proto, s->auth_data);
                                                 fprintf(stderr,  
                                                     "Adding %.*s/unix%s %s %s\n",  
                                                     (int)(screen-display), display,  
                                                     screen, auth_proto, auth_data);  
                                 }  
                                 snprintf(cmd, sizeof cmd, "%s -q -",  
                                     options.xauth_location);  
                                 f = popen(cmd, "w");  
                                 if (f) {  
                                         fprintf(f, "add %s %s %s\n", display,  
                                             auth_proto, auth_data);  
                                         if (screen != NULL)  
                                                 fprintf(f, "add %.*s/unix%s %s %s\n",  
                                                     (int)(screen-display), display,  
                                                     screen, auth_proto, auth_data);  
                                         pclose(f);  
                                 } else {  
                                         fprintf(stderr, "Could not run %s\n",  
                                             cmd);  
                                 }  
                         }                          }
                           snprintf(cmd, sizeof cmd, "%s -q -",
                               options.xauth_location);
                           f = popen(cmd, "w");
                           if (f) {
                                   fprintf(f, "add %s %s %s\n", s->display,
                                       s->auth_proto, s->auth_data);
                                   if (screen != NULL)
                                           fprintf(f, "add %.*s/unix%s %s %s\n",
                                               (int)(screen - s->display),
                                               s->display, screen,
                                               s->auth_proto,
                                               s->auth_data);
                                   pclose(f);
                           } else {
                                   fprintf(stderr, "Could not run %s\n",
                                       cmd);
                           }
                 }                  }
                 /* Get the last component of the shell name. */                  /* Get the last component of the shell name. */
                 cp = strrchr(shell, '/');                  cp = strrchr(shell, '/');
Line 1103 
Line 1105 
                          * Check for mail if we have a tty and it was enabled                           * Check for mail if we have a tty and it was enabled
                          * in server options.                           * in server options.
                          */                           */
                         if (ttyname && options.check_mail) {                          if (s->ttyfd != -1 && options.check_mail) {
                                 char *mailbox;                                  char *mailbox;
                                 struct stat mailstat;                                  struct stat mailstat;
   
                                 mailbox = getenv("MAIL");                                  mailbox = getenv("MAIL");
                                 if (mailbox != NULL) {                                  if (mailbox != NULL) {
                                         if (stat(mailbox, &mailstat) != 0 ||                                          if (stat(mailbox, &mailstat) != 0 ||

Legend:
Removed from v.1.59  
changed lines
  Added in v.1.60