From 7ed3868780f72e00687cbd056109ef85ea2ea092 Mon Sep 17 00:00:00 2001 From: Derrell Lipman Date: Sun, 29 Jan 2006 04:57:42 +0000 Subject: r13216: r12422@cabra: derrell | 2006-01-28 23:57:35 -0500 Fix cli_setpathinfo() to actually do what it's supposed to. Also, get rid of some apparently drug-induced code to deal with create time which isn't being manipulated anyway. (This used to be commit aa25dc1248b15e8e1b39cf8a98496e5aba475c4a) --- source3/libsmb/clirap.c | 34 +++++++++++++++++----------------- source3/libsmb/libsmbclient.c | 33 --------------------------------- 2 files changed, 17 insertions(+), 50 deletions(-) (limited to 'source3') diff --git a/source3/libsmb/clirap.c b/source3/libsmb/clirap.c index 6716971fe2..58fa9c8dff 100644 --- a/source3/libsmb/clirap.c +++ b/source3/libsmb/clirap.c @@ -471,7 +471,6 @@ BOOL cli_setpathinfo(struct cli_state *cli, const char *fname, char *rparam=NULL, *rdata=NULL; int count=8; BOOL ret; - void (*date_fn)(struct cli_state *, char *buf,int offset,time_t unixdate); char *p; memset(param, 0, sizeof(param)); @@ -480,7 +479,7 @@ BOOL cli_setpathinfo(struct cli_state *cli, const char *fname, p = param; /* Add the information level */ - SSVAL(p, 0, SMB_INFO_STANDARD); + SSVAL(p, 0, SMB_FILE_BASIC_INFORMATION); /* Skip reserved */ p += 6; @@ -492,26 +491,27 @@ BOOL cli_setpathinfo(struct cli_state *cli, const char *fname, p = data; - if (cli->win95) { - date_fn = cli_put_dos_date; - } else { - date_fn = cli_put_dos_date2; - } - - /* Add the create, last access, and modification times */ - (*date_fn)(cli, p, 0, c_time); - (*date_fn)(cli, p, 4, a_time); - (*date_fn)(cli, p, 8, m_time); - p += 12; + /* + * Add the create, last access, modification, and status change times + */ + + /* Don't set create time, at offset 0 */ + p += 8; - /* Skip DataSize and AllocationSize */ + put_long_date(p, a_time); + p += 8; + + put_long_date(p, m_time); + p += 8; + + put_long_date(p, c_time); p += 8; /* Add attributes */ - SSVAL(p, 0, mode); - p += 2; + SIVAL(p, 0, mode); + p += 4; - /* Add EA size (none) */ + /* Add padding */ SIVAL(p, 0, 0); p += 4; diff --git a/source3/libsmb/libsmbclient.c b/source3/libsmb/libsmbclient.c index e992cbbfc4..44cb43c285 100644 --- a/source3/libsmb/libsmbclient.c +++ b/source3/libsmb/libsmbclient.c @@ -1522,39 +1522,6 @@ smbc_setatr(SMBCCTX * context, SMBCSRV *srv, char *path, int fd; int ret; - /* - * Get the create time of the file (if not provided); we'll need it in - * the set call. - */ - if (! srv->no_pathinfo && c_time == 0) { - if (! cli_qpathinfo(&srv->cli, path, - &c_time, NULL, NULL, NULL, NULL)) { - /* qpathinfo not available */ - srv->no_pathinfo = True; - } else { - /* - * We got a creation time. Some OS versions don't - * return a valid create time, though. If we got an - * invalid time, start with the current time instead. - */ - if (c_time == 0 || c_time == (time_t) -1) { - c_time = time(NULL); - } - - /* - * We got a creation time. For sanity sake, since - * there is no POSIX function to set the create time - * of a file, if the existing create time is greater - * than either of access time or modification time, - * set create time to the smallest of those. This - * ensure that the create time of a file is never - * greater than its last access or modification time. - */ - if (c_time > a_time) c_time = a_time; - if (c_time > m_time) c_time = m_time; - } - } - /* * First, try setpathinfo (if qpathinfo succeeded), for it is the * modern function for "new code" to be using, and it works given a -- cgit