From: Ralph Boehme Date: Wed, 27 Feb 2019 15:45:07 +0000 (+0100) Subject: smbcacls: add -x argument, prints maximum access X-Git-Tag: talloc-2.2.0~199 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ec8984f8dd1f8c00a489a5aaf5e51a85f0bfd3ad;p=thirdparty%2Fsamba.git smbcacls: add -x argument, prints maximum access Signed-off-by: Ralph Boehme --- diff --git a/docs-xml/manpages/smbcacls.1.xml b/docs-xml/manpages/smbcacls.1.xml index 6071047682d..7f87da80329 100644 --- a/docs-xml/manpages/smbcacls.1.xml +++ b/docs-xml/manpages/smbcacls.1.xml @@ -38,6 +38,7 @@ --set-security-info FLAGS --sddl --domain-sid SID + -x|--maximum-access @@ -189,6 +190,14 @@ + + -x|--maximum-access + When displaying an ACL additionally query + the server for effective maximum permissions. Note that this + is only supported with SMB protocol version 2 or higher. + + + &stdarg.server.debug; &popt.common.samba; &popt.common.credentials; diff --git a/source3/utils/smbcacls.c b/source3/utils/smbcacls.c index a3a40e9eeb9..b61d11df860 100644 --- a/source3/utils/smbcacls.c +++ b/source3/utils/smbcacls.c @@ -40,6 +40,7 @@ static int test_args; static int sddl; static int query_sec_info = -1; static int set_sec_info = -1; +static bool want_mxac; static const char *domain_sid = NULL; @@ -359,12 +360,33 @@ static bool set_secdesc(struct cli_state *cli, const char *filename, return result; } +/***************************************************** +get maximum access for a file +*******************************************************/ +static int cacl_mxac(struct cli_state *cli, const char *filename) +{ + NTSTATUS status; + uint32_t mxac; + + status = cli_query_mxac(cli, filename, &mxac); + if (!NT_STATUS_IS_OK(status)) { + printf("Failed to get mxac: %s\n", nt_errstr(status)); + return EXIT_FAILED; + } + + printf("Maximum access: 0x%x\n", mxac); + + return EXIT_OK; +} + + /***************************************************** dump the acls for a file *******************************************************/ static int cacl_dump(struct cli_state *cli, const char *filename, bool numeric) { struct security_descriptor *sd; + int ret; if (test_args) { return EXIT_OK; @@ -386,6 +408,13 @@ static int cacl_dump(struct cli_state *cli, const char *filename, bool numeric) sec_desc_print(cli, stdout, sd, numeric); } + if (want_mxac) { + ret = cacl_mxac(cli, filename); + if (ret != EXIT_OK) { + return ret; + } + } + return EXIT_OK; } @@ -910,6 +939,14 @@ int main(int argc, char *argv[]) .descrip = "Set the max protocol level", .argDescrip = "LEVEL", }, + { + .longName = "maximum-access", + .shortName = 'x', + .argInfo = POPT_ARG_NONE, + .arg = NULL, + .val = 'x', + .descrip = "Query maximum persmissions", + }, POPT_COMMON_SAMBA POPT_COMMON_CONNECTION POPT_COMMON_CREDENTIALS @@ -975,6 +1012,9 @@ int main(int argc, char *argv[]) case 'm': lp_set_cmdline("client max protocol", poptGetOptArg(pc)); break; + case 'x': + want_mxac = true; + break; } }