summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorAndreas Schneider <asn@samba.org>2019-01-08 17:27:32 +0100
committerAndreas Schneider <asn@cryptomilk.org>2019-01-28 10:29:12 +0100
commitd304d3c6f0deb3c9a713aa12d678e658ec658437 (patch)
tree36ee63701f6d532b1a23ca20ef9dc973666a843b /examples
parent23709cc3516fe54637775c19b4e57432fbada8f6 (diff)
downloadsamba-d304d3c6f0deb3c9a713aa12d678e658ec658437.tar.gz
examples: Reformat testacl libsmbclient example
Signed-off-by: Andreas Schneider <asn@samba.org> Reviewed-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Diffstat (limited to 'examples')
-rw-r--r--examples/libsmbclient/testacl.c540
1 files changed, 270 insertions, 270 deletions
diff --git a/examples/libsmbclient/testacl.c b/examples/libsmbclient/testacl.c
index 055e38cc70f..784953c3ab5 100644
--- a/examples/libsmbclient/testacl.c
+++ b/examples/libsmbclient/testacl.c
@@ -7,279 +7,279 @@
enum acl_mode
{
- SMB_ACL_LIST,
- SMB_ACL_GET,
- SMB_ACL_SET,
- SMB_ACL_DELETE,
- SMB_ACL_MODIFY,
- SMB_ACL_ADD,
- SMB_ACL_CHOWN,
- SMB_ACL_CHGRP
+ SMB_ACL_LIST,
+ SMB_ACL_GET,
+ SMB_ACL_SET,
+ SMB_ACL_DELETE,
+ SMB_ACL_MODIFY,
+ SMB_ACL_ADD,
+ SMB_ACL_CHOWN,
+ SMB_ACL_CHGRP
};
int main(int argc, const char *argv[])
{
- int opt;
- int flags = 0;
- int debug = 0;
- int numeric = 0;
- int stat_and_retry = 0;
- int full_time_names = 0;
- enum acl_mode mode = SMB_ACL_LIST;
- static const char *the_acl = NULL;
- int ret;
- char *p;
- const char *debugstr;
- char path[1024];
- char value[1024];
- poptContext pc;
- struct stat st;
- struct poptOption long_options[] =
- {
- POPT_AUTOHELP
- {
- "numeric", 'n', POPT_ARG_NONE, &numeric,
- 1, "Don't resolve sids or masks to names"
- },
- {
- "debug", 'd', POPT_ARG_INT, &debug,
- 0, "Set debug level (0-100)"
- },
- {
- "full_time_names", 'f', POPT_ARG_NONE, &full_time_names,
- 1,
- "Use new style xattr names, which include CREATE_TIME"
- },
- {
- "delete", 'D', POPT_ARG_STRING, NULL,
- 'D', "Delete an acl", "ACL"
- },
- {
- "modify", 'M', POPT_ARG_STRING, NULL,
- 'M', "Modify an acl", "ACL"
- },
- {
- "add", 'a', POPT_ARG_STRING, NULL,
- 'a', "Add an acl", "ACL"
- },
- {
- "set", 'S', POPT_ARG_STRING, NULL,
- 'S', "Set acls", "ACLS"
- },
- {
- "chown", 'C', POPT_ARG_STRING, NULL,
- 'C', "Change ownership of a file", "USERNAME"
- },
- {
- "chgrp", 'G', POPT_ARG_STRING, NULL,
- 'G', "Change group ownership of a file", "GROUPNAME"
- },
- {
- "get", 'g', POPT_ARG_STRING, NULL,
- 'g', "Get a specific acl attribute", "ACL"
- },
- {
- "stat_and_retry", 'R', POPT_ARG_NONE, &stat_and_retry,
- 1, "After 'get' do 'stat' and another 'get'"
- },
- {
- NULL
- }
- };
-
- setbuf(stdout, NULL);
-
- pc = poptGetContext("smbcacls", argc, argv, long_options, 0);
-
- poptSetOtherOptionHelp(pc, "smb://server1/share1/filename");
-
- while ((opt = poptGetNextOpt(pc)) != -1) {
- switch (opt) {
- case 'S':
- the_acl = strdup(poptGetOptArg(pc));
- mode = SMB_ACL_SET;
- break;
-
- case 'D':
- the_acl = strdup(poptGetOptArg(pc));
- mode = SMB_ACL_DELETE;
- break;
-
- case 'M':
- the_acl = strdup(poptGetOptArg(pc));
- mode = SMB_ACL_MODIFY;
- break;
-
- case 'a':
- the_acl = strdup(poptGetOptArg(pc));
- mode = SMB_ACL_ADD;
- break;
-
- case 'g':
- the_acl = strdup(poptGetOptArg(pc));
- mode = SMB_ACL_GET;
- break;
-
- case 'C':
- the_acl = strdup(poptGetOptArg(pc));
- mode = SMB_ACL_CHOWN;
- break;
-
- case 'G':
- the_acl = strdup(poptGetOptArg(pc));
- mode = SMB_ACL_CHGRP;
- break;
- }
- }
-
- /* Make connection to server */
- if(!poptPeekArg(pc)) {
- poptPrintUsage(pc, stderr, 0);
- return 1;
- }
-
- strncpy(path, poptGetArg(pc), sizeof(path));
- path[sizeof(path)-1] = '\0';
-
- if (smbc_init(get_auth_data_fn, debug) != 0)
- {
- printf("Could not initialize smbc_ library\n");
- return 1;
- }
-
- if (full_time_names) {
- SMBCCTX *context = smbc_set_context(NULL);
- smbc_setOptionFullTimeNames(context, 1);
- }
-
- /* Perform requested action */
-
- switch(mode)
- {
- case SMB_ACL_LIST:
- ret = smbc_listxattr(path, value, sizeof(value)-2);
- if (ret < 0)
- {
- printf("Could not get attribute list for [%s] %d: %s\n",
- path, errno, strerror(errno));
- return 1;
- }
-
- /*
- * The list of attributes has a series of null-terminated strings.
- * The list of strings terminates with an extra null byte, thus two in
- * a row. Ensure that our buffer, which is conceivably shorter than
- * the list of attributes, actually ends with two null bytes in a row.
- */
- value[sizeof(value) - 2] = '\0';
- value[sizeof(value) - 1] = '\0';
- printf("Supported attributes:\n");
- for (p = value; *p; p += strlen(p) + 1)
- {
- printf("\t%s\n", p);
- }
- break;
-
- case SMB_ACL_GET:
- do
- {
- if (the_acl == NULL)
- {
- if (numeric)
- {
- the_acl = "system.*";
- }
- else
- {
- the_acl = "system.*+";
- }
- }
- ret = smbc_getxattr(path, the_acl, value, sizeof(value));
- if (ret < 0)
- {
- printf("Could not get attributes for [%s] %d: %s\n",
- path, errno, strerror(errno));
- return 1;
- }
-
- printf("Attributes for [%s] are:\n%s\n", path, value);
-
- if (stat_and_retry)
- {
- if (smbc_stat(path, &st) < 0)
- {
- perror("smbc_stat");
- return 1;
- }
- }
-
- --stat_and_retry;
- } while (stat_and_retry >= 0);
- break;
-
- case SMB_ACL_ADD:
- flags = SMBC_XATTR_FLAG_CREATE;
- debugstr = "add attributes";
- goto do_set;
-
- case SMB_ACL_MODIFY:
- flags = SMBC_XATTR_FLAG_REPLACE;
- debugstr = "modify attributes";
- goto do_set;
-
- case SMB_ACL_CHOWN:
- snprintf(value, sizeof(value),
- "system.nt_sec_desc.owner%s:%s",
- numeric ? "" : "+", the_acl);
- the_acl = value;
- debugstr = "chown owner";
- goto do_set;
-
- case SMB_ACL_CHGRP:
- snprintf(value, sizeof(value),
- "system.nt_sec_desc.group%s:%s",
- numeric ? "" : "+", the_acl);
- the_acl = value;
- debugstr = "change group";
- goto do_set;
-
- case SMB_ACL_SET:
- flags = 0;
- debugstr = "set attributes";
-
- do_set:
- if ((p = strchr(the_acl, ':')) == NULL)
- {
- printf("Missing value. ACL must be name:value pair\n");
- return 1;
- }
-
- *p++ = '\0';
-
- ret = smbc_setxattr(path, the_acl, p, strlen(p), flags);
- if (ret < 0)
- {
- printf("Could not %s for [%s] %d: %s\n",
- debugstr, path, errno, strerror(errno));
- return 1;
- }
- break;
-
- case SMB_ACL_DELETE:
- ret = smbc_removexattr(path, the_acl);
- if (ret < 0)
- {
- printf("Could not remove attribute %s for [%s] %d:%s\n",
- the_acl, path, errno, strerror(errno));
- return 1;
- }
- break;
-
- default:
- printf("operation not yet implemented\n");
- break;
- }
-
- return 0;
+ int opt;
+ int flags = 0;
+ int debug = 0;
+ int numeric = 0;
+ int stat_and_retry = 0;
+ int full_time_names = 0;
+ enum acl_mode mode = SMB_ACL_LIST;
+ static const char *the_acl = NULL;
+ int ret;
+ char *p;
+ const char *debugstr;
+ char path[1024];
+ char value[1024];
+ poptContext pc;
+ struct stat st;
+ struct poptOption long_options[] =
+ {
+ POPT_AUTOHELP
+ {
+ "numeric", 'n', POPT_ARG_NONE, &numeric,
+ 1, "Don't resolve sids or masks to names"
+ },
+ {
+ "debug", 'd', POPT_ARG_INT, &debug,
+ 0, "Set debug level (0-100)"
+ },
+ {
+ "full_time_names", 'f', POPT_ARG_NONE, &full_time_names,
+ 1,
+ "Use new style xattr names, which include CREATE_TIME"
+ },
+ {
+ "delete", 'D', POPT_ARG_STRING, NULL,
+ 'D', "Delete an acl", "ACL"
+ },
+ {
+ "modify", 'M', POPT_ARG_STRING, NULL,
+ 'M', "Modify an acl", "ACL"
+ },
+ {
+ "add", 'a', POPT_ARG_STRING, NULL,
+ 'a', "Add an acl", "ACL"
+ },
+ {
+ "set", 'S', POPT_ARG_STRING, NULL,
+ 'S', "Set acls", "ACLS"
+ },
+ {
+ "chown", 'C', POPT_ARG_STRING, NULL,
+ 'C', "Change ownership of a file", "USERNAME"
+ },
+ {
+ "chgrp", 'G', POPT_ARG_STRING, NULL,
+ 'G', "Change group ownership of a file", "GROUPNAME"
+ },
+ {
+ "get", 'g', POPT_ARG_STRING, NULL,
+ 'g', "Get a specific acl attribute", "ACL"
+ },
+ {
+ "stat_and_retry", 'R', POPT_ARG_NONE, &stat_and_retry,
+ 1, "After 'get' do 'stat' and another 'get'"
+ },
+ {
+ NULL
+ }
+ };
+
+ setbuf(stdout, NULL);
+
+ pc = poptGetContext("smbcacls", argc, argv, long_options, 0);
+
+ poptSetOtherOptionHelp(pc, "smb://server1/share1/filename");
+
+ while ((opt = poptGetNextOpt(pc)) != -1) {
+ switch (opt) {
+ case 'S':
+ the_acl = strdup(poptGetOptArg(pc));
+ mode = SMB_ACL_SET;
+ break;
+
+ case 'D':
+ the_acl = strdup(poptGetOptArg(pc));
+ mode = SMB_ACL_DELETE;
+ break;
+
+ case 'M':
+ the_acl = strdup(poptGetOptArg(pc));
+ mode = SMB_ACL_MODIFY;
+ break;
+
+ case 'a':
+ the_acl = strdup(poptGetOptArg(pc));
+ mode = SMB_ACL_ADD;
+ break;
+
+ case 'g':
+ the_acl = strdup(poptGetOptArg(pc));
+ mode = SMB_ACL_GET;
+ break;
+
+ case 'C':
+ the_acl = strdup(poptGetOptArg(pc));
+ mode = SMB_ACL_CHOWN;
+ break;
+
+ case 'G':
+ the_acl = strdup(poptGetOptArg(pc));
+ mode = SMB_ACL_CHGRP;
+ break;
+ }
+ }
+
+ /* Make connection to server */
+ if(!poptPeekArg(pc)) {
+ poptPrintUsage(pc, stderr, 0);
+ return 1;
+ }
+
+ strncpy(path, poptGetArg(pc), sizeof(path));
+ path[sizeof(path)-1] = '\0';
+
+ if (smbc_init(get_auth_data_fn, debug) != 0)
+ {
+ printf("Could not initialize smbc_ library\n");
+ return 1;
+ }
+
+ if (full_time_names) {
+ SMBCCTX *context = smbc_set_context(NULL);
+ smbc_setOptionFullTimeNames(context, 1);
+ }
+
+ /* Perform requested action */
+
+ switch(mode)
+ {
+ case SMB_ACL_LIST:
+ ret = smbc_listxattr(path, value, sizeof(value)-2);
+ if (ret < 0)
+ {
+ printf("Could not get attribute list for [%s] %d: %s\n",
+ path, errno, strerror(errno));
+ return 1;
+ }
+
+ /*
+ * The list of attributes has a series of null-terminated strings.
+ * The list of strings terminates with an extra null byte, thus two in
+ * a row. Ensure that our buffer, which is conceivably shorter than
+ * the list of attributes, actually ends with two null bytes in a row.
+ */
+ value[sizeof(value) - 2] = '\0';
+ value[sizeof(value) - 1] = '\0';
+ printf("Supported attributes:\n");
+ for (p = value; *p; p += strlen(p) + 1)
+ {
+ printf("\t%s\n", p);
+ }
+ break;
+
+ case SMB_ACL_GET:
+ do
+ {
+ if (the_acl == NULL)
+ {
+ if (numeric)
+ {
+ the_acl = "system.*";
+ }
+ else
+ {
+ the_acl = "system.*+";
+ }
+ }
+ ret = smbc_getxattr(path, the_acl, value, sizeof(value));
+ if (ret < 0)
+ {
+ printf("Could not get attributes for [%s] %d: %s\n",
+ path, errno, strerror(errno));
+ return 1;
+ }
+
+ printf("Attributes for [%s] are:\n%s\n", path, value);
+
+ if (stat_and_retry)
+ {
+ if (smbc_stat(path, &st) < 0)
+ {
+ perror("smbc_stat");
+ return 1;
+ }
+ }
+
+ --stat_and_retry;
+ } while (stat_and_retry >= 0);
+ break;
+
+ case SMB_ACL_ADD:
+ flags = SMBC_XATTR_FLAG_CREATE;
+ debugstr = "add attributes";
+ goto do_set;
+
+ case SMB_ACL_MODIFY:
+ flags = SMBC_XATTR_FLAG_REPLACE;
+ debugstr = "modify attributes";
+ goto do_set;
+
+ case SMB_ACL_CHOWN:
+ snprintf(value, sizeof(value),
+ "system.nt_sec_desc.owner%s:%s",
+ numeric ? "" : "+", the_acl);
+ the_acl = value;
+ debugstr = "chown owner";
+ goto do_set;
+
+ case SMB_ACL_CHGRP:
+ snprintf(value, sizeof(value),
+ "system.nt_sec_desc.group%s:%s",
+ numeric ? "" : "+", the_acl);
+ the_acl = value;
+ debugstr = "change group";
+ goto do_set;
+
+ case SMB_ACL_SET:
+ flags = 0;
+ debugstr = "set attributes";
+
+do_set:
+ if ((p = strchr(the_acl, ':')) == NULL)
+ {
+ printf("Missing value. ACL must be name:value pair\n");
+ return 1;
+ }
+
+ *p++ = '\0';
+
+ ret = smbc_setxattr(path, the_acl, p, strlen(p), flags);
+ if (ret < 0)
+ {
+ printf("Could not %s for [%s] %d: %s\n",
+ debugstr, path, errno, strerror(errno));
+ return 1;
+ }
+ break;
+
+ case SMB_ACL_DELETE:
+ ret = smbc_removexattr(path, the_acl);
+ if (ret < 0)
+ {
+ printf("Could not remove attribute %s for [%s] %d:%s\n",
+ the_acl, path, errno, strerror(errno));
+ return 1;
+ }
+ break;
+
+ default:
+ printf("operation not yet implemented\n");
+ break;
+ }
+
+ return 0;
}