X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=etc%2Fafpd%2Facls.c;h=6f2abdf30f43b4c22f7d26a0c7ed7f38d54df9cf;hb=b9a9ac3498b7ae48c11b2bec6be1aff810cd37d2;hp=5cab99fe2c68111087776d8b337ab27c758f79ef;hpb=3a43b6ca05ec2b8f0494f8619a82d25204b7b457;p=netatalk.git diff --git a/etc/afpd/acls.c b/etc/afpd/acls.c index 5cab99fe..6f2abdf3 100644 --- a/etc/afpd/acls.c +++ b/etc/afpd/acls.c @@ -1157,17 +1157,21 @@ static int set_acl(const struct vol *vol, } LOG(log_debug7, logtype_afpd, "set_acl: copied %d trivial ACEs", trivial_ace_count); - /* Ressourcefork first. - Note: for dirs we set the same ACL on the .AppleDouble/.Parent _file_. This - might be strange for ACE_DELETE_CHILD and for inheritance flags. */ + /* Ressourcefork first */ if ((ret = (vol->vfs->vfs_acl(vol, name, ACE_SETACL, new_aces_count, new_aces))) != 0) { - LOG(log_error, logtype_afpd, "set_acl: error setting acl: %s", strerror(errno)); - if (errno == (EACCES | EPERM)) + LOG(log_debug, logtype_afpd, "set_acl: error setting acl: %s", strerror(errno)); + switch (errno) { + case EACCES: + case EPERM: EC_STATUS(AFPERR_ACCESS); - else if (errno == ENOENT) - EC_STATUS(AFPERR_NOITEM); - else + break; + case ENOENT: + EC_STATUS(AFP_OK); + break; + default: EC_STATUS(AFPERR_MISC); + break; + } goto EC_CLEANUP; } if ((ret = (acl(name, ACE_SETACL, new_aces_count, new_aces))) != 0) { @@ -1363,6 +1367,8 @@ static int check_acl_access(const AFPObj *obj, LOG(log_maxdebug, logtype_afpd, "check_acl_access(dir: \"%s\", path: \"%s\", curdir: \"%s\", 0x%08x)", cfrombstr(dir->d_fullpath), path, getcwdpath(), requested_rights); + AFP_ASSERT(vol); + /* This check is not used anymore, as OS X Server seems to be ignoring too */ #if 0 /* Get uid or gid from UUID */ @@ -1736,6 +1742,7 @@ int acltoownermode(const AFPObj *obj, const struct vol *vol, char *path, struct getcwdpath(), path, ma->ma_user); #ifdef HAVE_SOLARIS_ACLS + uint32_t rights = 0; EC_ZERO_LOG(solaris_acl_rights(obj, path, st, &rights)); LOG(log_maxdebug, logtype_afpd, "rights: 0x%08x", rights);