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

Diff for /src/usr.bin/ssh/sftp-server.c between version 1.14 and 1.15

version 1.14, 2001/01/21 19:05:56 version 1.15, 2001/02/04 11:11:54
Line 31 
Line 31 
 #include "xmalloc.h"  #include "xmalloc.h"
   
 #include "sftp.h"  #include "sftp.h"
   #include "sftp-common.h"
   
 /* helper */  /* helper */
 #define get_int64()                     buffer_get_int64(&iqueue);  #define get_int64()                     buffer_get_int64(&iqueue);
Line 44 
Line 45 
   
 /* portable attibutes, etc. */  /* portable attibutes, etc. */
   
 typedef struct Attrib Attrib;  
 typedef struct Stat Stat;  typedef struct Stat Stat;
   
 struct Attrib  struct Stat {
 {  
         u_int32_t       flags;  
         u_int64_t       size;  
         u_int32_t       uid;  
         u_int32_t       gid;  
         u_int32_t       perm;  
         u_int32_t       atime;  
         u_int32_t       mtime;  
 };  
   
 struct Stat  
 {  
         char *name;          char *name;
         char *long_name;          char *long_name;
         Attrib attrib;          Attrib attrib;
Line 114 
Line 102 
         if (pflags & SSH2_FXF_EXCL)          if (pflags & SSH2_FXF_EXCL)
                 flags |= O_EXCL;                  flags |= O_EXCL;
         return flags;          return flags;
 }  
   
 void  
 attrib_clear(Attrib *a)  
 {  
         a->flags = 0;  
         a->size = 0;  
         a->uid = 0;  
         a->gid = 0;  
         a->perm = 0;  
         a->atime = 0;  
         a->mtime = 0;  
 }  
   
 Attrib *  
 decode_attrib(Buffer *b)  
 {  
         static Attrib a;  
         attrib_clear(&a);  
         a.flags = buffer_get_int(b);  
         if (a.flags & SSH2_FILEXFER_ATTR_SIZE) {  
                 a.size = buffer_get_int64(b);  
         }  
         if (a.flags & SSH2_FILEXFER_ATTR_UIDGID) {  
                 a.uid = buffer_get_int(b);  
                 a.gid = buffer_get_int(b);  
         }  
         if (a.flags & SSH2_FILEXFER_ATTR_PERMISSIONS) {  
                 a.perm = buffer_get_int(b);  
         }  
         if (a.flags & SSH2_FILEXFER_ATTR_ACMODTIME) {  
                 a.atime = buffer_get_int(b);  
                 a.mtime = buffer_get_int(b);  
         }  
         /* vendor-specific extensions */  
         if (a.flags & SSH2_FILEXFER_ATTR_EXTENDED) {  
                 char *type, *data;  
                 int i, count;  
                 count = buffer_get_int(b);  
                 for (i = 0; i < count; i++) {  
                         type = buffer_get_string(b, NULL);  
                         data = buffer_get_string(b, NULL);  
                         xfree(type);  
                         xfree(data);  
                 }  
         }  
         return &a;  
 }  
   
 void  
 encode_attrib(Buffer *b, Attrib *a)  
 {  
         buffer_put_int(b, a->flags);  
         if (a->flags & SSH2_FILEXFER_ATTR_SIZE) {  
                 buffer_put_int64(b, a->size);  
         }  
         if (a->flags & SSH2_FILEXFER_ATTR_UIDGID) {  
                 buffer_put_int(b, a->uid);  
                 buffer_put_int(b, a->gid);  
         }  
         if (a->flags & SSH2_FILEXFER_ATTR_PERMISSIONS) {  
                 buffer_put_int(b, a->perm);  
         }  
         if (a->flags & SSH2_FILEXFER_ATTR_ACMODTIME) {  
                 buffer_put_int(b, a->atime);  
                 buffer_put_int(b, a->mtime);  
         }  
 }  
   
 void  
 stat_to_attrib(struct stat *st, Attrib *a)  
 {  
         attrib_clear(a);  
         a->flags = 0;  
         a->flags |= SSH2_FILEXFER_ATTR_SIZE;  
         a->size = st->st_size;  
         a->flags |= SSH2_FILEXFER_ATTR_UIDGID;  
         a->uid = st->st_uid;  
         a->gid = st->st_gid;  
         a->flags |= SSH2_FILEXFER_ATTR_PERMISSIONS;  
         a->perm = st->st_mode;  
         a->flags |= SSH2_FILEXFER_ATTR_ACMODTIME;  
         a->atime = st->st_atime;  
         a->mtime = st->st_mtime;  
 }  }
   
 Attrib *  Attrib *

Legend:
Removed from v.1.14  
changed lines
  Added in v.1.15