diff options
Diffstat (limited to 'tests/bugs/access-control')
| -rw-r--r-- | tests/bugs/access-control/bug-1051896.c | 147 | ||||
| -rw-r--r-- | tests/bugs/access-control/bug-1387241.c | 18 | ||||
| -rw-r--r-- | tests/bugs/access-control/bug-1387241.t | 36 | ||||
| -rw-r--r-- | tests/bugs/access-control/bug-958691.t | 2 |
4 files changed, 128 insertions, 75 deletions
diff --git a/tests/bugs/access-control/bug-1051896.c b/tests/bugs/access-control/bug-1051896.c index 27aa1559453..31799d97a71 100644 --- a/tests/bugs/access-control/bug-1051896.c +++ b/tests/bugs/access-control/bug-1051896.c @@ -13,85 +13,82 @@ #include <utime.h> #include <sys/acl.h> -int do_setfacl(const char *path, const char *options, const char *textacl) +int +do_setfacl(const char *path, const char *options, const char *textacl) { - int r; - int type; - acl_t acl; - int dob; - int dok; - int dom; - struct stat st; - char textmode[30]; + int r; + int type; + acl_t acl; + int dob; + int dok; + int dom; + struct stat st; + char textmode[30]; - r = 0; - dob = strchr(options, 'b') != (char *)NULL; - dok = strchr(options, 'k') != (char *)NULL; - dom = strchr(options, 'm') != (char *)NULL; - if ((dom && !textacl) - || (!dom && (textacl || (!dok && !dob) || - strchr(options, 'd')))) { - errno = EBADRQC; /* "bad request" */ - r = -1; - } else { - if (dob || dok) { - r = acl_delete_def_file(path); - } - if (dob && !r) { - if (!stat(path, &st)) { - sprintf(textmode, - "u::%c%c%c,g::%c%c%c,o::%c%c%c", - (st.st_mode & 0400 ? 'r' : '-'), - (st.st_mode & 0200 ? 'w' : '-'), - (st.st_mode & 0100 ? 'x' : '-'), - (st.st_mode & 0040 ? 'r' : '-'), - (st.st_mode & 0020 ? 'w' : '-'), - (st.st_mode & 0010 ? 'x' : '-'), - (st.st_mode & 004 ? 'r' : '-'), - (st.st_mode & 002 ? 'w' : '-'), - (st.st_mode & 001 ? 'x' : '-')); - acl = acl_from_text(textmode); - if (acl) { - r = acl_set_file(path, - ACL_TYPE_ACCESS, acl); - acl_free(acl); - } else - r = -1; - } else - r = -1; - } - if (!r && dom) { - if (strchr(options, 'd')) - type = ACL_TYPE_DEFAULT; - else - type = ACL_TYPE_ACCESS; - acl = acl_from_text(textacl); - if (acl) { - r = acl_set_file(path, type, acl); - acl_free(acl); - } else - r = -1; - } - } - if (r) - r = -errno; - return r; + r = 0; + dob = strchr(options, 'b') != (char *)NULL; + dok = strchr(options, 'k') != (char *)NULL; + dom = strchr(options, 'm') != (char *)NULL; + if ((dom && !textacl) || + (!dom && (textacl || (!dok && !dob) || strchr(options, 'd')))) { + errno = EBADRQC; /* "bad request" */ + r = -1; + } else { + if (dob || dok) { + r = acl_delete_def_file(path); + } + if (dob && !r) { + if (!stat(path, &st)) { + sprintf(textmode, "u::%c%c%c,g::%c%c%c,o::%c%c%c", + (st.st_mode & 0400 ? 'r' : '-'), + (st.st_mode & 0200 ? 'w' : '-'), + (st.st_mode & 0100 ? 'x' : '-'), + (st.st_mode & 0040 ? 'r' : '-'), + (st.st_mode & 0020 ? 'w' : '-'), + (st.st_mode & 0010 ? 'x' : '-'), + (st.st_mode & 004 ? 'r' : '-'), + (st.st_mode & 002 ? 'w' : '-'), + (st.st_mode & 001 ? 'x' : '-')); + acl = acl_from_text(textmode); + if (acl) { + r = acl_set_file(path, ACL_TYPE_ACCESS, acl); + acl_free(acl); + } else + r = -1; + } else + r = -1; + } + if (!r && dom) { + if (strchr(options, 'd')) + type = ACL_TYPE_DEFAULT; + else + type = ACL_TYPE_ACCESS; + acl = acl_from_text(textacl); + if (acl) { + r = acl_set_file(path, type, acl); + acl_free(acl); + } else + r = -1; + } + } + if (r) + r = -errno; + return r; } - -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { - int rc = 0; + int rc = 0; - if (argc != 4) { - fprintf(stderr, - "usage: ./setfacl_test <path> <options> <textacl>\n"); - return 0; - } - rc = do_setfacl(argv[1], argv[2], argv[3]); - if (rc != 0) { - fprintf(stderr, "do_setfacl failed: %s\n", strerror(errno)); - return rc; - } - return 0; + if (argc != 4) { + fprintf(stderr, "usage: ./setfacl_test <path> <options> <textacl>\n"); + return 0; + } + rc = do_setfacl(argv[1], argv[2], argv[3]); + if (rc != 0) { + fprintf(stderr, "do_setfacl failed: %s\n", strerror(errno)); + return rc; + } + return 0; } diff --git a/tests/bugs/access-control/bug-1387241.c b/tests/bugs/access-control/bug-1387241.c new file mode 100644 index 00000000000..e2e843a2fda --- /dev/null +++ b/tests/bugs/access-control/bug-1387241.c @@ -0,0 +1,18 @@ +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <fcntl.h> + +int +main(int argc, char *argv[]) +{ + int ret = EXIT_FAILURE; + int fd = open(argv[1], O_RDONLY | O_TRUNC); + + if (fd) { + ret = EXIT_SUCCESS; + close(fd); + } + + return ret; +} diff --git a/tests/bugs/access-control/bug-1387241.t b/tests/bugs/access-control/bug-1387241.t new file mode 100644 index 00000000000..2efd80547d6 --- /dev/null +++ b/tests/bugs/access-control/bug-1387241.t @@ -0,0 +1,36 @@ +#!/bin/bash + +. $(dirname $0)/../../include.rc +. $(dirname $0)/../../volume.rc + +case $OSTYPE in +NetBSD) + echo "Skip test on ACL which are not available on NetBSD" >&2 + SKIP_TESTS + exit 0 + ;; +*) + ;; +esac + +#cleanup; + +## Start and create a volume +TEST glusterd; +TEST pidof glusterd; +TEST $CLI volume info; + +TEST $CLI volume create $V0 replica 2 $H0:$B0/${V0}{1,2,3,4}; +TEST $CLI volume start $V0; + +TEST glusterfs --entry-timeout=0 --attribute-timeout=0 --acl -s $H0 --volfile-id $V0 $M0; + +TEST touch $M0/file1; + +TEST $CC $(dirname $0)/bug-1387241.c -o $(dirname $0)/bug-1387241 + +TEST $(dirname $0)/bug-1387241 $M0/file1 + +TEST rm -f $(dirname $0)/bug-1387241 + +#cleanup diff --git a/tests/bugs/access-control/bug-958691.t b/tests/bugs/access-control/bug-958691.t index 6c45b47b166..8b70607bdbb 100644 --- a/tests/bugs/access-control/bug-958691.t +++ b/tests/bugs/access-control/bug-958691.t @@ -3,6 +3,8 @@ . $(dirname $0)/../../volume.rc . $(dirname $0)/../../nfs.rc +#G_TESTDEF_TEST_STATUS_CENTOS6=NFS_TEST + cleanup; TEST glusterd |
