1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-23 17:34:34 +03:00

sharesec: Implement --view-all

Listing individual shares can be quite slow when you have a lot of shares. This
implements a --view-all option that prints something like

[share1]
REVISION:1
OWNER:(NULL SID)
GROUP:(NULL SID)
ACL:S-1-1-0:ALLOWED/0/FULL

[share2]
REVISION:1
OWNER:(NULL SID)
GROUP:(NULL SID)
ACL:S-1-1-0:ALLOWED/0/FULL

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Michael Adam <obnox@samba.org>
This commit is contained in:
Volker Lendecke 2013-06-26 15:21:39 +02:00
parent 4ee73fd97b
commit 780e2b092d

View File

@ -36,7 +36,8 @@ enum acl_mode { SMB_ACL_DELETE,
SMB_SD_DELETE,
SMB_SD_SETSDDL,
SMB_SD_VIEWSDDL,
SMB_ACL_VIEW };
SMB_ACL_VIEW,
SMB_ACL_VIEW_ALL };
struct perm_value {
const char *perm;
@ -432,6 +433,9 @@ static int change_share_sec(TALLOC_CTX *mem_ctx, const char *sharename, char *th
}
switch (mode) {
case SMB_ACL_VIEW_ALL:
/* should not happen */
return 0;
case SMB_ACL_VIEW:
sec_desc_print( stdout, old);
return 0;
@ -565,6 +569,10 @@ static int view_sharesec_sddl(const char *sharename)
main program
********************************************************************/
enum {
OPT_VIEW_ALL = 1000,
};
int main(int argc, const char *argv[])
{
int opt;
@ -588,6 +596,8 @@ int main(int argc, const char *argv[])
{ "viewsddl", 'V', POPT_ARG_NONE, the_acl, 'V',
"View the SD in sddl format" },
{ "view", 'v', POPT_ARG_NONE, NULL, 'v', "View current share permissions" },
{ "view-all", 0, POPT_ARG_NONE, NULL, OPT_VIEW_ALL,
"View all current share permissions" },
{ "machine-sid", 'M', POPT_ARG_NONE, NULL, 'M', "Initialize the machine SID" },
{ "force", 'F', POPT_ARG_NONE, NULL, 'F', "Force storing the ACL", "ACLS" },
POPT_COMMON_SAMBA
@ -656,6 +666,9 @@ int main(int argc, const char *argv[])
case 'M':
initialize_sid = True;
break;
case OPT_VIEW_ALL:
mode = SMB_ACL_VIEW_ALL;
break;
}
}
@ -683,6 +696,25 @@ int main(int argc, const char *argv[])
return -1;
}
if (mode == SMB_ACL_VIEW_ALL) {
int i;
for (i=0; i<lp_numservices(); i++) {
TALLOC_CTX *frame = talloc_stackframe();
const char *service = lp_servicename(frame, i);
if (service == NULL) {
continue;
}
printf("[%s]\n", service);
change_share_sec(frame, service, NULL, SMB_ACL_VIEW);
printf("\n");
TALLOC_FREE(frame);
}
goto done;
}
/* get the sharename */
if(!poptPeekArg(pc)) {
@ -711,6 +743,7 @@ int main(int argc, const char *argv[])
break;
}
done:
talloc_destroy(ctx);
return retval;