From ea69ab373272be653573c37b2b22d48d1e7ac794 Mon Sep 17 00:00:00 2001 From: Frank Lahm Date: Tue, 16 Nov 2010 17:20:00 +0100 Subject: [PATCH] Handle symlinks --- etc/afpd/acls.c | 6 ++---- libatalk/acl/unix.c | 12 +++++++++--- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/etc/afpd/acls.c b/etc/afpd/acls.c index 76d87c12..a82d326f 100644 --- a/etc/afpd/acls.c +++ b/etc/afpd/acls.c @@ -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; diff --git a/libatalk/acl/unix.c b/libatalk/acl/unix.c index e290ff34..9b9e394b 100644 --- a/libatalk/acl/unix.c +++ b/libatalk/acl/unix.c @@ -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", -- 2.39.2