summaryrefslogtreecommitdiff
path: root/source3/libsmb
diff options
context:
space:
mode:
Diffstat (limited to 'source3/libsmb')
-rw-r--r--source3/libsmb/clirap.c73
-rw-r--r--source3/libsmb/libsmb_file.c12
2 files changed, 14 insertions, 71 deletions
diff --git a/source3/libsmb/clirap.c b/source3/libsmb/clirap.c
index 80d93d32d8..0955d1e3bb 100644
--- a/source3/libsmb/clirap.c
+++ b/source3/libsmb/clirap.c
@@ -656,44 +656,16 @@ NTSTATUS cli_qpathinfo1(struct cli_state *cli,
Send a setpathinfo call.
****************************************************************************/
-bool cli_setpathinfo_basic(struct cli_state *cli, const char *fname,
- time_t create_time,
- time_t access_time,
- time_t write_time,
- time_t change_time,
- uint16 mode)
+NTSTATUS cli_setpathinfo_basic(struct cli_state *cli, const char *fname,
+ time_t create_time,
+ time_t access_time,
+ time_t write_time,
+ time_t change_time,
+ uint16 mode)
{
unsigned int data_len = 0;
- unsigned int param_len = 0;
- unsigned int rparam_len, rdata_len;
- uint16 setup = TRANSACT2_SETPATHINFO;
- char *param;
char data[40];
- char *rparam=NULL, *rdata=NULL;
- int count=8;
- bool ret;
char *p;
- size_t nlen = 2*(strlen(fname)+1);
-
- param = SMB_MALLOC_ARRAY(char, 6+nlen+2);
- if (!param) {
- return false;
- }
- memset(param, '\0', 6);
- memset(data, 0, sizeof(data));
-
- p = param;
-
- /* Add the information level */
- SSVAL(p, 0, SMB_FILE_BASIC_INFORMATION);
-
- /* Skip reserved */
- p += 6;
-
- /* Add the file name */
- p += clistr_push(cli, p, fname, nlen, STR_TERMINATE);
-
- param_len = PTR_DIFF(p, param);
p = data;
@@ -722,37 +694,8 @@ bool cli_setpathinfo_basic(struct cli_state *cli, const char *fname,
data_len = PTR_DIFF(p, data);
- do {
- ret = (cli_send_trans(cli, SMBtrans2,
- NULL, /* Name */
- -1, 0, /* fid, flags */
- &setup, 1, 0, /* setup, length, max */
- param, param_len, 10, /* param, length, max */
- data, data_len, cli->max_xmit /* data, length, max */
- ) &&
- cli_receive_trans(cli, SMBtrans2,
- &rparam, &rparam_len,
- &rdata, &rdata_len));
- if (!cli_is_dos_error(cli)) break;
- if (!ret) {
- /* we need to work around a Win95 bug - sometimes
- it gives ERRSRV/ERRerror temprarily */
- uint8 eclass;
- uint32 ecode;
- cli_dos_error(cli, &eclass, &ecode);
- if (eclass != ERRSRV || ecode != ERRerror) break;
- smb_msleep(100);
- }
- } while (count-- && ret==False);
-
- SAFE_FREE(param);
- if (!ret) {
- return False;
- }
-
- SAFE_FREE(rdata);
- SAFE_FREE(rparam);
- return True;
+ return cli_setpathinfo(cli, SMB_FILE_BASIC_INFORMATION, fname,
+ (uint8_t *)data, data_len);
}
/****************************************************************************
diff --git a/source3/libsmb/libsmb_file.c b/source3/libsmb/libsmb_file.c
index 6216c38bb1..58403dfbb3 100644
--- a/source3/libsmb/libsmb_file.c
+++ b/source3/libsmb/libsmb_file.c
@@ -603,12 +603,12 @@ SMBC_setatr(SMBCCTX * context, SMBCSRV *srv, char *path,
* attributes manipulated.
*/
if (srv->no_pathinfo ||
- ! cli_setpathinfo_basic(srv->cli, path,
- create_time,
- access_time,
- write_time,
- change_time,
- mode)) {
+ !NT_STATUS_IS_OK(cli_setpathinfo_basic(srv->cli, path,
+ create_time,
+ access_time,
+ write_time,
+ change_time,
+ mode))) {
/*
* setpathinfo is not supported; go to plan B.