From: Björn Baumbach Date: Fri, 22 Jul 2011 13:11:31 +0000 (+0200) Subject: s3-libsmb: introduce new cli_query_secdesc() which returns NTSTATUS X-Git-Url: http://git.samba.org/?a=commitdiff_plain;h=cb4fc9217727c14cc5f92acf99160b7612974850;p=metze%2Fsamba%2Fwip.git s3-libsmb: introduce new cli_query_secdesc() which returns NTSTATUS Replacement for cli_query_secdesc_old() Signed-off-by: Stefan Metzmacher --- diff --git a/source3/libsmb/clisecdesc.c b/source3/libsmb/clisecdesc.c index 71358e8612f5..1e95043c369d 100644 --- a/source3/libsmb/clisecdesc.c +++ b/source3/libsmb/clisecdesc.c @@ -69,6 +69,56 @@ struct security_descriptor *cli_query_secdesc_old(struct cli_state *cli, uint16_ return psd; } +NTSTATUS cli_query_secdesc(struct cli_state *cli, uint16_t fnum, + TALLOC_CTX *mem_ctx, struct security_descriptor **sd) +{ + uint8_t param[8]; + uint8_t *rdata=NULL; + uint32_t rdata_count=0; + NTSTATUS status; + struct security_descriptor *lsd; + + SIVAL(param, 0, fnum); + SIVAL(param, 4, 0x7); + + 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, /* recv_flags2 */ + NULL, 0, NULL, /* rsetup, length */ + NULL, 0, NULL, + &rdata, 0, &rdata_count); + + if (!NT_STATUS_IS_OK(status)) { + DEBUG(1, ("NT_TRANSACT_QUERY_SECURITY_DESC failed: %s\n", + nt_errstr(status))); + goto cleanup; + } + + status = unmarshall_sec_desc(mem_ctx, (uint8 *)rdata, rdata_count, + &lsd); + if (!NT_STATUS_IS_OK(status)) { + DEBUG(10, ("unmarshall_sec_desc failed: %s\n", + nt_errstr(status))); + goto cleanup; + } + + if (sd != NULL) { + *sd = lsd; + } else { + TALLOC_FREE(lsd); + } + + cleanup: + + TALLOC_FREE(rdata); + + return status; +} + /**************************************************************************** set the security descriptor for a open file ****************************************************************************/ diff --git a/source3/libsmb/proto.h b/source3/libsmb/proto.h index 7b2dc8c5831f..195bc75d141d 100644 --- a/source3/libsmb/proto.h +++ b/source3/libsmb/proto.h @@ -787,6 +787,8 @@ NTSTATUS cli_push(struct cli_state *cli, uint16_t fnum, uint16_t mode, struct security_descriptor *cli_query_secdesc_old(struct cli_state *cli, uint16_t fnum, TALLOC_CTX *mem_ctx); +NTSTATUS cli_query_secdesc(struct cli_state *cli, uint16_t fnum, + TALLOC_CTX *mem_ctx, struct security_descriptor **sd); NTSTATUS cli_set_secdesc(struct cli_state *cli, uint16_t fnum, struct security_descriptor *sd);