From: Ralph Boehme Date: Tue, 8 Oct 2013 10:36:25 +0000 (+0200) Subject: Fix error in ad_openat(), bug #532 X-Git-Url: https://arthur.barton.de/gitweb/?p=netatalk.git;a=commitdiff_plain;h=79f0b2fd2a896fc700bdf50e75e0b4deaf126580 Fix error in ad_openat(), bug #532 Saving from Word to a folder that is a symlink to a folder on another filesystem results in a crash of the afpd process and the save to fail. This happens only if the option "follow symlinks" is enabled. --- diff --git a/NEWS b/NEWS index 6416a89a..4a008b67 100644 --- a/NEWS +++ b/NEWS @@ -11,6 +11,10 @@ Changes in 3.0.6 * FIX: Small fix in the DSI tickle handling. Bug #528. * UPD: Enhance handling of connection attempts when hitting the connection limit. Bug #529. +* FIX: Saving from Word to a folder that is a symlink to a folder on + another filesystem results in a crash of the afpd process and + the save to fail. This happens only if the option + "follow symlinks" is enabled. Bug #532. Changes in 3.0.5 ================ diff --git a/libatalk/adouble/ad_open.c b/libatalk/adouble/ad_open.c index 06c3c71e..b333f8cd 100644 --- a/libatalk/adouble/ad_open.c +++ b/libatalk/adouble/ad_open.c @@ -1897,10 +1897,12 @@ int ad_openat(struct adouble *ad, mode_t mode = 0; if (dirfd != -1) { - if ((cwdfd = open(".", O_RDONLY) == -1) || (fchdir(dirfd) != 0)) + if (((cwdfd = open(".", O_RDONLY)) == -1) || (fchdir(dirfd) != 0)) EC_FAIL; } + LOG(log_note, logtype_ad, "ad_openat: cwdfd: %d", cwdfd); + va_start(args, adflags); if (adflags & ADFLAGS_CREATE) mode = (sizeof(mode_t) < sizeof(int) ? va_arg (args, int) : va_arg (args, mode_t)); @@ -1908,6 +1910,8 @@ int ad_openat(struct adouble *ad, EC_NEG1( ad_open(ad, path, adflags, mode) ); + LOG(log_note, logtype_ad, "ad_openat: cwdfd: %d", cwdfd); + if (dirfd != -1) { if (fchdir(cwdfd) != 0) { AFP_PANIC("ad_openat: cant chdir back");