From 3e20aeb18e418a5a1a7821fd8c3f0d0bc5169489 Mon Sep 17 00:00:00 2001 From: Derrell Lipman Date: Fri, 30 May 2008 10:38:35 -0400 Subject: Working on bug #5475 - Add code to test whether smbc_stat() munges future smbc_getxattr() results. Derrell (This used to be commit 5f6b301f92e9e9d5ee1dab9ef8eca2cc77e12941) --- examples/libsmbclient/testacl.c | 48 +++++++++++++++++++++++++++++------------ 1 file changed, 34 insertions(+), 14 deletions(-) (limited to 'examples/libsmbclient') 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 @@ -77,6 +79,10 @@ int main(int argc, const char *argv[]) "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 } @@ -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: -- cgit