]> arthur.barton.de Git - netatalk.git/commitdiff
Add a flag to load_volumes() that controls load behaviour
authorRalph Boehme <rb@sernet.de>
Fri, 28 Feb 2014 17:56:52 +0000 (18:56 +0100)
committerRalph Boehme <rb@sernet.de>
Fri, 28 Feb 2014 17:56:52 +0000 (18:56 +0100)
12 files changed:
bin/ad/ad.c
etc/afpd/afp_config.c
etc/afpd/afp_dsi.c
etc/afpd/volume.c
etc/cnid_dbd/cmd_dbd.c
etc/cnid_dbd/cnid_metad.c
etc/cnid_dbd/main.c
etc/netatalk/netatalk.c
include/atalk/netatalk_conf.h
include/atalk/volume.h
libatalk/util/netatalk_conf.c
test/afpd/test.c

index 3de3030b9a820bbde3c53caef74a27ac1b769482..fc8563c06f034a7c0a660ad0f3075f4946ef98b8 100644 (file)
@@ -58,7 +58,7 @@ int main(int argc, char **argv)
 
     setuplog("default:note", "/dev/tty");
 
-    if (load_volumes(&obj) != 0)
+    if (load_volumes(&obj, lv_none) != 0)
         return 1;
 
     if (STRCMP(argv[1], ==, "ls"))
index 149593431373c52dc3f56a41511cbfb9a4cf220f..c7246f1f2d4c4206292fb69ac3c063d5dd39865b 100644 (file)
@@ -209,7 +209,7 @@ int configinit(AFPObj *obj)
 
     /* Now register with zeroconf, we also need the volumes for that */
     if (! (obj->options.flags & OPTION_NOZEROCONF)) {
-        load_volumes(obj);
+        load_volumes(obj, lv_all);
         zeroconf_register(obj);
     }
 
index b64d49140f402fc1ddb0f1f0205263563e9808d1..eb4b19f35d5153302e189b8911bb6d853149ed7d 100644 (file)
@@ -533,7 +533,7 @@ void afp_over_dsi(AFPObj *obj)
 
         if (reload_request) {
             reload_request = 0;
-            load_volumes(AFPobj);
+            load_volumes(AFPobj, lv_none);
         }
 
         /* The first SIGINT enables debugging, the next restores the config */
