Diff for /ansh/src/daemon3.c between versions 1.1.1.1.2.7 and 1.3

version 1.1.1.1.2.7, 2011/10/14 12:03:10 version 1.3, 2012/01/23 10:34:13
Line 83  void * Line 83  void *
 icmpRx(sched_task_t *task)  icmpRx(sched_task_t *task)
 {  {
         u_char *buf, *str;          u_char *buf, *str;
        struct sockaddr sa;        io_sockaddr_t sa;
         int rlen, n = 0, salen = sizeof sa;          int rlen, n = 0, salen = sizeof sa;
         struct tagProc *proc = NULL;          struct tagProc *proc = NULL;
         char ret;          char ret;
Line 175  fdTx(sched_task_t *task) Line 175  fdTx(sched_task_t *task)
         if (proc->proc_flg != ANSH_FLG_CPOUT || !proc->proc_pid)          if (proc->proc_flg != ANSH_FLG_CPOUT || !proc->proc_pid)
                 return NULL;                  return NULL;
   
         /*  
         if (waitpid(proc->proc_pid, &wlen, WNOHANG)) {  
                 ioFreePTY(TASK_FD(task), proc->proc_ttyname);  
                 schedCancelby(TASK_ROOT(task), NULL, CRITERIA_FD, (void*) TASK_FD(task), NULL);  
   
                 proc->proc_pid = 0;  
                 proc->proc_seq = 0;  
                 proc->proc_flg = ANSH_FLG_EOF;  
                 proc->proc_rlen_[FD2NET] = 0;  
   
                 schedWrite(TASK_ROOT(task), icmpTx, proc, proc->proc_sock);  
                 return NULL;  
         }  
         */  
   
         /* if Timeout defined, disarm timer */          /* if Timeout defined, disarm timer */
         if (Timeout)          if (Timeout)
                 schedCancelby(TASK_ROOT(task), &TASK_ROOT(task)->root_timer, CRITERIA_CALL, TOfunc, NULL);                  schedCancelby(TASK_ROOT(task), &TASK_ROOT(task)->root_timer, CRITERIA_CALL, TOfunc, NULL);
Line 199  fdTx(sched_task_t *task) Line 184  fdTx(sched_task_t *task)
                 case -1:                  case -1:
                         ERR("write2tty #%d - %s", errno, strerror(errno));                          ERR("write2tty #%d - %s", errno, strerror(errno));
                         /* exit from shell and release tty */                          /* exit from shell and release tty */
                         /*  
                         waitpid(proc->proc_pid, &wlen, 0);  
                         ioFreePTY(TASK_FD(task), proc->proc_ttyname);  
                         schedCancelby(TASK_ROOT(task), NULL, CRITERIA_FD, (void*) TASK_FD(task), NULL);  
   
                         proc->proc_pid = 0;  
                         proc->proc_seq = 0;  
                         proc->proc_flg = ANSH_FLG_EOF;  
                         proc->proc_rlen_[FD2NET] = 0;  
   
                         schedWrite(TASK_ROOT(task), icmpTx, proc, proc->proc_sock);  
                         */  
                         return NULL;                          return NULL;
                 default:                  default:
                         proc->proc_flg = ANSH_FLG_OK;                          proc->proc_flg = ANSH_FLG_OK;
Line 241  fdRx(sched_task_t *task) Line 214  fdRx(sched_task_t *task)
         if (!proc->proc_pid)          if (!proc->proc_pid)
                 return NULL;                  return NULL;
   
         /*  
         if (waitpid(proc->proc_pid, &rlen, WNOHANG)) {  
                 ioFreePTY(TASK_FD(task), proc->proc_ttyname);  
                 schedCancelby(TASK_ROOT(task), NULL, CRITERIA_FD, (void*) TASK_FD(task), NULL);  
   
                 proc->proc_pid = 0;  
                 proc->proc_seq = 0;  
                 proc->proc_flg = ANSH_FLG_EOF;  
                 proc->proc_rlen_[FD2NET] = 0;  
   
                 schedWrite(TASK_ROOT(task), icmpTx, proc, proc->proc_sock);  
                 return NULL;  
         }  
         */  
   
         /* if Timeout defined, disarm timer */          /* if Timeout defined, disarm timer */
         if (Timeout)          if (Timeout)
                 schedCancelby(TASK_ROOT(task), &TASK_ROOT(task)->root_timer, CRITERIA_CALL, TOfunc, NULL);                  schedCancelby(TASK_ROOT(task), &TASK_ROOT(task)->root_timer, CRITERIA_CALL, TOfunc, NULL);
Line 268  fdRx(sched_task_t *task) Line 226  fdRx(sched_task_t *task)
                         ERR("readtty #%d - %s", errno, strerror(errno));                          ERR("readtty #%d - %s", errno, strerror(errno));
                 case 0:                  case 0:
                         /* exit from shell and release tty */                          /* exit from shell and release tty */
                         /*  
                         waitpid(proc->proc_pid, &rlen, 0);  
                         ioFreePTY(TASK_FD(task), proc->proc_ttyname);  
                         schedCancelby(TASK_ROOT(task), NULL, CRITERIA_FD, (void*) TASK_FD(task), NULL);  
                         VERB(3) LOG("EOF process status %d", rlen);  
   
                         proc->proc_pid = 0;  
                         proc->proc_seq = 0;  
                         proc->proc_flg = ANSH_FLG_EOF;  
                         proc->proc_rlen_[FD2NET] = 0;  
   
                         schedWrite(TASK_ROOT(task), icmpTx, proc, proc->proc_sock);  
                         */  
                         return NULL;                          return NULL;
                 default:                  default:
                         proc->proc_flg = ANSH_FLG_OK;                          proc->proc_flg = ANSH_FLG_OK;
Line 305  spawnLogin(sched_task_t *task, struct tagProc *proc) Line 250  spawnLogin(sched_task_t *task, struct tagProc *proc)
         int flg;          int flg;
         struct timeval tv = { 0 };          struct timeval tv = { 0 };
         char str[STRSIZ] = { 0 };          char str[STRSIZ] = { 0 };
         struct sockaddr_in *sin;  
         struct sockaddr_in6 *sin6;  
   
         FTRACE(3);          FTRACE(3);
   
Line 321  spawnLogin(sched_task_t *task, struct tagProc *proc) Line 264  spawnLogin(sched_task_t *task, struct tagProc *proc)
                         printf("ansh3d ELWIX remote management system over ICMP (%s)\n\n",                           printf("ansh3d ELWIX remote management system over ICMP (%s)\n\n", 
                                         proc->proc_ttyname);                                          proc->proc_ttyname);
                         strlcpy(str, "-hansh3@", sizeof str);                          strlcpy(str, "-hansh3@", sizeof str);
                        if (proc->proc_cli.sa_family == AF_INET) {                        if (proc->proc_cli.sa.sa_family == AF_INET)
                                sin = (struct sockaddr_in*) &proc->proc_cli;                                inet_ntop(AF_INET, &proc->proc_cli.sin.sin_addr, str + 8, INET_ADDRSTRLEN);
                                inet_ntop(AF_INET, &sin->sin_addr, str + 8, INET_ADDRSTRLEN);                        else if (proc->proc_cli.sa.sa_family == AF_INET6)
                        } else if (proc->proc_cli.sa_family == AF_INET6) {                                inet_ntop(AF_INET6, &proc->proc_cli.sin6.sin6_addr, str + 8, INET6_ADDRSTRLEN);
                                sin6 = (struct sockaddr_in6*) &proc->proc_cli; 
                                inet_ntop(AF_INET6, &sin6->sin6_addr, str + 8, INET6_ADDRSTRLEN); 
                        } 
                         execl("/usr/bin/login", "login", str, NULL);                          execl("/usr/bin/login", "login", str, NULL);
                         /* never reached */                          /* never reached */
                         return -1;                          return -1;

Removed from v.1.1.1.1.2.7  
changed lines
  Added in v.1.3


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>