summaryrefslogtreecommitdiff
path: root/source3/libsmb/clirap.c
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2004-02-20 22:45:53 +0000
committerJeremy Allison <jra@samba.org>2004-02-20 22:45:53 +0000
commit7d7849b18a625820b1fba05bd17a718c7f98837e (patch)
treee59b3dc0457048c8200f16f3814a11b41f4fd7db /source3/libsmb/clirap.c
parent926419434086b8063358df7a2fe9e863fddf337f (diff)
downloadsamba-7d7849b18a625820b1fba05bd17a718c7f98837e.tar.gz
samba-7d7849b18a625820b1fba05bd17a718c7f98837e.tar.bz2
samba-7d7849b18a625820b1fba05bd17a718c7f98837e.zip
Make us bug-for-bug compatible with W2K3 - to get delete on close semantics
on an initial open the desired_access field *must* contain DELETE_ACCESS, simply having it map from a GENERIC_ALL won't do. Fixes delete on close test. Jeremy. (This used to be commit 5c6f8b1053fd1f170fbb76640649653f8aa80f18)
Diffstat (limited to 'source3/libsmb/clirap.c')
-rw-r--r--source3/libsmb/clirap.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/source3/libsmb/clirap.c b/source3/libsmb/clirap.c
index 36bc403e0b..c4b08d21d8 100644
--- a/source3/libsmb/clirap.c
+++ b/source3/libsmb/clirap.c
@@ -631,7 +631,7 @@ BOOL cli_qfileinfo(struct cli_state *cli, int fnum,
/****************************************************************************
send a qfileinfo call
****************************************************************************/
-BOOL cli_qfileinfo_test(struct cli_state *cli, int fnum, int level, char *outdata)
+BOOL cli_qfileinfo_test(struct cli_state *cli, int fnum, int level, char **poutdata, uint32 *poutlen)
{
unsigned int data_len = 0;
unsigned int param_len = 0;
@@ -639,9 +639,13 @@ BOOL cli_qfileinfo_test(struct cli_state *cli, int fnum, int level, char *outdat
pstring param;
char *rparam=NULL, *rdata=NULL;
+ *poutdata = NULL;
+ *poutlen = 0;
+
/* if its a win95 server then fail this - win95 totally screws it
up */
- if (cli->win95) return False;
+ if (cli->win95)
+ return False;
param_len = 4;
@@ -665,7 +669,8 @@ BOOL cli_qfileinfo_test(struct cli_state *cli, int fnum, int level, char *outdat
return False;
}
- memcpy(outdata, rdata, data_len);
+ memdup(poutdata, data_len);
+ *poutlen = data_len;
SAFE_FREE(rdata);
SAFE_FREE(rparam);