setuplog("default:note", "/dev/tty");
- if (load_volumes(&obj) != 0)
+ if (load_volumes(&obj, lv_none) != 0)
return 1;
if (STRCMP(argv[1], ==, "ls"))
/* 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);
}
if (reload_request) {
reload_request = 0;
- load_volumes(AFPobj);
+ load_volumes(AFPobj, lv_none);
}
/* The first SIGINT enables debugging, the next restores the config */
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 ) {
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 ) {
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);
}
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();
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;
}
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);
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);
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);
};
/* 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)
/*!
* 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;
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));
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;