summaryrefslogtreecommitdiff
path: root/source3
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2013-06-26 15:21:39 +0200
committerVolker Lendecke <vl@samba.org>2013-06-26 16:49:33 +0200
commit780e2b092d7ba12aa03fb89f7c06c3d51ebf6e5f (patch)
treeebfb94224720e19cf6ac1d8d6a88faa71155e6be /source3
parent4ee73fd97b63c65cdb8d4fcbe3287a746d667de0 (diff)
downloadsamba-780e2b092d7ba12aa03fb89f7c06c3d51ebf6e5f.tar.gz
samba-780e2b092d7ba12aa03fb89f7c06c3d51ebf6e5f.tar.bz2
samba-780e2b092d7ba12aa03fb89f7c06c3d51ebf6e5f.zip
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>
Diffstat (limited to 'source3')
-rw-r--r--source3/utils/sharesec.c35
1 files changed, 34 insertions, 1 deletions
diff --git a/source3/utils/sharesec.c b/source3/utils/sharesec.c
index 641a2ce140..38c11e037a 100644
--- a/source3/utils/sharesec.c
+++ b/source3/utils/sharesec.c
@@ -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;