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

Diff for /src/usr.bin/ssh/ssh.c between version 1.228 and 1.229

version 1.228, 2004/09/23 13:00:04 version 1.229, 2004/11/07 00:01:46
Line 144 
Line 144 
 /* fd to control socket */  /* fd to control socket */
 int control_fd = -1;  int control_fd = -1;
   
   /* Multiplexing control command */
   static u_int mux_command = SSHMUX_COMMAND_OPEN;
   
 /* Only used in control client mode */  /* Only used in control client mode */
 volatile sig_atomic_t control_client_terminate = 0;  volatile sig_atomic_t control_client_terminate = 0;
 u_int control_server_pid = 0;  u_int control_server_pid = 0;
Line 231 
Line 234 
   
 again:  again:
         while ((opt = getopt(ac, av,          while ((opt = getopt(ac, av,
             "1246ab:c:e:fgi:kl:m:no:p:qstvxACD:F:I:L:MNPR:S:TVXY")) != -1) {              "1246ab:c:e:fgi:kl:m:no:p:qstvxACD:F:I:L:MNO:PR:S:TVXY")) != -1) {
                 switch (opt) {                  switch (opt) {
                 case '1':                  case '1':
                         options.protocol = SSH_PROTO_1;                          options.protocol = SSH_PROTO_1;
Line 265 
Line 268 
                 case 'g':                  case 'g':
                         options.gateway_ports = 1;                          options.gateway_ports = 1;
                         break;                          break;
                   case 'O':
                           if (strcmp(optarg, "check") == 0)
                                   mux_command = SSHMUX_COMMAND_ALIVE_CHECK;
                           else if (strcmp(optarg, "exit") == 0)
                                   mux_command = SSHMUX_COMMAND_TERMINATE;
                           else
                                   fatal("Invalid multiplex command.");
                           break;
                 case 'P':       /* deprecated */                  case 'P':       /* deprecated */
                         options.use_privileged_port = 0;                          options.use_privileged_port = 0;
                         break;                          break;
Line 1239 
Line 1250 
         struct sockaddr_un addr;          struct sockaddr_un addr;
         int i, r, fd, sock, exitval, num_env;          int i, r, fd, sock, exitval, num_env;
         Buffer m;          Buffer m;
         char *cp;          char *term;
         extern char **environ;          extern char **environ;
           u_int  flags;
   
         if (stdin_null_flag) {          if (stdin_null_flag) {
                 if ((fd = open(_PATH_DEVNULL, O_RDONLY)) == -1)                  if ((fd = open(_PATH_DEVNULL, O_RDONLY)) == -1)
Line 1266 
Line 1278 
         if (connect(sock, (struct sockaddr*)&addr, addr.sun_len) == -1)          if (connect(sock, (struct sockaddr*)&addr, addr.sun_len) == -1)
                 fatal("Couldn't connect to %s: %s", path, strerror(errno));                  fatal("Couldn't connect to %s: %s", path, strerror(errno));
   
         if ((cp = getenv("TERM")) == NULL)          if ((term = getenv("TERM")) == NULL)
                 cp = "";                  term = "";
   
           flags = 0;
           if (tty_flag)
                   flags |= SSHMUX_FLAG_TTY;
           if (subsystem_flag)
                   flags |= SSHMUX_FLAG_SUBSYS;
   
         buffer_init(&m);          buffer_init(&m);
   
         /* Get PID of controlee */          /* Send our command to server */
           buffer_put_int(&m, mux_command);
           buffer_put_int(&m, flags);
           if (ssh_msg_send(sock, /* version */1, &m) == -1)
                   fatal("%s: msg_send", __func__);
           buffer_clear(&m);
   
           /* Get authorisation status and PID of controlee */
         if (ssh_msg_recv(sock, &m) == -1)          if (ssh_msg_recv(sock, &m) == -1)
                 fatal("%s: msg_recv", __func__);                  fatal("%s: msg_recv", __func__);
         if (buffer_get_char(&m) != 0)          if (buffer_get_char(&m) != 1)
                 fatal("%s: wrong version", __func__);                  fatal("%s: wrong version", __func__);
         /* Connection allowed? */  
         if (buffer_get_int(&m) != 1)          if (buffer_get_int(&m) != 1)
                 fatal("Connection to master denied");                  fatal("Connection to master denied");
         control_server_pid = buffer_get_int(&m);          control_server_pid = buffer_get_int(&m);
   
         buffer_clear(&m);          buffer_clear(&m);
         buffer_put_int(&m, tty_flag);  
         buffer_put_int(&m, subsystem_flag);  
         buffer_put_cstring(&m, cp);  
   
           switch (mux_command) {
           case SSHMUX_COMMAND_ALIVE_CHECK:
                   fprintf(stderr, "Master running (pid=%d)\r\n",
                       control_server_pid);
                   exit(0);
           case SSHMUX_COMMAND_TERMINATE:
                   fprintf(stderr, "Exit request sent.\r\n");
                   exit(0);
           case SSHMUX_COMMAND_OPEN:
                   /* continue below */
                   break;
           default:
                   fatal("silly mux_command %d", mux_command);
           }
   
           /* SSHMUX_COMMAND_OPEN */
           buffer_put_cstring(&m, term);
         buffer_append(&command, "\0", 1);          buffer_append(&command, "\0", 1);
         buffer_put_cstring(&m, buffer_ptr(&command));          buffer_put_cstring(&m, buffer_ptr(&command));
   
Line 1307 
Line 1345 
                         }                          }
         }          }
   
         if (ssh_msg_send(sock, /* version */0, &m) == -1)          if (ssh_msg_send(sock, /* version */1, &m) == -1)
                 fatal("%s: msg_send", __func__);                  fatal("%s: msg_send", __func__);
   
         mm_send_fd(sock, STDIN_FILENO);          mm_send_fd(sock, STDIN_FILENO);
Line 1318 
Line 1356 
         buffer_clear(&m);          buffer_clear(&m);
         if (ssh_msg_recv(sock, &m) == -1)          if (ssh_msg_recv(sock, &m) == -1)
                 fatal("%s: msg_recv", __func__);                  fatal("%s: msg_recv", __func__);
         if (buffer_get_char(&m) != 0)          if (buffer_get_char(&m) != 1)
                 fatal("%s: master returned error", __func__);                  fatal("%s: wrong version", __func__);
         buffer_free(&m);          buffer_free(&m);
   
         signal(SIGHUP, control_client_sighandler);          signal(SIGHUP, control_client_sighandler);

Legend:
Removed from v.1.228  
changed lines
  Added in v.1.229