]> arthur.barton.de Git - netatalk.git/commitdiff
posix acls reading works basically
authorFrank Lahm <franklahm@googlemail.com>
Fri, 18 Jun 2010 01:17:24 +0000 (03:17 +0200)
committerFrank Lahm <franklahm@googlemail.com>
Fri, 18 Jun 2010 01:17:24 +0000 (03:17 +0200)
etc/afpd/acls.c

index 5deb9f164d3e3478d57d368cd6a4dfe1caa146db..195f164530d6807a75098d3471c2b0005c44423e 100644 (file)
@@ -573,28 +573,30 @@ static int get_and_map_acl(char *name, char *rbuf, size_t *rbuflen)
 
 #ifdef HAVE_POSIX_ACLS
     acl_t defacl = NULL , accacl = NULL;
-    if ((defacl = acl_get_file(name, ACL_TYPE_DEFAULT)) == NULL && errno != ENOTDIR) {
-        LOG(log_error, logtype_afpd, "get_and_map_acl: couldnt get default ACL");
-        err = -1;
-        goto cleanup;
-    }
 
+    /* stat to check if its a dir */
     if (stat(name, &st) != 0) {
         LOG(log_error, logtype_afpd, "get_and_map_acl: stat: %s", strerror(errno));
         err = -1;
         goto cleanup;
     }
-
-    /* must pass info if its a dir down to the mapping func */
+    
+    /* if its a dir, check for default acl too */
     dirflag = 0;
-    if (S_ISDIR(st.st_mode))
+    if (S_ISDIR(st.st_mode)) {
         dirflag = IS_DIR;
-    if (defacl && (mapped_aces = map_acl(POSIX_DEFAULT_2_DARWIN | dirflag,
-                                         defacl,
-                                         (darwin_ace_t *)rbuf,
-                                         0)) == -1) {
-        err = -1;
-        goto cleanup;
+        if ((defacl = acl_get_file(name, ACL_TYPE_DEFAULT)) == NULL && errno != ENOTDIR) {
+            LOG(log_error, logtype_afpd, "get_and_map_acl: couldnt get default ACL");
+            err = -1;
+            goto cleanup;
+        }
+        if (defacl && (mapped_aces = map_acl(POSIX_DEFAULT_2_DARWIN | dirflag,
+                                             defacl,
+                                             (darwin_ace_t *)rbuf,
+                                             0)) == -1) {
+            err = -1;
+            goto cleanup;
+        }
     }
 
     if ((accacl = acl_get_file(name, ACL_TYPE_ACCESS)) == NULL) {