[BACK]Return to ftpcmd.y CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / libexec / ftpd

Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.

Diff for /src/libexec/ftpd/ftpcmd.y between version 1.83 and 1.83.6.1

version 1.83, 2005/03/03 22:19:47 version 1.83.6.1, 2008/09/18 19:28:23
Line 1 
Line 1 
 /*      $NetBSD$        */  /*      $NetBSD$        */
   
 /*-  /*-
  * Copyright (c) 1997-2005 The NetBSD Foundation, Inc.   * Copyright (c) 1997-2008 The NetBSD Foundation, Inc.
  * All rights reserved.   * All rights reserved.
  *   *
  * This code is derived from software contributed to The NetBSD Foundation   * This code is derived from software contributed to The NetBSD Foundation
Line 1363  lookup(struct tab *p, const char *cmd)
Line 1363  lookup(struct tab *p, const char *cmd)
   
 /*  /*
  * getline - a hacked up version of fgets to ignore TELNET escape codes.   * getline - a hacked up version of fgets to ignore TELNET escape codes.
    *      `s' is the buffer to read into.
    *      `n' is the 1 less than the size of the buffer, to allow trailing NUL
    *      `iop' is the FILE to read from.
    *      Returns 0 on success, -1 on EOF, -2 if the command was too long.
  */   */
 char *  int
 getline(char *s, int n, FILE *iop)  getline(char *s, int n, FILE *iop)
 {  {
         int c;          int c;
Line 1379  getline(char *s, int n, FILE *iop)
Line 1383  getline(char *s, int n, FILE *iop)
                         if (debug)                          if (debug)
                                 syslog(LOG_DEBUG, "command: %s", s);                                  syslog(LOG_DEBUG, "command: %s", s);
                         tmpline[0] = '\0';                          tmpline[0] = '\0';
                         return(s);                          return(0);
                 }                  }
                 if (c == 0)                  if (c == 0)
                         tmpline[0] = '\0';                          tmpline[0] = '\0';
Line 1418  getline(char *s, int n, FILE *iop)
Line 1422  getline(char *s, int n, FILE *iop)
                     }                      }
                 }                  }
                 *cs++ = c;                  *cs++ = c;
                 if (--n <= 0 || c == '\n')                  if (--n <= 0) {
                           /*
                            * If command doesn't fit into buffer, discard the
                            * rest of the command and indicate truncation.
                            * This prevents the command to be split up into
                            * multiple commands.
                            */
                           if (debug)
                                   syslog(LOG_DEBUG,
                                       "command too long, last char: %d", c);
                           while (c != '\n' && (c = getc(iop)) != EOF)
                                   continue;
                           return (-2);
                   }
                   if (c == '\n')
                         break;                          break;
         }          }
         if (c == EOF && cs == s)          if (c == EOF && cs == s)
                 return (NULL);                  return (-1);
         *cs++ = '\0';          *cs++ = '\0';
         if (debug) {          if (debug) {
                 if ((curclass.type != CLASS_GUEST &&                  if ((curclass.type != CLASS_GUEST &&
Line 1444  getline(char *s, int n, FILE *iop)
Line 1462  getline(char *s, int n, FILE *iop)
                         syslog(LOG_DEBUG, "command: %.*s", len, s);                          syslog(LOG_DEBUG, "command: %.*s", len, s);
                 }                  }
         }          }
         return (s);          return (0);
 }  }
   
 void  void
Line 1458  ftp_handle_line(char *cp)
Line 1476  ftp_handle_line(char *cp)
 void  void
 ftp_loop(void)  ftp_loop(void)
 {  {
           int ret;
   
         while (1) {          while (1) {
                 (void) alarm(curclass.timeout);                  (void) alarm(curclass.timeout);
                 if (getline(cbuf, sizeof(cbuf)-1, stdin) == NULL) {                  ret = getline(cbuf, sizeof(cbuf)-1, stdin);
                   (void) alarm(0);
                   if (ret == -1) {
                         reply(221, "You could at least say goodbye.");                          reply(221, "You could at least say goodbye.");
                         dologout(0);                          dologout(0);
                   } else if (ret == -2) {
                           reply(500, "Command too long.");
                   } else {
                           ftp_handle_line(cbuf);
                 }                  }
                 (void) alarm(0);  
                 ftp_handle_line(cbuf);  
         }          }
         /*NOTREACHED*/          /*NOTREACHED*/
 }  }

Legend:
Removed from v.1.83  
changed lines
  Added in v.1.83.6.1

CVSweb <webmaster@jp.NetBSD.org>