[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.84 and 1.85

version 1.84, 2001/06/11 10:18:24 version 1.85, 2001/06/12 10:58:29
Line 86 
Line 86 
   
 Session *session_new(void);  Session *session_new(void);
 void    session_set_fds(Session *s, int fdin, int fdout, int fderr);  void    session_set_fds(Session *s, int fdin, int fdout, int fderr);
 void    session_pty_cleanup(Session *s);  void    session_pty_cleanup(void *session);
 void    session_proctitle(Session *s);  void    session_proctitle(Session *s);
 int     session_setup_x11fwd(Session *s);  int     session_setup_x11fwd(Session *s);
 void    session_close(Session *s);  void    session_close(Session *s);
Line 189 
Line 189 
 }  }
   
 /*  /*
  * Function to perform cleanup if we get aborted abnormally (e.g., due to a  
  * dropped connection).  
  */  
 void  
 pty_cleanup_proc(void *session)  
 {  
         Session *s=session;  
         if (s == NULL)  
                 fatal("pty_cleanup_proc: no session");  
         debug("pty_cleanup_proc: %s", s->tty);  
   
         if (s->pid != 0) {  
                 /* Record that the user has logged out. */  
                 record_logout(s->pid, s->tty);  
         }  
   
         /* Release the pseudo-tty. */  
         pty_release(s->tty);  
 }  
   
 /*  
  * Prepares for an interactive session.  This is called after the user has   * Prepares for an interactive session.  This is called after the user has
  * been successfully authenticated.  During this message exchange, pseudo   * been successfully authenticated.  During this message exchange, pseudo
  * terminals are allocated, X11, TCP/IP, and authentication agent forwardings   * terminals are allocated, X11, TCP/IP, and authentication agent forwardings
Line 268 
Line 247 
                                 error("Failed to allocate pty.");                                  error("Failed to allocate pty.");
                                 break;                                  break;
                         }                          }
                         fatal_add_cleanup(pty_cleanup_proc, (void *)s);                          fatal_add_cleanup(session_pty_cleanup, (void *)s);
                         pty_setowner(s->pw, s->tty);                          pty_setowner(s->pw, s->tty);
   
                         /* Get TERM from the packet.  Note that the value may be of arbitrary length. */                          /* Get TERM from the packet.  Note that the value may be of arbitrary length. */
Line 1174 
Line 1153 
                 debug("session_new: init");                  debug("session_new: init");
                 for(i = 0; i < MAX_SESSIONS; i++) {                  for(i = 0; i < MAX_SESSIONS; i++) {
                         sessions[i].used = 0;                          sessions[i].used = 0;
                         sessions[i].self = i;  
                 }                  }
                 did_init = 1;                  did_init = 1;
         }          }
Line 1186 
Line 1164 
                         s->ptyfd = -1;                          s->ptyfd = -1;
                         s->ttyfd = -1;                          s->ttyfd = -1;
                         s->used = 1;                          s->used = 1;
                           s->self = i;
                         debug("session_new: session %d", i);                          debug("session_new: session %d", i);
                         return s;                          return s;
                 }                  }
Line 1302 
Line 1281 
          * Add a cleanup function to clear the utmp entry and record logout           * Add a cleanup function to clear the utmp entry and record logout
          * time in case we call fatal() (e.g., the connection gets closed).           * time in case we call fatal() (e.g., the connection gets closed).
          */           */
         fatal_add_cleanup(pty_cleanup_proc, (void *)s);          fatal_add_cleanup(session_pty_cleanup, (void *)s);
         pty_setowner(s->pw, s->tty);          pty_setowner(s->pw, s->tty);
         /* Get window size from the packet. */          /* Get window size from the packet. */
         pty_change_window_size(s->ptyfd, s->row, s->col, s->xpixel, s->ypixel);          pty_change_window_size(s->ptyfd, s->row, s->col, s->xpixel, s->ypixel);
Line 1486 
Line 1465 
             1);              1);
 }  }
   
   /*
    * Function to perform pty cleanup. Also called if we get aborted abnormally
    * (e.g., due to a dropped connection).
    */
 void  void
 session_pty_cleanup(Session *s)  session_pty_cleanup(void *session)
 {  {
         if (s == NULL || s->ttyfd == -1)          Session *s = session;
   
           if (s == NULL) {
                   error("session_pty_cleanup: no session");
                 return;                  return;
           }
           if (s->ttyfd == -1)
                   return;
   
         debug("session_pty_cleanup: session %d release %s", s->self, s->tty);          debug("session_pty_cleanup: session %d release %s", s->self, s->tty);
   
         /* Cancel the cleanup function. */  
         fatal_remove_cleanup(pty_cleanup_proc, (void *)s);  
   
         /* Record that the user has logged out. */          /* Record that the user has logged out. */
         record_logout(s->pid, s->tty);          if (s->pid != 0)
                   record_logout(s->pid, s->tty);
   
         /* Release the pseudo-tty. */          /* Release the pseudo-tty. */
         pty_release(s->tty);          pty_release(s->tty);
Line 1520 
Line 1507 
                 fatal("session_close: no session");                  fatal("session_close: no session");
         c = channel_lookup(s->chanid);          c = channel_lookup(s->chanid);
         if (c == NULL)          if (c == NULL)
                 fatal("session_close: session %d: no channel %d",                  fatal("session_exit_message: session %d: no channel %d",
                     s->self, s->chanid);                      s->self, s->chanid);
         debug("session_exit_message: session %d channel %d pid %d",          debug("session_exit_message: session %d channel %d pid %d",
             s->self, s->chanid, s->pid);              s->self, s->chanid, s->pid);
Line 1558 
Line 1545 
 }  }
   
 void  void
 session_free(Session *s)  session_close(Session *s)
 {  {
         debug("session_free: session %d pid %d", s->self, s->pid);          debug("session_close: session %d pid %d", s->self, s->pid);
           if (s->ttyfd != -1) {
                   fatal_remove_cleanup(session_pty_cleanup, (void *)s);
                   session_pty_cleanup(s);
           }
         if (s->term)          if (s->term)
                 xfree(s->term);                  xfree(s->term);
         if (s->display)          if (s->display)
Line 1570 
Line 1561 
         if (s->auth_proto)          if (s->auth_proto)
                 xfree(s->auth_proto);                  xfree(s->auth_proto);
         s->used = 0;          s->used = 0;
 }  
   
 void  
 session_close(Session *s)  
 {  
         session_pty_cleanup(s);  
         session_free(s);  
         session_proctitle(s);          session_proctitle(s);
 }  }
   

Legend:
Removed from v.1.84  
changed lines
  Added in v.1.85