summaryrefslogtreecommitdiffstats
path: root/examples/libsmbclient/testacl.c
diff options
context:
space:
mode:
Diffstat (limited to 'examples/libsmbclient/testacl.c')
-rw-r--r--examples/libsmbclient/testacl.c280
1 files changed, 0 insertions, 280 deletions
diff --git a/examples/libsmbclient/testacl.c b/examples/libsmbclient/testacl.c
deleted file mode 100644
index 47668f7c9c4..00000000000
--- a/examples/libsmbclient/testacl.c
+++ /dev/null
@@ -1,280 +0,0 @@
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <popt.h>
-#include "libsmbclient.h"
-
-enum acl_mode
-{
- SMB_ACL_GET,
- SMB_ACL_SET,
- SMB_ACL_DELETE,
- SMB_ACL_MODIFY,
- SMB_ACL_ADD,
- SMB_ACL_CHOWN,
- SMB_ACL_CHGRP
-};
-
-static void
-get_auth_data_fn(const char * pServer,
- const char * pShare,
- char * pWorkgroup,
- int maxLenWorkgroup,
- char * pUsername,
- int maxLenUsername,
- char * pPassword,
- int maxLenPassword)
-
-{
- char temp[128];
-
- fprintf(stdout, "Workgroup: [%s] ", pWorkgroup);
- fgets(temp, sizeof(temp), stdin);
-
- if (temp[strlen(temp) - 1] == '\n') /* A new line? */
- {
- temp[strlen(temp) - 1] = '\0';
- }
-
- if (temp[0] != '\0')
- {
- strncpy(pWorkgroup, temp, maxLenWorkgroup - 1);
- }
-
- fprintf(stdout, "Username: [%s] ", pUsername);
- fgets(temp, sizeof(temp), stdin);
-
- if (temp[strlen(temp) - 1] == '\n') /* A new line? */
- {
- temp[strlen(temp) - 1] = '\0';
- }
-
- if (temp[0] != '\0')
- {
- strncpy(pUsername, temp, maxLenUsername - 1);
- }
-
- fprintf(stdout, "Password: ");
- fgets(temp, sizeof(temp), stdin);
-
- if (temp[strlen(temp) - 1] == '\n') /* A new line? */
- {
- temp[strlen(temp) - 1] = '\0';
- }
-
- if (temp[0] != '\0')
- {
- strncpy(pPassword, temp, maxLenPassword - 1);
- }
-}
-
-
-int main(int argc, const char *argv[])
-{
- int opt;
- int flags;
- int debug = 0;
- int numeric = 0;
- enum acl_mode mode = SMB_ACL_GET;
- static char *the_acl = NULL;
- int ret;
- char *p;
- char *debugstr;
- char path[1024];
- char value[1024];
- poptContext pc;
- 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)"
- },
- {
- "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"
- },
- {
- 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;
- }
-
- strcpy(path, poptGetArg(pc));
-
- if (smbc_init(get_auth_data_fn, debug) != 0)
- {
- printf("Could not initialize smbc_ library\n");
- return 1;
- }
-
- /* Perform requested action */
-
- switch(mode)
- {
- case SMB_ACL_GET:
- if (the_acl == NULL)
- {
- if (numeric)
- {
- the_acl = "system.nt_sec_desc.*";
- }
- else
- {
- the_acl = "system.nt_sec_desc.*+";
- }
- }
- 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);
- 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;
-}