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

Diff for /src/usr.bin/ssh/sftp-common.c between version 1.4 and 1.4.2.3

version 1.4, 2001/07/14 15:10:17 version 1.4.2.3, 2002/10/11 14:53:07
Line 65 
Line 65 
         a->mtime = st->st_mtime;          a->mtime = st->st_mtime;
 }  }
   
   /* Convert from filexfer attribs to struct stat */
   void
   attrib_to_stat(Attrib *a, struct stat *st)
   {
           memset(st, 0, sizeof(*st));
   
           if (a->flags & SSH2_FILEXFER_ATTR_SIZE)
                   st->st_size = a->size;
           if (a->flags & SSH2_FILEXFER_ATTR_UIDGID) {
                   st->st_uid = a->uid;
                   st->st_gid = a->gid;
           }
           if (a->flags & SSH2_FILEXFER_ATTR_PERMISSIONS)
                   st->st_mode = a->perm;
           if (a->flags & SSH2_FILEXFER_ATTR_ACMODTIME) {
                   st->st_atime = a->atime;
                   st->st_mtime = a->mtime;
           }
   }
   
 /* Decode attributes in buffer */  /* Decode attributes in buffer */
 Attrib *  Attrib *
 decode_attrib(Buffer *b)  decode_attrib(Buffer *b)
 {  {
         static Attrib a;          static Attrib a;
   
         attrib_clear(&a);          attrib_clear(&a);
         a.flags = buffer_get_int(b);          a.flags = buffer_get_int(b);
         if (a.flags & SSH2_FILEXFER_ATTR_SIZE)          if (a.flags & SSH2_FILEXFER_ATTR_SIZE)
Line 88 
Line 109 
         if (a.flags & SSH2_FILEXFER_ATTR_EXTENDED) {          if (a.flags & SSH2_FILEXFER_ATTR_EXTENDED) {
                 char *type, *data;                  char *type, *data;
                 int i, count;                  int i, count;
   
                 count = buffer_get_int(b);                  count = buffer_get_int(b);
                 for (i = 0; i < count; i++) {                  for (i = 0; i < count; i++) {
                         type = buffer_get_string(b, NULL);                          type = buffer_get_string(b, NULL);
Line 144 
Line 166 
                 return("Operation unsupported");                  return("Operation unsupported");
         default:          default:
                 return("Unknown status");                  return("Unknown status");
         };          }
         /* NOTREACHED */          /* NOTREACHED */
   }
   
   /*
    * drwxr-xr-x    5 markus   markus       1024 Jan 13 18:39 .ssh
    */
   char *
   ls_file(char *name, struct stat *st, int remote)
   {
           int ulen, glen, sz = 0;
           struct passwd *pw;
           struct group *gr;
           struct tm *ltime = localtime(&st->st_mtime);
           char *user, *group;
           char buf[1024], mode[11+1], tbuf[12+1], ubuf[11+1], gbuf[11+1];
   
           strmode(st->st_mode, mode);
           if (!remote && (pw = getpwuid(st->st_uid)) != NULL) {
                   user = pw->pw_name;
           } else {
                   snprintf(ubuf, sizeof ubuf, "%u", (u_int)st->st_uid);
                   user = ubuf;
           }
           if (!remote && (gr = getgrgid(st->st_gid)) != NULL) {
                   group = gr->gr_name;
           } else {
                   snprintf(gbuf, sizeof gbuf, "%u", (u_int)st->st_gid);
                   group = gbuf;
           }
           if (ltime != NULL) {
                   if (time(NULL) - st->st_mtime < (365*24*60*60)/2)
                           sz = strftime(tbuf, sizeof tbuf, "%b %e %H:%M", ltime);
                   else
                           sz = strftime(tbuf, sizeof tbuf, "%b %e  %Y", ltime);
           }
           if (sz == 0)
                   tbuf[0] = '\0';
           ulen = MAX(strlen(user), 8);
           glen = MAX(strlen(group), 8);
           snprintf(buf, sizeof buf, "%s %3d %-*s %-*s %8llu %s %s", mode,
               st->st_nlink, ulen, user, glen, group,
               (u_int64_t)st->st_size, tbuf, name);
           return xstrdup(buf);
 }  }

Legend:
Removed from v.1.4  
changed lines
  Added in v.1.4.2.3