summaryrefslogtreecommitdiffstats
path: root/source/libsmb/clifile.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/libsmb/clifile.c')
-rw-r--r--source/libsmb/clifile.c63
1 files changed, 32 insertions, 31 deletions
diff --git a/source/libsmb/clifile.c b/source/libsmb/clifile.c
index 07b1ff6b6f5..cce36613b74 100644
--- a/source/libsmb/clifile.c
+++ b/source/libsmb/clifile.c
@@ -1,5 +1,6 @@
/*
- Unix SMB/CIFS implementation.
+ Unix SMB/Netbios implementation.
+ Version 3.0
client file operations
Copyright (C) Andrew Tridgell 1994-1998
Copyright (C) Jeremy Allison 2001-2002
@@ -41,11 +42,11 @@ static BOOL cli_link_internal(struct cli_state *cli, const char *fname_src, cons
SSVAL(param,0,hard_link ? SMB_SET_FILE_UNIX_HLINK : SMB_SET_FILE_UNIX_LINK);
p = &param[6];
- p += clistr_push(cli, p, fname_src, -1, STR_TERMINATE);
+ p += clistr_push(cli, p, fname_src, -1, STR_TERMINATE|STR_CONVERT);
param_len = PTR_DIFF(p, param);
p = data;
- p += clistr_push(cli, p, fname_dst, -1, STR_TERMINATE);
+ p += clistr_push(cli, p, fname_dst, -1, STR_TERMINATE|STR_CONVERT);
data_len = PTR_DIFF(p, data);
if (!cli_send_trans(cli, SMBtrans2,
@@ -76,7 +77,7 @@ static BOOL cli_link_internal(struct cli_state *cli, const char *fname_src, cons
uint32 unix_perms_to_wire(mode_t perms)
{
- unsigned int ret = 0;
+ uint32 ret = 0;
ret |= ((perms & S_IXOTH) ? UNIX_X_OTH : 0);
ret |= ((perms & S_IWOTH) ? UNIX_W_OTH : 0);
@@ -136,7 +137,7 @@ static BOOL cli_unix_chmod_chown_internal(struct cli_state *cli, const char *fna
SSVAL(param,0,SMB_SET_FILE_UNIX_BASIC);
p = &param[6];
- p += clistr_push(cli, p, fname, -1, STR_TERMINATE);
+ p += clistr_push(cli, p, fname, -1, STR_TERMINATE|STR_CONVERT);
param_len = PTR_DIFF(p, param);
SIVAL(data,40,uid);
@@ -207,9 +208,9 @@ BOOL cli_rename(struct cli_state *cli, const char *fname_src, const char *fname_
p = smb_buf(cli->outbuf);
*p++ = 4;
- p += clistr_push(cli, p, fname_src, -1, STR_TERMINATE);
+ p += clistr_push(cli, p, fname_src, -1, STR_TERMINATE|STR_CONVERT);
*p++ = 4;
- p += clistr_push(cli, p, fname_dst, -1, STR_TERMINATE);
+ p += clistr_push(cli, p, fname_dst, -1, STR_TERMINATE|STR_CONVERT);
cli_setup_bcc(cli, p);
@@ -244,7 +245,7 @@ BOOL cli_unlink(struct cli_state *cli, const char *fname)
p = smb_buf(cli->outbuf);
*p++ = 4;
- p += clistr_push(cli, p, fname, -1, STR_TERMINATE);
+ p += clistr_push(cli, p, fname, -1, STR_TERMINATE|STR_CONVERT);
cli_setup_bcc(cli, p);
cli_send_smb(cli);
@@ -278,7 +279,7 @@ BOOL cli_mkdir(struct cli_state *cli, const char *dname)
p = smb_buf(cli->outbuf);
*p++ = 4;
- p += clistr_push(cli, p, dname, -1, STR_TERMINATE);
+ p += clistr_push(cli, p, dname, -1, STR_TERMINATE|STR_CONVERT);
cli_setup_bcc(cli, p);
@@ -313,7 +314,7 @@ BOOL cli_rmdir(struct cli_state *cli, const char *dname)
p = smb_buf(cli->outbuf);
*p++ = 4;
- p += clistr_push(cli, p, dname, -1, STR_TERMINATE);
+ p += clistr_push(cli, p, dname, -1, STR_TERMINATE|STR_CONVERT);
cli_setup_bcc(cli, p);
@@ -349,19 +350,19 @@ int cli_nt_delete_on_close(struct cli_state *cli, int fnum, BOOL flag)
data = flag ? 1 : 0;
if (!cli_send_trans(cli, SMBtrans2,
- NULL, /* name */
- -1, 0, /* fid, flags */
- &setup, 1, 0, /* setup, length, max */
- param, param_len, 2, /* param, length, max */
- (char *)&data, data_len, cli->max_xmit /* data, length, max */
- )) {
- return False;
+ NULL, /* name */
+ -1, 0, /* fid, flags */
+ &setup, 1, 0, /* setup, length, max */
+ param, param_len, 2, /* param, length, max */
+ (char *)&data, data_len, cli->max_xmit /* data, length, max */
+ )) {
+ return False;
}
if (!cli_receive_trans(cli, SMBtrans2,
- &rparam, &param_len,
- &rdata, &data_len)) {
- return False;
+ &rparam, &param_len,
+ &rdata, &data_len)) {
+ return False;
}
SAFE_FREE(rdata);
@@ -411,7 +412,7 @@ int cli_nt_create_full(struct cli_state *cli, const char *fname, uint32 DesiredA
p += len;
SSVAL(cli->outbuf,smb_ntcreate_NameLength, len);
/* sigh. this copes with broken netapp filer behaviour */
- p += clistr_push(cli, p, "", -1, STR_TERMINATE);
+ p += clistr_push(cli, p, "", -1, STR_TERMINATE|STR_CONVERT);
cli_setup_bcc(cli, p);
@@ -500,7 +501,7 @@ int cli_open(struct cli_state *cli, const char *fname, int flags, int share_mode
}
p = smb_buf(cli->outbuf);
- p += clistr_push(cli, p, fname, -1, STR_TERMINATE);
+ p += clistr_push(cli, p, fname, -1, STR_TERMINATE|STR_CONVERT);
cli_setup_bcc(cli, p);
@@ -542,12 +543,11 @@ BOOL cli_close(struct cli_state *cli, int fnum)
return !cli_is_error(cli);
}
-
/****************************************************************************
- send a lock with a specified locktype
+ send a lock with a specified locktype
this is used for testing LOCKING_ANDX_CANCEL_LOCK
****************************************************************************/
-NTSTATUS cli_locktype(struct cli_state *cli, int fnum,
+NTSTATUS cli_locktype(struct cli_state *cli, int fnum,
uint32 offset, uint32 len, int timeout, unsigned char locktype)
{
char *p;
@@ -594,7 +594,6 @@ NTSTATUS cli_locktype(struct cli_state *cli, int fnum,
return cli_nt_error(cli);
}
-
/****************************************************************************
Lock a file.
****************************************************************************/
@@ -632,6 +631,7 @@ BOOL cli_lock(struct cli_state *cli, int fnum,
cli_send_smb(cli);
+ cli->timeout = (timeout == -1) ? 0x7FFFFFFF : (timeout + 2*1000);
if (timeout != 0) {
cli->timeout = (timeout == -1) ? 0x7FFFFFFF : (timeout + 2*1000);
}
@@ -735,6 +735,8 @@ BOOL cli_lock64(struct cli_state *cli, int fnum,
cli_setup_bcc(cli, p);
cli_send_smb(cli);
+ cli->timeout = (timeout == -1) ? 0x7FFFFFFF : (timeout + 2*1000);
+
if (timeout != 0) {
cli->timeout = (timeout == -1) ? 0x7FFFFFFF : (timeout + 5*1000);
}
@@ -799,7 +801,6 @@ BOOL cli_unlock64(struct cli_state *cli, int fnum, SMB_BIG_UINT offset, SMB_BIG_
return True;
}
-
/****************************************************************************
Do a SMBgetattrE call.
****************************************************************************/
@@ -871,7 +872,7 @@ BOOL cli_getatr(struct cli_state *cli, const char *fname,
p = smb_buf(cli->outbuf);
*p++ = 4;
- p += clistr_push(cli, p, fname, -1, STR_TERMINATE);
+ p += clistr_push(cli, p, fname, -1, STR_TERMINATE|STR_CONVERT);
cli_setup_bcc(cli, p);
@@ -922,7 +923,7 @@ BOOL cli_setatr(struct cli_state *cli, const char *fname, uint16 attr, time_t t)
p = smb_buf(cli->outbuf);
*p++ = 4;
- p += clistr_push(cli, p, fname, -1, STR_TERMINATE);
+ p += clistr_push(cli, p, fname, -1, STR_TERMINATE|STR_CONVERT);
*p++ = 4;
cli_setup_bcc(cli, p);
@@ -959,7 +960,7 @@ BOOL cli_chkpath(struct cli_state *cli, const char *path)
cli_setup_packet(cli);
p = smb_buf(cli->outbuf);
*p++ = 4;
- p += clistr_push(cli, p, path2, -1, STR_TERMINATE);
+ p += clistr_push(cli, p, path2, -1, STR_TERMINATE|STR_CONVERT);
cli_setup_bcc(cli, p);
@@ -1020,7 +1021,7 @@ int cli_ctemp(struct cli_state *cli, const char *path, char **tmp_path)
p = smb_buf(cli->outbuf);
*p++ = 4;
- p += clistr_push(cli, p, path, -1, STR_TERMINATE);
+ p += clistr_push(cli, p, path, -1, STR_TERMINATE|STR_CONVERT);
cli_setup_bcc(cli, p);