]> arthur.barton.de Git - netatalk.git/commitdiff
Handle symlinks
authorFrank Lahm <franklahm@googlemail.com>
Tue, 16 Nov 2010 16:20:00 +0000 (17:20 +0100)
committerFrank Lahm <franklahm@googlemail.com>
Tue, 16 Nov 2010 16:20:00 +0000 (17:20 +0100)
etc/afpd/acls.c
libatalk/acl/unix.c

index 76d87c12645e60e618e28256df65b5faaa6acc97..a82d326fe2ff9211b58151617e037272ff45e814 100644 (file)
@@ -96,10 +96,8 @@ static int solaris_acl_rights(const char *path,
     /* Get ACL from file/dir */
     EC_NEG1_LOG(ace_count = get_nfsv4_acl(path, &aces));
 
-    if (ace_count == 0) {
-        LOG(log_warning, logtype_afpd, "Zero ACEs from get_nfsv4_acl");
-        EC_FAIL;
-    }
+    if (ace_count == 0)
+        goto EC_CLEANUP;
 
     /* Now check requested rights */
     i = 0;
index e290ff34730eab5b6b464270a26637df9f3f86c3..9b9e394b86b79b866d939bdb83f23b02b12a1fef 100644 (file)
@@ -43,13 +43,19 @@ int get_nfsv4_acl(const char *name, ace_t **retAces)
 
     *retAces = NULL;
     /* Only call acl() for regular files and directories, otherwise just return 0 */
-    if (lstat(name, &st) != 0)
+    if (lstat(name, &st) != 0) {
+        LOG(log_warning, logtype_afpd, "get_nfsv4_acl(\"%s/%s\"): %s", getcwdpath(), name, strerror(errno));
         return -1;
-    if ( ! (S_ISREG(st.st_mode) || S_ISDIR(st.st_mode)))
+    }
+    if ( ! (S_ISREG(st.st_mode) || S_ISDIR(st.st_mode) || S_ISLNK(st.st_mode))) {
+        LOG(log_warning, logtype_afpd, "get_nfsv4_acl(\"%s/%s\"): special", getcwdpath(), name);
         return 0;
+    }
 
-    if ((ace_count = acl(name, ACE_GETACLCNT, 0, NULL)) == 0)
+    if ((ace_count = acl(name, ACE_GETACLCNT, 0, NULL)) == 0) {
+        LOG(log_warning, logtype_afpd, "get_nfsv4_acl(\"%s/%s\"): 0 ACEs", getcwdpath(), name);
         return 0;
+    }
 
     if (ace_count == -1) {
         LOG(log_error, logtype_afpd, "get_nfsv4_acl: acl('%s/%s', ACE_GETACLCNT): ace_count %i, error: %s",