version 1.5, 2001/12/02 02:08:32 |
version 1.5.2.2, 2002/10/11 14:51:52 |
|
|
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) |
|
|
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); |
|
|
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); |
} |
} |