index 07cfb42b293f199e9c2eeec4a74975c0a500aeda..a3ee79278763d198029af7c35a0be3260cae17a2 100644 (file)
@@ -532,7 +532,7 @@ int afp_getsrvrparms(AFPObj *obj, char *ibuf _U_, size_t ibuflen _U_, char *rbuf
     size_t      len;
     uint32_t    aint;
 
-    load_volumes(obj);
+    load_volumes(obj, lv_none);
 
     data = rbuf + 5;
     for ( vcnt = 0, volume = getvolumes(); volume && vcnt < 255; volume = volume->v_next ) {
@@ -744,7 +744,7 @@ int afp_openvol(AFPObj *obj, char *ibuf, size_t ibuflen _U_, char *rbuf, size_t
     if ((len + 1) & 1) /* pad to an even boundary */
         ibuf++;
 
-    load_volumes(obj);
+    load_volumes(obj, lv_none);
 
     for ( volume = getvolumes(); volume; volume = volume->v_next ) {
         if ( strcasecmp_w( (ucs2_t*) volname, volume->v_name ) == 0 ) {
index 4018eecceb3e3814b030f7f94a5b0cbf883e07d3..266b986ba00da9905c56777b4ac5dff6f50b4625 100644 (file)
@@ -212,7 +212,7 @@ int main(int argc, char **argv)
     else
         setuplog("default:note", "/dev/tty");
 
-    if (load_volumes(&obj) != 0) {
+    if (load_volumes(&obj, lv_all) != 0) {
         dbd_log( LOGSTD, "Couldn't load volumes");
         exit(EXIT_FAILURE);
     }
index 42b398f792c30707ad3c44db9d4e11353696256c..1b991cb8bf39d5f89a86d4f3c849e3d63b4379ce 100644 (file)
@@ -463,7 +463,7 @@ int main(int argc, char *argv[])
     if (afp_config_parse(&obj, "cnid_metad") != 0)
         daemon_exit(1);
 
-    if (load_volumes(&obj) != 0)
+    if (load_volumes(&obj, lv_all) != 0)
         daemon_exit(1);
 
     (void)setlimits();
@@ -565,7 +565,7 @@ int main(int argc, char *argv[])
 
         LOG(log_debug, logtype_cnid, "main: request for volume: %s", volpath);
 
-        if (load_volumes(&obj) != 0) {
+        if (load_volumes(&obj, lv_all) != 0) {
             LOG(log_severe, logtype_cnid, "main: error reloading config");
             goto loop_end;
         }
index 97dcd5579a62735aeeed38a541c3ad39f54464c6..994c8ff698f44776c92b8413e4f344ff38892661 100644 (file)
@@ -515,7 +515,7 @@ int main(int argc, char *argv[])
 
     EC_ZERO( afp_config_parse(&obj, "cnid_dbd") );
 
-    EC_ZERO( load_volumes(&obj) );
+    EC_ZERO( load_volumes(&obj, lv_all) );
     EC_NULL( vol = getvolbypath(&obj, volpath) );
     EC_ZERO( load_charset(vol) );
     pack_setvol(vol);
index 0e5c6554edcd0464cab4b8373a09f867b3b86ae5..4a20d7b787af5547dddd5f24e6b7ee89d26edc41 100644 (file)
@@ -351,7 +351,7 @@ int main(int argc, char **argv)
     if (afp_config_parse(&obj, "netatalk") != 0)
         netatalk_exit(EXITERR_CONF);
 
-    load_volumes(&obj);
+    load_volumes(&obj, lv_all);
 
     event_set_log_callback(libevent_logmsg_cb);
     event_set_fatal_callback(netatalk_exit);
index 858b4f1cd17a1107dbd017023c9c8ef77b2f7f28..5b30e0bf60fdc17c66573ac1669fa87f48989d19 100644 (file)
@@ -23,7 +23,7 @@
 extern int        afp_config_parse(AFPObj *obj, char *processname);
 extern void       afp_config_free(AFPObj *obj);
 extern int        load_charset(struct vol *vol);
-extern int        load_volumes(AFPObj *obj);
+extern int        load_volumes(AFPObj *obj, lv_flags_t flags);
 extern void       unload_volumes(AFPObj *obj);
 extern struct vol *getvolumes(void);
 extern struct vol *getvolbyvid(const uint16_t);
index 7172887a2d489947316df310aa44966277602cc6..e2728908a5010a6ffe388a62c0cecd4ea1d64679 100644 (file)
@@ -102,7 +102,7 @@ struct vol {
 };
 
 /* load_volumes() flags */
-#define LV_ALL (1 << 0)
+typedef enum {lv_none = 0, lv_all = 1} lv_flags_t;
 
 /* volume flags */
 #define AFPVOL_OPEN (1<<0)
index fa6fb8b57ca2084a95bf055af256fffd784b5e33..43d31fb874f54db52969e68ac69a84e546d8d43f 100644 (file)
@@ -1335,12 +1335,10 @@ int load_charset(struct vol *vol)
 /*!
  * Initialize volumes and load ini configfile
  *
- * Depending on the value of obj->uid either access checks are done (!=0) or skipped (=0)
- *
- * @param obj       (r) handle
- * @param delvol_fn (r) callback called for deleted volumes
+ * @param obj      (r) handle
+ * @param flags    (r) flags controlling volume load behaviour
  */
-int load_volumes(AFPObj *obj)
+int load_volumes(AFPObj *obj, lv_flags_t flags)
 {
     EC_INIT;
 
@@ -1363,7 +1361,7 @@ int load_volumes(AFPObj *obj)
         EC_NULL( pwbuf = malloc(bufsize) );
     }
 
-    if (obj->uid) {
+    if (!(flags & lv_all) && obj->uid) {
         ret = getpwuid_r(obj->uid, &pwent, pwbuf, bufsize, &pwresult);
         if (pwresult == NULL) {
             LOG(log_error, logtype_afpd, "load_volumes: getpwuid_r: %s", strerror(errno));
index b25ec4dd9c9fd127a470463e0886d6eb18294fff..56a86e81d1037174e49c20d175e13e161179ac5c 100644 (file)
@@ -67,7 +67,7 @@ int main(int argc, char **argv)
     TEST_int( afp_config_parse(&obj, NULL), 0);
     TEST_int( configinit(&obj), 0);
     TEST( cnid_init() );
-    TEST( load_volumes(&obj) );
+    TEST( load_volumes(&obj, lv_all) );
     TEST_int( dircache_init(8192), 0);
     obj.afp_version = 32;