X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=etc%2Fafpd%2Funix.c;h=a42a6ab9093fde4f923e43510474d52ad58334b4;hb=d3dff4ba4b8db3131a16641d35a6554be5fb5160;hp=31086bb679f41dd1a79a6a73ac9b577a10afbba6;hpb=acb180395693ed05a4e6a1edb6796c8e6f644a72;p=netatalk.git diff --git a/etc/afpd/unix.c b/etc/afpd/unix.c index 31086bb6..a42a6ab9 100644 --- a/etc/afpd/unix.c +++ b/etc/afpd/unix.c @@ -224,23 +224,27 @@ int setfilunixmode (const struct vol *vol, struct path* path, mode_t mode) /* --------------------- */ -int setdirunixmode(const struct vol *vol, const char *name, mode_t mode) +int setdirunixmode(const struct vol *vol, char *name, mode_t mode) { LOG(log_debug, logtype_afpd, "setdirunixmode('%s', mode:%04o) {v_dperm:%04o}", fullpathname(name), mode, vol->v_dperm); - mode |= vol->v_dperm; + mode |= (vol->v_dperm | DIRBITS) & ~vol->v_umask; if (dir_rx_set(mode)) { /* extending right? dir first then .AppleDouble in rf_setdirmode */ - if (chmod_acl(name, (DIRBITS | mode) & ~vol->v_umask) < 0 ) + if (ochmod(name, mode, NULL, + vol_syml_opt(vol) | vol_chmod_opt(vol) + ) < 0) return -1; } if (vol->vfs->vfs_setdirunixmode(vol, name, mode, NULL) < 0) { return -1 ; } if (!dir_rx_set(mode)) { - if (chmod_acl(name, (DIRBITS | mode) & ~vol->v_umask) < 0 ) + if (ochmod(name, mode, NULL, + vol_syml_opt(vol) | vol_chmod_opt(vol) + ) < 0) return -1; } return 0;