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

Diff for /src/usr.bin/ssh/scp.c between version 1.175 and 1.176

version 1.175, 2013/06/04 19:12:23 version 1.176, 2013/06/17 04:48:42
Line 529 
Line 529 
         return 0;          return 0;
 }  }
   
   static int
   do_times(int fd, int verb, const struct stat *sb)
   {
           /* strlen(2^64) == 20; strlen(10^6) == 7 */
           char buf[(20 + 7 + 2) * 2 + 2];
   
           (void)snprintf(buf, sizeof(buf), "T%llu 0 %llu 0\n",
               (unsigned long long) (sb->st_mtime < 0 ? 0 : sb->st_mtime),
               (unsigned long long) (sb->st_atime < 0 ? 0 : sb->st_atime));
           if (verb) {
                   fprintf(stderr, "File mtime %lld atime %lld\n",
                       (long long)sb->st_mtime, (long long)sb->st_atime);
                   fprintf(stderr, "Sending file timestamps: %s", buf);
           }
           (void) atomicio(vwrite, fd, buf, strlen(buf));
           return (response());
   }
   
 void  void
 toremote(char *targ, int argc, char **argv)  toremote(char *targ, int argc, char **argv)
 {  {
Line 753 
Line 771 
                         ++last;                          ++last;
                 curfile = last;                  curfile = last;
                 if (pflag) {                  if (pflag) {
                         /*                          if (do_times(remout, verbose_mode, &stb) < 0)
                          * Make it compatible with possible future  
                          * versions expecting microseconds.  
                          */  
                         (void) snprintf(buf, sizeof buf, "T%lu 0 %lu 0\n",  
                             (u_long) (stb.st_mtime < 0 ? 0 : stb.st_mtime),  
                             (u_long) (stb.st_atime < 0 ? 0 : stb.st_atime));  
                         if (verbose_mode) {  
                                 fprintf(stderr, "File mtime %ld atime %ld\n",  
                                     (long)stb.st_mtime, (long)stb.st_atime);  
                                 fprintf(stderr, "Sending file timestamps: %s",  
                                     buf);  
                         }  
                         (void) atomicio(vwrite, remout, buf, strlen(buf));  
                         if (response() < 0)  
                                 goto next;                                  goto next;
                 }                  }
 #define FILEMODEMASK    (S_ISUID|S_ISGID|S_IRWXU|S_IRWXG|S_IRWXO)  #define FILEMODEMASK    (S_ISUID|S_ISGID|S_IRWXU|S_IRWXG|S_IRWXO)
Line 841 
Line 845 
         else          else
                 last++;                  last++;
         if (pflag) {          if (pflag) {
                 (void) snprintf(path, sizeof(path), "T%lu 0 %lu 0\n",                  if (do_times(remout, verbose_mode, statp) < 0) {
                     (u_long) statp->st_mtime,  
                     (u_long) statp->st_atime);  
                 (void) atomicio(vwrite, remout, path, strlen(path));  
                 if (response() < 0) {  
                         closedir(dirp);                          closedir(dirp);
                         return;                          return;
                 }                  }
Line 891 
Line 891 
         int amt, exists, first, ofd;          int amt, exists, first, ofd;
         mode_t mode, omode, mask;          mode_t mode, omode, mask;
         off_t size, statbytes;          off_t size, statbytes;
           unsigned long long ull;
         int setimes, targisdir, wrerrno = 0;          int setimes, targisdir, wrerrno = 0;
         char ch, *cp, *np, *targ, *why, *vect[1], buf[2048];          char ch, *cp, *np, *targ, *why, *vect[1], buf[2048];
         struct timeval tv[2];          struct timeval tv[2];
Line 949 
Line 950 
                 if (*cp == 'T') {                  if (*cp == 'T') {
                         setimes++;                          setimes++;
                         cp++;                          cp++;
                         mtime.tv_sec = strtol(cp, &cp, 10);                          if (!isdigit((unsigned char)*cp))
                                   SCREWUP("mtime.sec not present");
                           ull = strtoull(cp, &cp, 10);
                         if (!cp || *cp++ != ' ')                          if (!cp || *cp++ != ' ')
                                 SCREWUP("mtime.sec not delimited");                                  SCREWUP("mtime.sec not delimited");
                           if ((time_t)ull < 0 || (time_t)ull != ull)
                                   setimes = 0;    /* out of range */
                           mtime.tv_sec = ull;
                         mtime.tv_usec = strtol(cp, &cp, 10);                          mtime.tv_usec = strtol(cp, &cp, 10);
                         if (!cp || *cp++ != ' ')                          if (!cp || *cp++ != ' ' || mtime.tv_usec < 0 ||
                               mtime.tv_usec > 999999)
                                 SCREWUP("mtime.usec not delimited");                                  SCREWUP("mtime.usec not delimited");
                         atime.tv_sec = strtol(cp, &cp, 10);                          if (!isdigit((unsigned char)*cp))
                                   SCREWUP("atime.sec not present");
                           ull = strtoull(cp, &cp, 10);
                         if (!cp || *cp++ != ' ')                          if (!cp || *cp++ != ' ')
                                 SCREWUP("atime.sec not delimited");                                  SCREWUP("atime.sec not delimited");
                           if ((time_t)ull < 0 || (time_t)ull != ull)
                                   setimes = 0;    /* out of range */
                           atime.tv_sec = ull;
                         atime.tv_usec = strtol(cp, &cp, 10);                          atime.tv_usec = strtol(cp, &cp, 10);
                         if (!cp || *cp++ != '\0')                          if (!cp || *cp++ != '\0' || atime.tv_usec < 0 ||
                               atime.tv_usec > 999999)
                                 SCREWUP("atime.usec not delimited");                                  SCREWUP("atime.usec not delimited");
                         (void) atomicio(vwrite, remout, "", 1);                          (void) atomicio(vwrite, remout, "", 1);
                         continue;                          continue;

Legend:
Removed from v.1.175  
changed lines
  Added in v.1.176