summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDerrell Lipman <derrell@samba.org>2006-01-29 04:57:42 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 11:06:18 -0500
commit7ed3868780f72e00687cbd056109ef85ea2ea092 (patch)
treea5daab65939d36dd72a18f53ceb52b9d73779c0f
parentc9811b857a7d8407659180a7cc453cead589bb4f (diff)
downloadsamba-7ed3868780f72e00687cbd056109ef85ea2ea092.tar.gz
samba-7ed3868780f72e00687cbd056109ef85ea2ea092.tar.bz2
samba-7ed3868780f72e00687cbd056109ef85ea2ea092.zip
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)
-rw-r--r--source3/libsmb/clirap.c34
-rw-r--r--source3/libsmb/libsmbclient.c33
2 files changed, 17 insertions, 50 deletions
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
@@ -1523,39 +1523,6 @@ smbc_setatr(SMBCCTX * context, SMBCSRV *srv, char *path,
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
* filename rather than requiring that the file be opened to have its