summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
Diffstat (limited to 'examples')
-rw-r--r--examples/libsmbclient/testacl.c48
1 files changed, 34 insertions, 14 deletions
diff --git a/examples/libsmbclient/testacl.c b/examples/libsmbclient/testacl.c
index 00e1c2c9da..a57dd4a499 100644
--- a/examples/libsmbclient/testacl.c
+++ b/examples/libsmbclient/testacl.c
@@ -24,6 +24,7 @@ int main(int argc, const char *argv[])
int flags;
int debug = 0;
int numeric = 0;
+ int stat_and_retry = 0;
int full_time_names = 0;
enum acl_mode mode = SMB_ACL_LIST;
static char *the_acl = NULL;
@@ -33,6 +34,7 @@ int main(int argc, const char *argv[])
char path[1024];
char value[1024];
poptContext pc;
+ struct stat st;
struct poptOption long_options[] =
{
POPT_AUTOHELP
@@ -78,6 +80,10 @@ int main(int argc, const char *argv[])
'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
}
};
@@ -175,26 +181,40 @@ int main(int argc, const char *argv[])
break;
case SMB_ACL_GET:
- if (the_acl == NULL)
+ do
{
- if (numeric)
+ if (the_acl == NULL)
{
- the_acl = "system.*";
+ if (numeric)
+ {
+ the_acl = "system.*";
+ }
+ else
+ {
+ the_acl = "system.*+";
+ }
}
- else
+ ret = smbc_getxattr(path, the_acl, value, sizeof(value));
+ if (ret < 0)
{
- the_acl = "system.*+";
+ printf("Could not get attributes for [%s] %d: %s\n",
+ path, errno, strerror(errno));
+ return 1;
}
- }
- 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);
+ 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: