X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=libatalk%2Fadouble%2Fad_open.c;h=3e06e93fb6cfe7e715ac0de66be0d58cf0ae72a7;hb=4111aba41c36a99bfd7eb7e987b24314735cdd10;hp=70fba7d27ab5818a822a7269286dfdf1baab9833;hpb=d68cbb869ba29647275034927a05cfbe471f47b4;p=netatalk.git diff --git a/libatalk/adouble/ad_open.c b/libatalk/adouble/ad_open.c index 70fba7d2..3e06e93f 100644 --- a/libatalk/adouble/ad_open.c +++ b/libatalk/adouble/ad_open.c @@ -1695,26 +1695,16 @@ EC_CLEANUP: */ int ad_metadata(const char *name, int flags, struct adouble *adp) { - uid_t uid; int ret, err, oflags; /* Sanitize flags */ oflags = (flags & (ADFLAGS_CHECK_OF | ADFLAGS_DIR)) | ADFLAGS_HF | ADFLAGS_RDONLY; if ((ret = ad_open(adp, name, oflags)) < 0 && errno == EACCES) { - uid = geteuid(); - if (seteuid(0)) { - LOG(log_error, logtype_default, "ad_metadata(%s): seteuid failed %s", name, strerror(errno)); - errno = EACCES; - return -1; - } - /* we are root open read only */ + become_root(); ret = ad_open(adp, name, oflags); + unbecome_root(); err = errno; - if ( seteuid(uid) < 0) { - LOG(log_error, logtype_default, "ad_metadata: can't seteuid back"); - exit(EXITERR_SYS); - } errno = err; }