From 980548c882a297d26e67397d0f72e0b991f36bf2 Mon Sep 17 00:00:00 2001 From: Ralph Boehme Date: Fri, 28 Feb 2014 18:56:52 +0100 Subject: [PATCH] Add a flag to load_volumes() that controls load behaviour --- bin/ad/ad.c | 2 +- etc/afpd/afp_config.c | 2 +- etc/afpd/afp_dsi.c | 2 +- etc/afpd/volume.c | 4 ++-- etc/cnid_dbd/cmd_dbd.c | 2 +- etc/cnid_dbd/cnid_metad.c | 4 ++-- etc/cnid_dbd/main.c | 2 +- etc/netatalk/netatalk.c | 2 +- include/atalk/netatalk_conf.h | 2 +- include/atalk/volume.h | 2 +- libatalk/util/netatalk_conf.c | 10 ++++------ test/afpd/test.c | 2 +- 12 files changed, 17 insertions(+), 19 deletions(-) diff --git a/bin/ad/ad.c b/bin/ad/ad.c index 3de3030b..fc8563c0 100644 --- a/bin/ad/ad.c +++ b/bin/ad/ad.c @@ -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")) diff --git a/etc/afpd/afp_config.c b/etc/afpd/afp_config.c index 14959343..c7246f1f 100644 --- a/etc/afpd/afp_config.c +++ b/etc/afpd/afp_config.c @@ -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); } diff --git a/etc/afpd/afp_dsi.c b/etc/afpd/afp_dsi.c index b64d4914..eb4b19f3 100644 --- a/etc/afpd/afp_dsi.c +++ b/etc/afpd/afp_dsi.c @@ -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 */ diff --git a/etc/afpd/volume.c b/etc/afpd/volume.c index 07cfb42b..a3ee7927 100644 --- a/etc/afpd/volume.c +++ b/etc/afpd/volume.c @@ -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 ) { diff --git a/etc/cnid_dbd/cmd_dbd.c b/etc/cnid_dbd/cmd_dbd.c index 4018eecc..266b986b 100644 --- a/etc/cnid_dbd/cmd_dbd.c +++ b/etc/cnid_dbd/cmd_dbd.c @@ -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); } diff --git a/etc/cnid_dbd/cnid_metad.c b/etc/cnid_dbd/cnid_metad.c index 42b398f7..1b991cb8 100644 --- a/etc/cnid_dbd/cnid_metad.c +++ b/etc/cnid_dbd/cnid_metad.c @@ -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; } diff --git a/etc/cnid_dbd/main.c b/etc/cnid_dbd/main.c index 97dcd557..994c8ff6 100644 --- a/etc/cnid_dbd/main.c +++ b/etc/cnid_dbd/main.c @@ -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); diff --git a/etc/netatalk/netatalk.c b/etc/netatalk/netatalk.c index 0e5c6554..4a20d7b7 100644 --- a/etc/netatalk/netatalk.c +++ b/etc/netatalk/netatalk.c @@ -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); diff --git a/include/atalk/netatalk_conf.h b/include/atalk/netatalk_conf.h index 858b4f1c..5b30e0bf 100644 --- a/include/atalk/netatalk_conf.h +++ b/include/atalk/netatalk_conf.h @@ -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); diff --git a/include/atalk/volume.h b/include/atalk/volume.h index 7172887a..e2728908 100644 --- a/include/atalk/volume.h +++ b/include/atalk/volume.h @@ -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) diff --git a/libatalk/util/netatalk_conf.c b/libatalk/util/netatalk_conf.c index fa6fb8b5..43d31fb8 100644 --- a/libatalk/util/netatalk_conf.c +++ b/libatalk/util/netatalk_conf.c @@ -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)); diff --git a/test/afpd/test.c b/test/afpd/test.c index b25ec4dd..56a86e81 100644 --- a/test/afpd/test.c +++ b/test/afpd/test.c @@ -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; -- 2.39.2