]> arthur.barton.de Git - netatalk.git/commitdiff
Create special folders as root, otherwise first time mounting a volume with ro rights...
authorFrank Lahm <franklahm@googlemail.com>
Wed, 13 Jul 2011 09:27:25 +0000 (11:27 +0200)
committerFrank Lahm <franklahm@googlemail.com>
Wed, 13 Jul 2011 09:27:25 +0000 (11:27 +0200)
etc/afpd/volume.c

index faf142c402bbe21c99029b135cfc3f23f8ed8a14..ad7a6574b72f12d31a0a80972617ff607cc2731a 100644 (file)
@@ -2737,6 +2737,14 @@ static int create_special_folder (const struct vol *vol, const struct _special_f
 static void handle_special_folders (const struct vol * vol)
 {
     const _special_folder *p = &special_folders[0];
+    uid_t process_uid;
+
+    process_uid = geteuid();
+    if (process_uid) {
+        if (seteuid(0) == -1) {
+            process_uid = 0;
+        }
+    }
 
     if ((vol->v_flags & AFPVOL_RO))
         return;
@@ -2744,6 +2752,13 @@ static void handle_special_folders (const struct vol * vol)
     for (; p->name != NULL; p++) {
         create_special_folder (vol, p);
     }
+
+    if (process_uid) {
+        if (seteuid(process_uid) == -1) {
+            LOG(log_error, logtype_logger, "can't seteuid back %s", strerror(errno));
+            exit(EXITERR_SYS);
+        }
+    }
 }
 
 const struct vol *getvolumes(void)