Ticket #1722: ftpd_spaces.diff

File ftpd_spaces.diff, 3.2 KB (added by Sebastien Bourdeauducq, on Dec 2, 2010 at 8:06:35 PM)

Fix

  • cpukit/ftpd/ftpd.c

    diff --git a/cpukit/ftpd/ftpd.c b/cpukit/ftpd/ftpd.c
    index 5289e65..5135f27 100644
    a b  
    1515 *
    1616 *  Changes:
    1717 *
     18 *    2010-12-02        Sebastien Bourdeauducq <sebastien@milkymist.org>
     19 *
     20 *      * Support spaces in filenames
     21 *
    1822 *    2001-01-31        Sergei Organov <osv@javad.ru>
    1923 *
    2024 *      * Hacks with current dir and root dir removed in favor of new libio
    exec_command(FTPD_SessionInfo_t *info, char* cmd, char* args) 
    16801684  }
    16811685  else if (!strcmp("RETR", cmd))
    16821686  {
    1683     sscanf(args, "%254s", fname);
     1687    strncpy(fname, args, 254);
    16841688    command_retrieve(info, fname);
    16851689  }
    16861690  else if (!strcmp("STOR", cmd))
    16871691  {
    1688     sscanf(args, "%254s", fname);
     1692    strncpy(fname, args, 254);
    16891693    command_store(info, fname);
    16901694  }
    16911695  else if (!strcmp("LIST", cmd))
    16921696  {
    1693     sscanf(args, "%254s", fname);
     1697    strncpy(fname, args, 254);
    16941698    command_list(info, fname, 1);
    16951699  }
    16961700  else if (!strcmp("NLST", cmd))
    16971701  {
    1698     sscanf(args, "%254s", fname);
     1702    strncpy(fname, args, 254);
    16991703    command_list(info, fname, 0);
    17001704  }
    17011705  else if (!strcmp("MDTM", cmd))
    17021706  {
    1703     sscanf(args, "%254s", fname);
     1707    strncpy(fname, args, 254);
    17041708    command_mdtm(info, fname);
    17051709  }
    17061710  else if (!strcmp("SYST", cmd))
    exec_command(FTPD_SessionInfo_t *info, char* cmd, char* args) 
    17361740      send_reply(info, 550, "Access denied.");
    17371741    }
    17381742    else if (
    1739       1 == sscanf(args, "%254s", fname) &&
     1743      strncpy(fname, args, 254) &&
    17401744      unlink(fname) == 0)
    17411745    {
    17421746      send_reply(info, 257, "DELE successful.");
    exec_command(FTPD_SessionInfo_t *info, char* cmd, char* args) 
    17581762      {
    17591763        send_reply(info, 550, "Access denied.");
    17601764      }
    1761       else if(
    1762         2 == sscanf(args, "%o %254s", &mask, fname) &&
    1763         chmod(fname, (mode_t)mask) == 0)
    1764       {
    1765         send_reply(info, 257, "CHMOD successful.");
    1766       }
    1767       else
    1768       {
    1769         send_reply(info, 550, "CHMOD failed.");
     1765      else {
     1766        char *c;
     1767        c = strchr(args, ' ');
     1768        if((c != NULL) && (sscanf(args, "%o", &mask) == 1) && strncpy(fname, c+1, 254)
     1769          && (chmod(fname, (mode_t)mask) == 0))
     1770          send_reply(info, 257, "CHMOD successful.");
     1771        else
     1772          send_reply(info, 550, "CHMOD failed.");
    17701773      }
    17711774    }
    17721775    else
    exec_command(FTPD_SessionInfo_t *info, char* cmd, char* args) 
    17791782      send_reply(info, 550, "Access denied.");
    17801783    }
    17811784    else if (
    1782       1 == sscanf(args, "%254s", fname) &&
     1785      strncpy(fname, args, 254) &&
    17831786      rmdir(fname) == 0)
    17841787    {
    17851788      send_reply(info, 257, "RMD successful.");
    exec_command(FTPD_SessionInfo_t *info, char* cmd, char* args) 
    17961799      send_reply(info, 550, "Access denied.");
    17971800    }
    17981801    else if (
    1799       1 == sscanf(args, "%254s", fname) &&
     1802      strncpy(fname, args, 254) &&
    18001803      mkdir(fname, S_IRWXU | S_IRWXG | S_IRWXO) == 0)
    18011804    {
    18021805      send_reply(info, 257, "MKD successful.");
    exec_command(FTPD_SessionInfo_t *info, char* cmd, char* args) 
    18081811  }
    18091812  else if (!strcmp("CWD", cmd))
    18101813  {
    1811     sscanf(args, "%254s", fname);
     1814    strncpy(fname, args, 254);
    18121815    command_cwd(info, fname);
    18131816  }
    18141817  else if (!strcmp("CDUP", cmd))