From 0f1713068f597fddb88faf616eeb9382029c3d58 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sun, 3 Dec 2000 02:18:14 +0000 Subject: - added client support for nttrans calls - added a cli_ function for querying a security descriptor on a remote file (This used to be commit e21994ff9d512d1c9d6d360e930809b135df4cf7) --- source3/libsmb/clisecdesc.c | 82 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 source3/libsmb/clisecdesc.c (limited to 'source3/libsmb/clisecdesc.c') diff --git a/source3/libsmb/clisecdesc.c b/source3/libsmb/clisecdesc.c new file mode 100644 index 0000000000..7667938f02 --- /dev/null +++ b/source3/libsmb/clisecdesc.c @@ -0,0 +1,82 @@ +/* + Unix SMB/Netbios implementation. + Version 3.0 + client security descriptor functions + Copyright (C) Andrew Tridgell 2000 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#define NO_SYSLOG + +#include "includes.h" + + + +/**************************************************************************** + query the security descriptor for a open file + ****************************************************************************/ +SEC_DESC *cli_query_secdesc(struct cli_state *cli,int fd) +{ + char param[8]; + char *rparam=NULL, *rdata=NULL; + int rparam_count=0, rdata_count=0; + TALLOC_CTX *mem_ctx; + prs_struct pd; + SEC_DESC *psd = NULL; + SEC_DESC *ret; + + SIVAL(param, 0, fd); + SSVAL(param, 4, 7); + + if (!cli_send_nt_trans(cli, + NT_TRANSACT_QUERY_SECURITY_DESC, + 0, + NULL, 0, 0, + param, 8, 4, + NULL, 0, 0x10000)) { + DEBUG(1,("Failed to send NT_TRANSACT_QUERY_SECURITY_DESC\n")); + return NULL; + } + + + if (!cli_receive_nt_trans(cli, + &rparam, &rparam_count, + &rdata, &rdata_count)) { + DEBUG(1,("Failed to recv NT_TRANSACT_QUERY_SECURITY_DESC\n")); + return NULL; + } + + if ((mem_ctx = talloc_init()) == NULL) { + DEBUG(0,("talloc_init failed.\n")); + return NULL; + } + + prs_init(&pd, rdata_count, 4, mem_ctx, UNMARSHALL); + prs_append_data(&pd, rdata, rdata_count); + pd.data_offset = 0; + + if (!sec_io_desc("sd data", &psd, &pd, 1)) { + DEBUG(1,("Failed to parse secdesc\n")); + return NULL; + } + + ret = dup_sec_desc(psd); + talloc_destroy(mem_ctx); + return ret; +} + + + -- cgit From 4fee254d678033dffa6d0ed82e55ec59d65fcd03 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sun, 3 Dec 2000 07:36:15 +0000 Subject: getting/setting acls now works. The SIDs are still numeric, the next step is to support usernames etc (This used to be commit 6cea1647fcbc6f5a903c691273dcec44fcda1fc4) --- source3/libsmb/clisecdesc.c | 57 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 56 insertions(+), 1 deletion(-) (limited to 'source3/libsmb/clisecdesc.c') diff --git a/source3/libsmb/clisecdesc.c b/source3/libsmb/clisecdesc.c index 7667938f02..e6b57f6ad4 100644 --- a/source3/libsmb/clisecdesc.c +++ b/source3/libsmb/clisecdesc.c @@ -39,7 +39,7 @@ SEC_DESC *cli_query_secdesc(struct cli_state *cli,int fd) SEC_DESC *ret; SIVAL(param, 0, fd); - SSVAL(param, 4, 7); + SSVAL(param, 4, 0xf); if (!cli_send_nt_trans(cli, NT_TRANSACT_QUERY_SECURITY_DESC, @@ -70,6 +70,7 @@ SEC_DESC *cli_query_secdesc(struct cli_state *cli,int fd) if (!sec_io_desc("sd data", &psd, &pd, 1)) { DEBUG(1,("Failed to parse secdesc\n")); + talloc_destroy(mem_ctx); return NULL; } @@ -80,3 +81,57 @@ SEC_DESC *cli_query_secdesc(struct cli_state *cli,int fd) + +/**************************************************************************** + set the security descriptor for a open file + ****************************************************************************/ +BOOL cli_set_secdesc(struct cli_state *cli,int fd, SEC_DESC *sd) +{ + char param[8]; + char *rparam=NULL, *rdata=NULL; + int rparam_count=0, rdata_count=0; + TALLOC_CTX *mem_ctx; + prs_struct pd; + + if ((mem_ctx = talloc_init()) == NULL) { + DEBUG(0,("talloc_init failed.\n")); + return False; + } + + prs_init(&pd, 0, 4, mem_ctx, MARSHALL); + prs_give_memory(&pd, NULL, 0, True); + + if (!sec_io_desc("sd data", &sd, &pd, 1)) { + DEBUG(1,("Failed to marshall secdesc\n")); + return False; + } + + SIVAL(param, 0, fd); + SSVAL(param, 4, 0xf); + + if (!cli_send_nt_trans(cli, + NT_TRANSACT_SET_SECURITY_DESC, + 0, + NULL, 0, 0, + param, 8, 0, + pd.data_p, pd.data_offset, 0)) { + DEBUG(1,("Failed to send NT_TRANSACT_SET_SECURITY_DESC\n")); + return False; + } + + + if (!cli_receive_nt_trans(cli, + &rparam, &rparam_count, + &rdata, &rdata_count)) { + DEBUG(1,("Failed to recv NT_TRANSACT_SET_SECURITY_DESC\n")); + return False; + } + + if (rparam) free(rparam); + if (rdata) free(rdata); + + talloc_destroy(mem_ctx); + + return True; +} + -- cgit From 1fac52f9f01bcdad52029563ddb35e0a5a6cc613 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sun, 3 Dec 2000 11:04:45 +0000 Subject: changed an error message (This used to be commit f9f14a4293cecb738f733c6c845275619f7bec40) --- source3/libsmb/clisecdesc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source3/libsmb/clisecdesc.c') diff --git a/source3/libsmb/clisecdesc.c b/source3/libsmb/clisecdesc.c index e6b57f6ad4..d572af3db4 100644 --- a/source3/libsmb/clisecdesc.c +++ b/source3/libsmb/clisecdesc.c @@ -123,7 +123,7 @@ BOOL cli_set_secdesc(struct cli_state *cli,int fd, SEC_DESC *sd) if (!cli_receive_nt_trans(cli, &rparam, &rparam_count, &rdata, &rdata_count)) { - DEBUG(1,("Failed to recv NT_TRANSACT_SET_SECURITY_DESC\n")); + DEBUG(1,("NT_TRANSACT_SET_SECURITY_DESC failed\n")); return False; } -- cgit From 5092ad82bac2d8aa07122dfdb26a425a35e1084a Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Mon, 4 Dec 2000 04:58:40 +0000 Subject: removed SACL support (as it doesn't work with w2k if you ask for SACLs) (This used to be commit 52b27d75e12eeeb52b3a93952900809c2ee0b992) --- source3/libsmb/clisecdesc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'source3/libsmb/clisecdesc.c') diff --git a/source3/libsmb/clisecdesc.c b/source3/libsmb/clisecdesc.c index d572af3db4..b56e1ea688 100644 --- a/source3/libsmb/clisecdesc.c +++ b/source3/libsmb/clisecdesc.c @@ -39,7 +39,7 @@ SEC_DESC *cli_query_secdesc(struct cli_state *cli,int fd) SEC_DESC *ret; SIVAL(param, 0, fd); - SSVAL(param, 4, 0xf); + SSVAL(param, 4, 0x7); if (!cli_send_nt_trans(cli, NT_TRANSACT_QUERY_SECURITY_DESC, @@ -107,7 +107,7 @@ BOOL cli_set_secdesc(struct cli_state *cli,int fd, SEC_DESC *sd) } SIVAL(param, 0, fd); - SSVAL(param, 4, 0xf); + SSVAL(param, 4, 0x7); if (!cli_send_nt_trans(cli, NT_TRANSACT_SET_SECURITY_DESC, -- cgit From 369f5fd1d7a6e6298bc3cbe01e3aaed0106f6cf4 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Fri, 15 Dec 2000 01:02:11 +0000 Subject: Fixed memory leaks in lsa_XX calls. Fixed memory leaks in smbcacls. Merged in fixes from appliance-head and 2.2. Fixed multiple connection.tdb open problem. Jeremy. (This used to be commit 0a40bc83e14c69a09948ec09bb6fc5026c4f4c14) --- source3/libsmb/clisecdesc.c | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) (limited to 'source3/libsmb/clisecdesc.c') diff --git a/source3/libsmb/clisecdesc.c b/source3/libsmb/clisecdesc.c index b56e1ea688..d53b3073b2 100644 --- a/source3/libsmb/clisecdesc.c +++ b/source3/libsmb/clisecdesc.c @@ -36,7 +36,6 @@ SEC_DESC *cli_query_secdesc(struct cli_state *cli,int fd) TALLOC_CTX *mem_ctx; prs_struct pd; SEC_DESC *psd = NULL; - SEC_DESC *ret; SIVAL(param, 0, fd); SSVAL(param, 4, 0x7); @@ -48,7 +47,7 @@ SEC_DESC *cli_query_secdesc(struct cli_state *cli,int fd) param, 8, 4, NULL, 0, 0x10000)) { DEBUG(1,("Failed to send NT_TRANSACT_QUERY_SECURITY_DESC\n")); - return NULL; + goto cleanup; } @@ -56,12 +55,12 @@ SEC_DESC *cli_query_secdesc(struct cli_state *cli,int fd) &rparam, &rparam_count, &rdata, &rdata_count)) { DEBUG(1,("Failed to recv NT_TRANSACT_QUERY_SECURITY_DESC\n")); - return NULL; + goto cleanup; } if ((mem_ctx = talloc_init()) == NULL) { DEBUG(0,("talloc_init failed.\n")); - return NULL; + goto cleanup; } prs_init(&pd, rdata_count, 4, mem_ctx, UNMARSHALL); @@ -70,13 +69,17 @@ SEC_DESC *cli_query_secdesc(struct cli_state *cli,int fd) if (!sec_io_desc("sd data", &psd, &pd, 1)) { DEBUG(1,("Failed to parse secdesc\n")); - talloc_destroy(mem_ctx); - return NULL; + goto cleanup; } - ret = dup_sec_desc(psd); + cleanup: + talloc_destroy(mem_ctx); - return ret; + safe_free(rparam); + safe_free(rdata); + + prs_mem_free(&pd); + return psd; } @@ -92,10 +95,11 @@ BOOL cli_set_secdesc(struct cli_state *cli,int fd, SEC_DESC *sd) int rparam_count=0, rdata_count=0; TALLOC_CTX *mem_ctx; prs_struct pd; + BOOL ret = False; if ((mem_ctx = talloc_init()) == NULL) { DEBUG(0,("talloc_init failed.\n")); - return False; + goto cleanup; } prs_init(&pd, 0, 4, mem_ctx, MARSHALL); @@ -103,7 +107,7 @@ BOOL cli_set_secdesc(struct cli_state *cli,int fd, SEC_DESC *sd) if (!sec_io_desc("sd data", &sd, &pd, 1)) { DEBUG(1,("Failed to marshall secdesc\n")); - return False; + goto cleanup; } SIVAL(param, 0, fd); @@ -116,7 +120,7 @@ BOOL cli_set_secdesc(struct cli_state *cli,int fd, SEC_DESC *sd) param, 8, 0, pd.data_p, pd.data_offset, 0)) { DEBUG(1,("Failed to send NT_TRANSACT_SET_SECURITY_DESC\n")); - return False; + goto cleanup; } @@ -124,14 +128,19 @@ BOOL cli_set_secdesc(struct cli_state *cli,int fd, SEC_DESC *sd) &rparam, &rparam_count, &rdata, &rdata_count)) { DEBUG(1,("NT_TRANSACT_SET_SECURITY_DESC failed\n")); - return False; + goto cleanup; } - if (rparam) free(rparam); - if (rdata) free(rdata); + ret = True; + + cleanup: + + safe_free(rparam); + safe_free(rdata); talloc_destroy(mem_ctx); - return True; + prs_mem_free(&pd); + return ret; } -- cgit From 1239b92c73a803c5cb517925523a2936df51a232 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Thu, 22 Feb 2001 03:38:48 +0000 Subject: make sure we don't free non-allocated data (This used to be commit 4a620f7037378dc042b6388ede6356c6db5d58fb) --- source3/libsmb/clisecdesc.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) (limited to 'source3/libsmb/clisecdesc.c') diff --git a/source3/libsmb/clisecdesc.c b/source3/libsmb/clisecdesc.c index d53b3073b2..59d8bdcc71 100644 --- a/source3/libsmb/clisecdesc.c +++ b/source3/libsmb/clisecdesc.c @@ -33,7 +33,7 @@ SEC_DESC *cli_query_secdesc(struct cli_state *cli,int fd) char param[8]; char *rparam=NULL, *rdata=NULL; int rparam_count=0, rdata_count=0; - TALLOC_CTX *mem_ctx; + TALLOC_CTX *mem_ctx = NULL; prs_struct pd; SEC_DESC *psd = NULL; @@ -74,11 +74,13 @@ SEC_DESC *cli_query_secdesc(struct cli_state *cli,int fd) cleanup: - talloc_destroy(mem_ctx); + if (mem_ctx) { + talloc_destroy(mem_ctx); + prs_mem_free(&pd); + } safe_free(rparam); safe_free(rdata); - prs_mem_free(&pd); return psd; } @@ -93,7 +95,7 @@ BOOL cli_set_secdesc(struct cli_state *cli,int fd, SEC_DESC *sd) char param[8]; char *rparam=NULL, *rdata=NULL; int rparam_count=0, rdata_count=0; - TALLOC_CTX *mem_ctx; + TALLOC_CTX *mem_ctx=NULL; prs_struct pd; BOOL ret = False; @@ -138,9 +140,10 @@ BOOL cli_set_secdesc(struct cli_state *cli,int fd, SEC_DESC *sd) safe_free(rparam); safe_free(rdata); - talloc_destroy(mem_ctx); - - prs_mem_free(&pd); + if (mem_ctx) { + talloc_destroy(mem_ctx); + prs_mem_free(&pd); + } return ret; } -- cgit From 00ab9021b0cc5fe2667d383eb9cc2973072cdaaa Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Fri, 9 Mar 2001 23:48:58 +0000 Subject: Serious (and I *mean* serious) attempt to fix little/bigendian RPC issues. We were reading the endainness in the RPC header and then never propagating it to the internal parse_structs used to parse the data. Also removed the "align" argument to prs_init as it was *always* set to 4, and if needed can be set differently on a case by case basis. Now ready for AS/U testing when Herb gets it set up :-). Jeremy. (This used to be commit 0cd37c831d79a12a10e479bf4fa89ffe64c1292a) --- source3/libsmb/clisecdesc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'source3/libsmb/clisecdesc.c') diff --git a/source3/libsmb/clisecdesc.c b/source3/libsmb/clisecdesc.c index 59d8bdcc71..d34a23537a 100644 --- a/source3/libsmb/clisecdesc.c +++ b/source3/libsmb/clisecdesc.c @@ -63,7 +63,7 @@ SEC_DESC *cli_query_secdesc(struct cli_state *cli,int fd) goto cleanup; } - prs_init(&pd, rdata_count, 4, mem_ctx, UNMARSHALL); + prs_init(&pd, rdata_count, mem_ctx, UNMARSHALL); prs_append_data(&pd, rdata, rdata_count); pd.data_offset = 0; @@ -104,7 +104,7 @@ BOOL cli_set_secdesc(struct cli_state *cli,int fd, SEC_DESC *sd) goto cleanup; } - prs_init(&pd, 0, 4, mem_ctx, MARSHALL); + prs_init(&pd, 0, mem_ctx, MARSHALL); prs_give_memory(&pd, NULL, 0, True); if (!sec_io_desc("sd data", &sd, &pd, 1)) { -- cgit From ac9e221c3e6bc892e0f73a403c89434ae13a8eec Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sun, 22 Apr 2001 02:54:04 +0000 Subject: merging from 2.2 to head (This used to be commit bfcc6f88271025760732271f03933839b1cbe0de) --- source3/libsmb/clisecdesc.c | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) (limited to 'source3/libsmb/clisecdesc.c') diff --git a/source3/libsmb/clisecdesc.c b/source3/libsmb/clisecdesc.c index d34a23537a..0b52d62513 100644 --- a/source3/libsmb/clisecdesc.c +++ b/source3/libsmb/clisecdesc.c @@ -33,7 +33,7 @@ SEC_DESC *cli_query_secdesc(struct cli_state *cli,int fd) char param[8]; char *rparam=NULL, *rdata=NULL; int rparam_count=0, rdata_count=0; - TALLOC_CTX *mem_ctx = NULL; + TALLOC_CTX *mem_ctx; prs_struct pd; SEC_DESC *psd = NULL; @@ -74,13 +74,11 @@ SEC_DESC *cli_query_secdesc(struct cli_state *cli,int fd) cleanup: - if (mem_ctx) { - talloc_destroy(mem_ctx); - prs_mem_free(&pd); - } + talloc_destroy(mem_ctx); safe_free(rparam); safe_free(rdata); + prs_mem_free(&pd); return psd; } @@ -95,7 +93,7 @@ BOOL cli_set_secdesc(struct cli_state *cli,int fd, SEC_DESC *sd) char param[8]; char *rparam=NULL, *rdata=NULL; int rparam_count=0, rdata_count=0; - TALLOC_CTX *mem_ctx=NULL; + TALLOC_CTX *mem_ctx; prs_struct pd; BOOL ret = False; @@ -140,10 +138,9 @@ BOOL cli_set_secdesc(struct cli_state *cli,int fd, SEC_DESC *sd) safe_free(rparam); safe_free(rdata); - if (mem_ctx) { - talloc_destroy(mem_ctx); - prs_mem_free(&pd); - } + talloc_destroy(mem_ctx); + + prs_mem_free(&pd); return ret; } -- cgit From 63602d15afe96206e1fdcea4d2b9014582aa41aa Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sat, 28 Apr 2001 14:01:02 +0000 Subject: - fixed some compiler warnings - fixed slprintf and vsprintf macros (This used to be commit c986a3c51e8cdbc1230edbe0f4a91138c4ada29d) --- source3/libsmb/clisecdesc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source3/libsmb/clisecdesc.c') diff --git a/source3/libsmb/clisecdesc.c b/source3/libsmb/clisecdesc.c index 0b52d62513..6824a0edf4 100644 --- a/source3/libsmb/clisecdesc.c +++ b/source3/libsmb/clisecdesc.c @@ -33,7 +33,7 @@ SEC_DESC *cli_query_secdesc(struct cli_state *cli,int fd) char param[8]; char *rparam=NULL, *rdata=NULL; int rparam_count=0, rdata_count=0; - TALLOC_CTX *mem_ctx; + TALLOC_CTX *mem_ctx=NULL; prs_struct pd; SEC_DESC *psd = NULL; -- cgit From f5eab4421c0fcda6907259cb91ba091e9cca5eae Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 1 May 2001 23:07:30 +0000 Subject: Fixup smbcacls. Don't return memory already freed, don't free memory allocated with talloc. Jeremy. (This used to be commit 0ae0d024f5898f7e47e4b1d4487b15447096780c) --- source3/libsmb/clisecdesc.c | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) (limited to 'source3/libsmb/clisecdesc.c') diff --git a/source3/libsmb/clisecdesc.c b/source3/libsmb/clisecdesc.c index 6824a0edf4..69c7d5f73f 100644 --- a/source3/libsmb/clisecdesc.c +++ b/source3/libsmb/clisecdesc.c @@ -28,12 +28,11 @@ /**************************************************************************** query the security descriptor for a open file ****************************************************************************/ -SEC_DESC *cli_query_secdesc(struct cli_state *cli,int fd) +SEC_DESC *cli_query_secdesc(struct cli_state *cli,int fd, TALLOC_CTX *mem_ctx) { char param[8]; char *rparam=NULL, *rdata=NULL; int rparam_count=0, rdata_count=0; - TALLOC_CTX *mem_ctx=NULL; prs_struct pd; SEC_DESC *psd = NULL; @@ -58,11 +57,6 @@ SEC_DESC *cli_query_secdesc(struct cli_state *cli,int fd) goto cleanup; } - if ((mem_ctx = talloc_init()) == NULL) { - DEBUG(0,("talloc_init failed.\n")); - goto cleanup; - } - prs_init(&pd, rdata_count, mem_ctx, UNMARSHALL); prs_append_data(&pd, rdata, rdata_count); pd.data_offset = 0; @@ -74,7 +68,6 @@ SEC_DESC *cli_query_secdesc(struct cli_state *cli,int fd) cleanup: - talloc_destroy(mem_ctx); safe_free(rparam); safe_free(rdata); @@ -82,9 +75,6 @@ SEC_DESC *cli_query_secdesc(struct cli_state *cli,int fd) return psd; } - - - /**************************************************************************** set the security descriptor for a open file ****************************************************************************/ @@ -143,4 +133,3 @@ BOOL cli_set_secdesc(struct cli_state *cli,int fd, SEC_DESC *sd) prs_mem_free(&pd); return ret; } - -- cgit From 005582d1b54e095cadd9fbb50c475a203d831dac Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Thu, 5 Jul 2001 08:24:03 +0000 Subject: Renamed formal parameter fd to fnum because we're talking about SMB file handles, not unix ones. (This used to be commit 974790e45e6774a0e8ca3f8bb73ea941457e0866) --- source3/libsmb/clisecdesc.c | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) (limited to 'source3/libsmb/clisecdesc.c') diff --git a/source3/libsmb/clisecdesc.c b/source3/libsmb/clisecdesc.c index 69c7d5f73f..e0d6ae809f 100644 --- a/source3/libsmb/clisecdesc.c +++ b/source3/libsmb/clisecdesc.c @@ -19,16 +19,13 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#define NO_SYSLOG - #include "includes.h" - - /**************************************************************************** query the security descriptor for a open file - ****************************************************************************/ -SEC_DESC *cli_query_secdesc(struct cli_state *cli,int fd, TALLOC_CTX *mem_ctx) + ****************************************************************************/ +SEC_DESC *cli_query_secdesc(struct cli_state *cli, int fnum, + TALLOC_CTX *mem_ctx) { char param[8]; char *rparam=NULL, *rdata=NULL; @@ -36,7 +33,7 @@ SEC_DESC *cli_query_secdesc(struct cli_state *cli,int fd, TALLOC_CTX *mem_ctx) prs_struct pd; SEC_DESC *psd = NULL; - SIVAL(param, 0, fd); + SIVAL(param, 0, fnum); SSVAL(param, 4, 0x7); if (!cli_send_nt_trans(cli, @@ -77,8 +74,8 @@ SEC_DESC *cli_query_secdesc(struct cli_state *cli,int fd, TALLOC_CTX *mem_ctx) /**************************************************************************** set the security descriptor for a open file - ****************************************************************************/ -BOOL cli_set_secdesc(struct cli_state *cli,int fd, SEC_DESC *sd) + ****************************************************************************/ +BOOL cli_set_secdesc(struct cli_state *cli, int fnum, SEC_DESC *sd) { char param[8]; char *rparam=NULL, *rdata=NULL; @@ -100,7 +97,7 @@ BOOL cli_set_secdesc(struct cli_state *cli,int fd, SEC_DESC *sd) goto cleanup; } - SIVAL(param, 0, fd); + SIVAL(param, 0, fnum); SSVAL(param, 4, 0x7); if (!cli_send_nt_trans(cli, -- cgit From bcbd75f7add425ebee760ddbd2e80a1d4a51e619 Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Mon, 17 Sep 2001 03:33:37 +0000 Subject: move to SAFE_FREE() (This used to be commit 48fc6a6cd52e01b287030fbbf0aa08a6814c5e11) --- source3/libsmb/clisecdesc.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'source3/libsmb/clisecdesc.c') diff --git a/source3/libsmb/clisecdesc.c b/source3/libsmb/clisecdesc.c index e0d6ae809f..0e0884b843 100644 --- a/source3/libsmb/clisecdesc.c +++ b/source3/libsmb/clisecdesc.c @@ -65,8 +65,8 @@ SEC_DESC *cli_query_secdesc(struct cli_state *cli, int fnum, cleanup: - safe_free(rparam); - safe_free(rdata); + SAFE_FREE(rparam); + SAFE_FREE(rdata); prs_mem_free(&pd); return psd; @@ -122,8 +122,8 @@ BOOL cli_set_secdesc(struct cli_state *cli, int fnum, SEC_DESC *sd) cleanup: - safe_free(rparam); - safe_free(rdata); + SAFE_FREE(rparam); + SAFE_FREE(rdata); talloc_destroy(mem_ctx); -- cgit From cd68afe31256ad60748b34f7318a180cfc2127cc Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Wed, 30 Jan 2002 06:08:46 +0000 Subject: Removed version number from file header. Changed "SMB/Netbios" to "SMB/CIFS" in file header. (This used to be commit 6a58c9bd06d0d7502a24bf5ce5a2faf0a146edfa) --- source3/libsmb/clisecdesc.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'source3/libsmb/clisecdesc.c') diff --git a/source3/libsmb/clisecdesc.c b/source3/libsmb/clisecdesc.c index 0e0884b843..5de67b1e05 100644 --- a/source3/libsmb/clisecdesc.c +++ b/source3/libsmb/clisecdesc.c @@ -1,6 +1,5 @@ /* - Unix SMB/Netbios implementation. - Version 3.0 + Unix SMB/CIFS implementation. client security descriptor functions Copyright (C) Andrew Tridgell 2000 -- cgit From ef8bd7c4f7ae8192ea05db070962ecf0ff3615f3 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Fri, 20 Dec 2002 20:21:31 +0000 Subject: Forward port the change to talloc_init() to make all talloc contexts named. Ensure we can query them. Jeremy. (This used to be commit 09a218a9f6fb0bd922940467bf8500eb4f1bcf84) --- source3/libsmb/clisecdesc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source3/libsmb/clisecdesc.c') diff --git a/source3/libsmb/clisecdesc.c b/source3/libsmb/clisecdesc.c index 5de67b1e05..7dd2747ff6 100644 --- a/source3/libsmb/clisecdesc.c +++ b/source3/libsmb/clisecdesc.c @@ -83,7 +83,7 @@ BOOL cli_set_secdesc(struct cli_state *cli, int fnum, SEC_DESC *sd) prs_struct pd; BOOL ret = False; - if ((mem_ctx = talloc_init()) == NULL) { + if ((mem_ctx = talloc_init("cli_set_secdesc")) == NULL) { DEBUG(0,("talloc_init failed.\n")); goto cleanup; } -- cgit From 8fc1f1aead6db996a6d96efdc5f81779afc9c8d2 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Fri, 14 Feb 2003 22:55:46 +0000 Subject: Ensure that only parse_prs.c access internal members of the prs_struct. Needed to move to disk based i/o later. Jeremy. (This used to be commit a823fee5b41a5b6cd4ef05aa1f85f7725bd272a5) --- source3/libsmb/clisecdesc.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'source3/libsmb/clisecdesc.c') diff --git a/source3/libsmb/clisecdesc.c b/source3/libsmb/clisecdesc.c index 7dd2747ff6..20154dbeb2 100644 --- a/source3/libsmb/clisecdesc.c +++ b/source3/libsmb/clisecdesc.c @@ -54,8 +54,8 @@ SEC_DESC *cli_query_secdesc(struct cli_state *cli, int fnum, } prs_init(&pd, rdata_count, mem_ctx, UNMARSHALL); - prs_append_data(&pd, rdata, rdata_count); - pd.data_offset = 0; + prs_copy_data_in(&pd, rdata, rdata_count); + prs_set_offset(&pd,0); if (!sec_io_desc("sd data", &psd, &pd, 1)) { DEBUG(1,("Failed to parse secdesc\n")); @@ -104,7 +104,7 @@ BOOL cli_set_secdesc(struct cli_state *cli, int fnum, SEC_DESC *sd) 0, NULL, 0, 0, param, 8, 0, - pd.data_p, pd.data_offset, 0)) { + prs_data_p(&pd), prs_offset(&pd), 0)) { DEBUG(1,("Failed to send NT_TRANSACT_SET_SECURITY_DESC\n")); goto cleanup; } -- cgit From 1263c6e36c0a4608867259a651b0e8d1e6cc53f9 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Sat, 10 May 2003 02:05:24 +0000 Subject: Fix from Tom.Lackemann@falconstor.com to correctly set the flags based on the security entries sent. Jeremy. (This used to be commit 45953d59f707b58e66b980512afc7f929d360ad5) --- source3/libsmb/clisecdesc.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'source3/libsmb/clisecdesc.c') diff --git a/source3/libsmb/clisecdesc.c b/source3/libsmb/clisecdesc.c index 20154dbeb2..d86a9022a6 100644 --- a/source3/libsmb/clisecdesc.c +++ b/source3/libsmb/clisecdesc.c @@ -79,6 +79,7 @@ BOOL cli_set_secdesc(struct cli_state *cli, int fnum, SEC_DESC *sd) char param[8]; char *rparam=NULL, *rdata=NULL; int rparam_count=0, rdata_count=0; + uint32 sec_info = 0; TALLOC_CTX *mem_ctx; prs_struct pd; BOOL ret = False; @@ -97,7 +98,14 @@ BOOL cli_set_secdesc(struct cli_state *cli, int fnum, SEC_DESC *sd) } SIVAL(param, 0, fnum); - SSVAL(param, 4, 0x7); + + if (sd->off_dacl) + sec_info |= DACL_SECURITY_INFORMATION; + if (sd->off_owner_sid) + sec_info |= OWNER_SECURITY_INFORMATION; + if (sd->off_grp_sid) + sec_info |= GROUP_SECURITY_INFORMATION; + SSVAL(param, 4, sec_info); if (!cli_send_nt_trans(cli, NT_TRANSACT_SET_SECURITY_DESC, -- cgit From 062f89bc2833bf49f873a7fd5c2624babd702db0 Mon Sep 17 00:00:00 2001 From: Herb Lewis Date: Fri, 15 Aug 2003 01:42:30 +0000 Subject: get rid of some sompiler warnings on IRIX (This used to be commit a6a39c61e8228c8b3b7552ab3c61ec3a6a639143) --- source3/libsmb/clisecdesc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'source3/libsmb/clisecdesc.c') diff --git a/source3/libsmb/clisecdesc.c b/source3/libsmb/clisecdesc.c index d86a9022a6..548cd6ec18 100644 --- a/source3/libsmb/clisecdesc.c +++ b/source3/libsmb/clisecdesc.c @@ -28,7 +28,7 @@ SEC_DESC *cli_query_secdesc(struct cli_state *cli, int fnum, { char param[8]; char *rparam=NULL, *rdata=NULL; - int rparam_count=0, rdata_count=0; + unsigned int rparam_count=0, rdata_count=0; prs_struct pd; SEC_DESC *psd = NULL; @@ -78,7 +78,7 @@ BOOL cli_set_secdesc(struct cli_state *cli, int fnum, SEC_DESC *sd) { char param[8]; char *rparam=NULL, *rdata=NULL; - int rparam_count=0, rdata_count=0; + unsigned int rparam_count=0, rdata_count=0; uint32 sec_info = 0; TALLOC_CTX *mem_ctx; prs_struct pd; -- cgit From e78cf62248f842069c97da914c0dfc2d5c27e997 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Thu, 23 Oct 2003 13:45:48 +0000 Subject: According to Ethereal we have a 32-Bit quantity here. And with SSVAL valgrind reports an unitialized read which is obviously correct. And I hate valgrind errors ;-) Volker (This used to be commit e5dbf2441c2ce7e7cb62f2538786e38bb8c8bdd9) --- source3/libsmb/clisecdesc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source3/libsmb/clisecdesc.c') diff --git a/source3/libsmb/clisecdesc.c b/source3/libsmb/clisecdesc.c index 548cd6ec18..2989966f4d 100644 --- a/source3/libsmb/clisecdesc.c +++ b/source3/libsmb/clisecdesc.c @@ -33,7 +33,7 @@ SEC_DESC *cli_query_secdesc(struct cli_state *cli, int fnum, SEC_DESC *psd = NULL; SIVAL(param, 0, fnum); - SSVAL(param, 4, 0x7); + SIVAL(param, 4, 0x7); if (!cli_send_nt_trans(cli, NT_TRANSACT_QUERY_SECURITY_DESC, -- cgit From 66e689478a700d669a1abfcb272b4191aa528658 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Thu, 7 Oct 2004 03:55:39 +0000 Subject: r2834: Netapps can return NT_STATUS_ACCESS_DENIED when trying to return the security descriptor for a file. Return an error in this case instead of panicing trying to unpack a zero length buffer. Found by Brett Funderburg. (This used to be commit 588de0d4a84a5228d0f99f743ad327ad3b70ead1) --- source3/libsmb/clisecdesc.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'source3/libsmb/clisecdesc.c') diff --git a/source3/libsmb/clisecdesc.c b/source3/libsmb/clisecdesc.c index 2989966f4d..b79ea9d14b 100644 --- a/source3/libsmb/clisecdesc.c +++ b/source3/libsmb/clisecdesc.c @@ -53,6 +53,9 @@ SEC_DESC *cli_query_secdesc(struct cli_state *cli, int fnum, goto cleanup; } + if (cli_is_error(cli)) + goto cleanup; + prs_init(&pd, rdata_count, mem_ctx, UNMARSHALL); prs_copy_data_in(&pd, rdata, rdata_count); prs_set_offset(&pd,0); -- cgit From 6f56a5be2e7e9259f020dd20c37d79f8f95c3815 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Sat, 22 Jan 2005 01:22:39 +0000 Subject: r4917: Merge some of Derrell.Lipman@UnwiredUniverse.com obvious fixes. Added text explaining units in pdbedit time fields. Jeremy. (This used to be commit 3d09c15d8f06ad06fae362291a6c986f7b6107e6) --- source3/libsmb/clisecdesc.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'source3/libsmb/clisecdesc.c') diff --git a/source3/libsmb/clisecdesc.c b/source3/libsmb/clisecdesc.c index b79ea9d14b..2475743479 100644 --- a/source3/libsmb/clisecdesc.c +++ b/source3/libsmb/clisecdesc.c @@ -30,6 +30,7 @@ SEC_DESC *cli_query_secdesc(struct cli_state *cli, int fnum, char *rparam=NULL, *rdata=NULL; unsigned int rparam_count=0, rdata_count=0; prs_struct pd; + BOOL pd_initialized = False; SEC_DESC *psd = NULL; SIVAL(param, 0, fnum); @@ -56,7 +57,10 @@ SEC_DESC *cli_query_secdesc(struct cli_state *cli, int fnum, if (cli_is_error(cli)) goto cleanup; - prs_init(&pd, rdata_count, mem_ctx, UNMARSHALL); + if (!prs_init(&pd, rdata_count, mem_ctx, UNMARSHALL)) { + goto cleanup; + } + pd_initialized = True; prs_copy_data_in(&pd, rdata, rdata_count); prs_set_offset(&pd,0); @@ -70,7 +74,8 @@ SEC_DESC *cli_query_secdesc(struct cli_state *cli, int fnum, SAFE_FREE(rparam); SAFE_FREE(rdata); - prs_mem_free(&pd); + if (pd_initialized) + prs_mem_free(&pd); return psd; } -- cgit From 4db7642caa99c1b054322a8971c4b673556487ce Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 20 Sep 2006 22:23:12 +0000 Subject: r18745: Use the Samba4 data structures for security descriptors and security descriptor buffers. Make security access masks simply a uint32 rather than a structure with a uint32 in it. (This used to be commit b41c52b9db5fc4a553b20a7a5a051a4afced9366) --- source3/libsmb/clisecdesc.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'source3/libsmb/clisecdesc.c') diff --git a/source3/libsmb/clisecdesc.c b/source3/libsmb/clisecdesc.c index 2475743479..e55be48e94 100644 --- a/source3/libsmb/clisecdesc.c +++ b/source3/libsmb/clisecdesc.c @@ -107,11 +107,11 @@ BOOL cli_set_secdesc(struct cli_state *cli, int fnum, SEC_DESC *sd) SIVAL(param, 0, fnum); - if (sd->off_dacl) + if (sd->dacl) sec_info |= DACL_SECURITY_INFORMATION; - if (sd->off_owner_sid) + if (sd->owner_sid) sec_info |= OWNER_SECURITY_INFORMATION; - if (sd->off_grp_sid) + if (sd->group_sid) sec_info |= GROUP_SECURITY_INFORMATION; SSVAL(param, 4, sec_info); -- cgit From d824b98f80ba186030cbb70b3a1e5daf80469ecd Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Mon, 9 Jul 2007 19:25:36 +0000 Subject: r23779: Change from v2 or later to v3 or later. Jeremy. (This used to be commit 407e6e695b8366369b7c76af1ff76869b45347b3) --- source3/libsmb/clisecdesc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source3/libsmb/clisecdesc.c') diff --git a/source3/libsmb/clisecdesc.c b/source3/libsmb/clisecdesc.c index e55be48e94..4e16b73e15 100644 --- a/source3/libsmb/clisecdesc.c +++ b/source3/libsmb/clisecdesc.c @@ -5,7 +5,7 @@ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or + the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, -- cgit From 5e54558c6dea67b56bbfaba5698f3a434d3dffb6 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Tue, 10 Jul 2007 00:52:41 +0000 Subject: r23784: use the GPLv3 boilerplate as recommended by the FSF and the license text (This used to be commit b0132e94fc5fef936aa766fb99a306b3628e9f07) --- source3/libsmb/clisecdesc.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'source3/libsmb/clisecdesc.c') diff --git a/source3/libsmb/clisecdesc.c b/source3/libsmb/clisecdesc.c index 4e16b73e15..27629ea96d 100644 --- a/source3/libsmb/clisecdesc.c +++ b/source3/libsmb/clisecdesc.c @@ -14,8 +14,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + along with this program. If not, see . */ #include "includes.h" -- cgit From 30191d1a5704ad2b158386b511558972d539ce47 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Thu, 18 Oct 2007 17:40:25 -0700 Subject: RIP BOOL. Convert BOOL -> bool. I found a few interesting bugs in various places whilst doing this (places that assumed BOOL == int). I also need to fix the Samba4 pidl generation (next checkin). Jeremy. (This used to be commit f35a266b3cbb3e5fa6a86be60f34fe340a3ca71f) --- source3/libsmb/clisecdesc.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'source3/libsmb/clisecdesc.c') diff --git a/source3/libsmb/clisecdesc.c b/source3/libsmb/clisecdesc.c index 27629ea96d..46a6609415 100644 --- a/source3/libsmb/clisecdesc.c +++ b/source3/libsmb/clisecdesc.c @@ -29,7 +29,7 @@ SEC_DESC *cli_query_secdesc(struct cli_state *cli, int fnum, char *rparam=NULL, *rdata=NULL; unsigned int rparam_count=0, rdata_count=0; prs_struct pd; - BOOL pd_initialized = False; + bool pd_initialized = False; SEC_DESC *psd = NULL; SIVAL(param, 0, fnum); @@ -81,7 +81,7 @@ SEC_DESC *cli_query_secdesc(struct cli_state *cli, int fnum, /**************************************************************************** set the security descriptor for a open file ****************************************************************************/ -BOOL cli_set_secdesc(struct cli_state *cli, int fnum, SEC_DESC *sd) +bool cli_set_secdesc(struct cli_state *cli, int fnum, SEC_DESC *sd) { char param[8]; char *rparam=NULL, *rdata=NULL; @@ -89,7 +89,7 @@ BOOL cli_set_secdesc(struct cli_state *cli, int fnum, SEC_DESC *sd) uint32 sec_info = 0; TALLOC_CTX *mem_ctx; prs_struct pd; - BOOL ret = False; + bool ret = False; if ((mem_ctx = talloc_init("cli_set_secdesc")) == NULL) { DEBUG(0,("talloc_init failed.\n")); -- cgit From 240391be5345aef88a25c1221942202ba33588b8 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Sat, 29 Dec 2007 22:47:03 +0100 Subject: Make use of [un]marshall_sec_desc (This used to be commit 54576733d6c0511dc7379f964b1cb035913b7c8d) --- source3/libsmb/clisecdesc.c | 45 +++++++++++++++++---------------------------- 1 file changed, 17 insertions(+), 28 deletions(-) (limited to 'source3/libsmb/clisecdesc.c') diff --git a/source3/libsmb/clisecdesc.c b/source3/libsmb/clisecdesc.c index 46a6609415..adc6fba9af 100644 --- a/source3/libsmb/clisecdesc.c +++ b/source3/libsmb/clisecdesc.c @@ -28,9 +28,8 @@ SEC_DESC *cli_query_secdesc(struct cli_state *cli, int fnum, char param[8]; char *rparam=NULL, *rdata=NULL; unsigned int rparam_count=0, rdata_count=0; - prs_struct pd; - bool pd_initialized = False; SEC_DESC *psd = NULL; + NTSTATUS status; SIVAL(param, 0, fnum); SIVAL(param, 4, 0x7); @@ -56,15 +55,12 @@ SEC_DESC *cli_query_secdesc(struct cli_state *cli, int fnum, if (cli_is_error(cli)) goto cleanup; - if (!prs_init(&pd, rdata_count, mem_ctx, UNMARSHALL)) { - goto cleanup; - } - pd_initialized = True; - prs_copy_data_in(&pd, rdata, rdata_count); - prs_set_offset(&pd,0); + status = unmarshall_sec_desc(mem_ctx, (uint8 *)rdata, rdata_count, + &psd); - if (!sec_io_desc("sd data", &psd, &pd, 1)) { - DEBUG(1,("Failed to parse secdesc\n")); + if (!NT_STATUS_IS_OK(status)) { + DEBUG(10, ("unmarshall_sec_desc failed: %s\n", + nt_errstr(status))); goto cleanup; } @@ -73,8 +69,6 @@ SEC_DESC *cli_query_secdesc(struct cli_state *cli, int fnum, SAFE_FREE(rparam); SAFE_FREE(rdata); - if (pd_initialized) - prs_mem_free(&pd); return psd; } @@ -87,20 +81,16 @@ bool cli_set_secdesc(struct cli_state *cli, int fnum, SEC_DESC *sd) char *rparam=NULL, *rdata=NULL; unsigned int rparam_count=0, rdata_count=0; uint32 sec_info = 0; - TALLOC_CTX *mem_ctx; - prs_struct pd; + TALLOC_CTX *frame = talloc_stackframe(); bool ret = False; - - if ((mem_ctx = talloc_init("cli_set_secdesc")) == NULL) { - DEBUG(0,("talloc_init failed.\n")); - goto cleanup; - } - - prs_init(&pd, 0, mem_ctx, MARSHALL); - prs_give_memory(&pd, NULL, 0, True); - - if (!sec_io_desc("sd data", &sd, &pd, 1)) { - DEBUG(1,("Failed to marshall secdesc\n")); + uint8 *data; + size_t len; + NTSTATUS status; + + status = marshall_sec_desc(talloc_tos(), sd, &data, &len); + if (!NT_STATUS_IS_OK(status)) { + DEBUG(10, ("marshall_sec_desc failed: %s\n", + nt_errstr(status))); goto cleanup; } @@ -119,7 +109,7 @@ bool cli_set_secdesc(struct cli_state *cli, int fnum, SEC_DESC *sd) 0, NULL, 0, 0, param, 8, 0, - prs_data_p(&pd), prs_offset(&pd), 0)) { + (char *)data, len, 0)) { DEBUG(1,("Failed to send NT_TRANSACT_SET_SECURITY_DESC\n")); goto cleanup; } @@ -139,8 +129,7 @@ bool cli_set_secdesc(struct cli_state *cli, int fnum, SEC_DESC *sd) SAFE_FREE(rparam); SAFE_FREE(rdata); - talloc_destroy(mem_ctx); + TALLOC_FREE(frame); - prs_mem_free(&pd); return ret; } -- cgit From 7965249bd613eb41eeca24ba8271189e2f90257c Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Tue, 9 Sep 2008 15:03:51 +0200 Subject: Convert cli_query_secdesc to the async trans call (This used to be commit ab41017896e08d32c8a87bf172654ff2db6b6f1a) --- source3/libsmb/clisecdesc.c | 37 ++++++++++++++++--------------------- 1 file changed, 16 insertions(+), 21 deletions(-) (limited to 'source3/libsmb/clisecdesc.c') diff --git a/source3/libsmb/clisecdesc.c b/source3/libsmb/clisecdesc.c index adc6fba9af..f0b786c899 100644 --- a/source3/libsmb/clisecdesc.c +++ b/source3/libsmb/clisecdesc.c @@ -25,8 +25,8 @@ SEC_DESC *cli_query_secdesc(struct cli_state *cli, int fnum, TALLOC_CTX *mem_ctx) { - char param[8]; - char *rparam=NULL, *rdata=NULL; + uint8_t param[8]; + uint8_t *rparam=NULL, *rdata=NULL; unsigned int rparam_count=0, rdata_count=0; SEC_DESC *psd = NULL; NTSTATUS status; @@ -34,27 +34,22 @@ SEC_DESC *cli_query_secdesc(struct cli_state *cli, int fnum, SIVAL(param, 0, fnum); SIVAL(param, 4, 0x7); - if (!cli_send_nt_trans(cli, - NT_TRANSACT_QUERY_SECURITY_DESC, - 0, - NULL, 0, 0, - param, 8, 4, - NULL, 0, 0x10000)) { - DEBUG(1,("Failed to send NT_TRANSACT_QUERY_SECURITY_DESC\n")); - goto cleanup; - } - + status = cli_trans(talloc_tos(), cli, SMBnttrans, + NULL, -1, /* name, fid */ + NT_TRANSACT_QUERY_SECURITY_DESC, 0, /* function, flags */ + NULL, 0, 0, /* setup, length, max */ + param, 8, 4, /* param, length, max */ + NULL, 0, 0x10000, /* data, length, max */ + NULL, NULL, /* rsetup, length */ + &rparam, &rparam_count, + &rdata, &rdata_count); - if (!cli_receive_nt_trans(cli, - &rparam, &rparam_count, - &rdata, &rdata_count)) { - DEBUG(1,("Failed to recv NT_TRANSACT_QUERY_SECURITY_DESC\n")); + if (!NT_STATUS_IS_OK(status)) { + DEBUG(1, ("NT_TRANSACT_QUERY_SECURITY_DESC failed: %s\n", + nt_errstr(status))); goto cleanup; } - if (cli_is_error(cli)) - goto cleanup; - status = unmarshall_sec_desc(mem_ctx, (uint8 *)rdata, rdata_count, &psd); @@ -66,8 +61,8 @@ SEC_DESC *cli_query_secdesc(struct cli_state *cli, int fnum, cleanup: - SAFE_FREE(rparam); - SAFE_FREE(rdata); + TALLOC_FREE(rparam); + TALLOC_FREE(rdata); return psd; } -- cgit