{
const char *result;
- if ((!(result = iniparser_getstring(conf, vol, opt, NULL))) && (defsec != NULL))
- result = iniparser_getstring(conf, defsec, opt, NULL);
+ if ((!(result = atalk_iniparser_getstring(conf, vol, opt, NULL))) && (defsec != NULL))
+ result = atalk_iniparser_getstring(conf, defsec, opt, NULL);
if (result == NULL)
result = defval;
{
int result;
- if (((result = iniparser_getboolean(conf, vol, opt, -1)) == -1) && (defsec != NULL))
- result = iniparser_getboolean(conf, defsec, opt, -1);
+ if (((result = atalk_iniparser_getboolean(conf, vol, opt, -1)) == -1) && (defsec != NULL))
+ result = atalk_iniparser_getboolean(conf, defsec, opt, -1);
if (result == -1)
result = defval;
if(tmpname[i] == '/') tmpname[i] = ':';
bstring dbpath;
- EC_NULL( val = iniparser_getstring(obj->iniconfig, INISEC_GLOBAL, "vol dbpath", _PATH_STATEDIR "CNID/") );
+ EC_NULL( val = atalk_iniparser_getstring(obj->iniconfig, INISEC_GLOBAL, "vol dbpath", _PATH_STATEDIR "CNID/") );
EC_NULL( dbpath = bformat("%s/%s/", val, tmpname) );
EC_NULL( volume->v_dbpath = strdup(cfrombstr(dbpath)) );
bdestroy(dbpath);
volume->v_flags |= AFPVOL_NOV2TOEACONV;
if (getoption_bool(obj->iniconfig, section, "follow symlinks", preset, 0))
volume->v_flags |= AFPVOL_FOLLOWSYM;
+ if (getoption_bool(obj->iniconfig, section, "spotlight", preset, obj->options.flags & OPTION_SPOTLIGHT_VOL)) {
+ volume->v_flags |= AFPVOL_SPOTLIGHT;
+ obj->options.flags |= OPTION_SPOTLIGHT;
+ }
if (getoption_bool(obj->iniconfig, section, "preexec close", preset, 0))
volume->v_preexec_close = 1;
initvol_vfs(volume);
/* get/store uuid from file in afpd master*/
- if (!(pwd) && (volume->v_flags & AFPVOL_TM)) {
- char *uuid = get_vol_uuid(obj, volume->v_localname);
- if (!uuid) {
- LOG(log_error, logtype_afpd, "Volume '%s': couldn't get UUID",
- volume->v_localname);
- } else {
- volume->v_uuid = uuid;
- LOG(log_debug, logtype_afpd, "Volume '%s': UUID '%s'",
- volume->v_localname, volume->v_uuid);
- }
+ become_root();
+ char *uuid = get_vol_uuid(obj, volume->v_localname);
+ unbecome_root();
+ if (!uuid) {
+ LOG(log_error, logtype_afpd, "Volume '%s': couldn't get UUID",
+ volume->v_localname);
+ } else {
+ volume->v_uuid = uuid;
+ LOG(log_debug, logtype_afpd, "Volume '%s': UUID '%s'",
+ volume->v_localname, volume->v_uuid);
}
/* no errors shall happen beyond this point because the cleanup would mess the volume chain up */
LOG(log_debug, logtype_afpd, "readvolfile: BEGIN");
- int secnum = iniparser_getnsec(obj->iniconfig);
+ int secnum = atalk_iniparser_getnsec(obj->iniconfig);
LOG(log_debug, logtype_afpd, "readvolfile: sections: %d", secnum);
const char *secname;
- if ((default_preset = iniparser_getstring(obj->iniconfig, INISEC_GLOBAL, "vol preset", NULL))) {
+ if ((default_preset = atalk_iniparser_getstring(obj->iniconfig, INISEC_GLOBAL, "vol preset", NULL))) {
LOG(log_debug, logtype_afpd, "readvolfile: default_preset: %s", default_preset);
}
for (i = 0; i < secnum; i++) {
- secname = iniparser_getsecname(obj->iniconfig, i);
+ secname = atalk_iniparser_getsecname(obj->iniconfig, i);
if (!vol_section(secname))
continue;
continue;
/* check if user home matches our "basedir regex" */
- if ((basedir = iniparser_getstring(obj->iniconfig, INISEC_HOMES, "basedir regex", NULL)) == NULL) {
+ if ((basedir = atalk_iniparser_getstring(obj->iniconfig, INISEC_HOMES, "basedir regex", NULL)) == NULL) {
LOG(log_error, logtype_afpd, "\"basedir regex =\" must be defined in [Homes] section");
continue;
}
continue;
}
- if ((p = iniparser_getstring(obj->iniconfig, INISEC_HOMES, "path", NULL))) {
+ if ((p = atalk_iniparser_getstring(obj->iniconfig, INISEC_HOMES, "path", NULL))) {
strlcat(tmp, "/", MAXPATHLEN);
strlcat(tmp, p, MAXPATHLEN);
}
} else {
/* Get path */
- if ((p = iniparser_getstring(obj->iniconfig, secname, "path", NULL)) == NULL)
+ if ((p = atalk_iniparser_getstring(obj->iniconfig, secname, "path", NULL)) == NULL)
continue;
strlcpy(tmp, p, MAXPATHLEN);
}
/* do variable substitution for volume name */
if (STRCMP(secname, ==, INISEC_HOMES)) {
- p = iniparser_getstring(obj->iniconfig, INISEC_HOMES, "home name", "$u's home");
+ p = atalk_iniparser_getstring(obj->iniconfig, INISEC_HOMES, "home name", "$u's home");
if (strstr(p, "$u") == NULL) {
LOG(log_warning, logtype_afpd, "home name must contain $u.");
p = "$u's home";
if (volxlate(obj, volname, sizeof(volname) - 1, tmp, pwent, path, NULL) == NULL)
continue;
- preset = iniparser_getstring(obj->iniconfig, secname, "vol preset", NULL);
+ preset = atalk_iniparser_getstring(obj->iniconfig, secname, "vol preset", NULL);
if ((realvolpath = realpath_safe(path)) == NULL)
continue;
}
if (obj->iniconfig)
- iniparser_freedict(obj->iniconfig);
+ atalk_iniparser_freedict(obj->iniconfig);
LOG(log_debug, logtype_afpd, "load_volumes: loading: %s", obj->options.configfile);
- obj->iniconfig = iniparser_load(obj->options.configfile);
+ obj->iniconfig = atalk_iniparser_load(obj->options.configfile);
EC_ZERO_LOG( readvolfile(obj, pwent) );
if (!have_uservol) /* (2) */
EC_FAIL_LOG("getvolbypath(\"%s\"): no volume for path", path);
- int secnum = iniparser_getnsec(obj->iniconfig);
+ int secnum = atalk_iniparser_getnsec(obj->iniconfig);
for (int i = 0; i < secnum; i++) {
- secname = iniparser_getsecname(obj->iniconfig, i);
+ secname = atalk_iniparser_getsecname(obj->iniconfig, i);
if (STRCMP(secname, ==, INISEC_HOMES))
break;
}
EC_FAIL_LOG("getvolbypath(\"%s\"): no volume for path", path);
/* (3) */
- EC_NULL_LOG( basedir = iniparser_getstring(obj->iniconfig, INISEC_HOMES, "basedir regex", NULL) );
+ EC_NULL_LOG( basedir = atalk_iniparser_getstring(obj->iniconfig, INISEC_HOMES, "basedir regex", NULL) );
LOG(log_debug, logtype_afpd, "getvolbypath: user home section: '%s', basedir: '%s'", secname, basedir);
if (regexerr != 0 && (regexerr = regcomp(®, basedir, REG_EXTENDED)) != 0) {
strlcat(tmpbuf, "/", MAXPATHLEN);
/* (6) */
- if ((subpathconfig = iniparser_getstring(obj->iniconfig, INISEC_HOMES, "path", NULL))) {
+ if ((subpathconfig = atalk_iniparser_getstring(obj->iniconfig, INISEC_HOMES, "path", NULL))) {
/*
if (!subpath || strncmp(subpathconfig, subpath, strlen(subpathconfig)) != 0) {
EC_FAIL;
path, user, pw->pw_dir, realvolpath);
/* do variable substitution for volume name */
- p = iniparser_getstring(obj->iniconfig, INISEC_HOMES, "home name", "$u's home");
+ p = atalk_iniparser_getstring(obj->iniconfig, INISEC_HOMES, "home name", "$u's home");
if (strstr(p, "$u") == NULL)
p = "$u's home";
strlcpy(tmpbuf, p, AFPVOL_U8MNAMELEN);
EC_NULL_LOG( volxlate(obj, volname, sizeof(volname) - 1, tmpbuf, pw, realvolpath, NULL) );
const char *preset, *default_preset;
- default_preset = iniparser_getstring(obj->iniconfig, INISEC_GLOBAL, "vol preset", NULL);
- preset = iniparser_getstring(obj->iniconfig, INISEC_HOMES, "vol preset", NULL);
+ default_preset = atalk_iniparser_getstring(obj->iniconfig, INISEC_GLOBAL, "vol preset", NULL);
+ preset = atalk_iniparser_getstring(obj->iniconfig, INISEC_HOMES, "vol preset", NULL);
vol = creatvol(obj, pw, INISEC_HOMES, volname, realvolpath, preset ? preset : default_preset ? default_preset : NULL);
options->configfile = AFPObj->cmdlineconfigfile ? strdup(AFPObj->cmdlineconfigfile) : strdup(_PATH_CONFDIR "afp.conf");
options->sigconffile = strdup(_PATH_STATEDIR "afp_signature.conf");
options->uuidconf = strdup(_PATH_STATEDIR "afp_voluuid.conf");
+#ifdef HAVE_TRACKER_SPARQL
+ options->slmod_path = strdup(_PATH_AFPDUAMPATH "slmod_sparql.so");
+#endif
+#ifdef HAVE_TRACKER_RDF
+ options->slmod_path = strdup(_PATH_AFPDUAMPATH "slmod_rdf.so");
+#endif
options->flags = OPTION_UUID | AFPObj->cmdlineflags;
- if ((config = iniparser_load(AFPObj->options.configfile)) == NULL)
+ if ((config = atalk_iniparser_load(AFPObj->options.configfile)) == NULL)
return -1;
AFPObj->iniconfig = config;
/* [Global] */
- options->logconfig = iniparser_getstrdup(config, INISEC_GLOBAL, "log level", "default:note");
- options->logfile = iniparser_getstrdup(config, INISEC_GLOBAL, "log file", NULL);
+ options->logconfig = atalk_iniparser_getstrdup(config, INISEC_GLOBAL, "log level", "default:note");
+ options->logfile = atalk_iniparser_getstrdup(config, INISEC_GLOBAL, "log file", NULL);
setuplog(options->logconfig, options->logfile);
/* "server options" boolean options */
- if (!iniparser_getboolean(config, INISEC_GLOBAL, "zeroconf", 1))
+ if (!atalk_iniparser_getboolean(config, INISEC_GLOBAL, "zeroconf", 1))
options->flags |= OPTION_NOZEROCONF;
- if (iniparser_getboolean(config, INISEC_GLOBAL, "advertise ssh", 0))
+ if (atalk_iniparser_getboolean(config, INISEC_GLOBAL, "advertise ssh", 0))
options->flags |= OPTION_ANNOUNCESSH;
- if (iniparser_getboolean(config, INISEC_GLOBAL, "close vol", 0))
+ if (atalk_iniparser_getboolean(config, INISEC_GLOBAL, "close vol", 0))
options->flags |= OPTION_CLOSEVOL;
- if (!iniparser_getboolean(config, INISEC_GLOBAL, "client polling", 0))
+ if (!atalk_iniparser_getboolean(config, INISEC_GLOBAL, "client polling", 0))
options->flags |= OPTION_SERVERNOTIF;
- if (!iniparser_getboolean(config, INISEC_GLOBAL, "use sendfile", 1))
+ if (!atalk_iniparser_getboolean(config, INISEC_GLOBAL, "use sendfile", 1))
options->flags |= OPTION_NOSENDFILE;
- if (iniparser_getboolean(config, INISEC_GLOBAL, "solaris share reservations", 1))
+ if (atalk_iniparser_getboolean(config, INISEC_GLOBAL, "solaris share reservations", 1))
options->flags |= OPTION_SHARE_RESERV;
- if (iniparser_getboolean(config, INISEC_GLOBAL, "afpstats", 0))
+ if (atalk_iniparser_getboolean(config, INISEC_GLOBAL, "afpstats", 0))
options->flags |= OPTION_DBUS_AFPSTATS;
- if (iniparser_getboolean(config, INISEC_GLOBAL, "afp read locks", 0))
+ if (atalk_iniparser_getboolean(config, INISEC_GLOBAL, "afp read locks", 0))
options->flags |= OPTION_AFP_READ_LOCK;
- if (iniparser_getboolean(config, INISEC_GLOBAL, "spotlight", 0))
++ if (atalk_iniparser_getboolean(config, INISEC_GLOBAL, "spotlight", 0))
+ options->flags |= OPTION_SPOTLIGHT_VOL;
- if (!iniparser_getboolean(config, INISEC_GLOBAL, "save password", 1))
+ if (!atalk_iniparser_getboolean(config, INISEC_GLOBAL, "save password", 1))
options->passwdbits |= PASSWD_NOSAVE;
- if (iniparser_getboolean(config, INISEC_GLOBAL, "set password", 0))
+ if (atalk_iniparser_getboolean(config, INISEC_GLOBAL, "set password", 0))
options->passwdbits |= PASSWD_SET;
/* figure out options w values */
- options->loginmesg = iniparser_getstrdup(config, INISEC_GLOBAL, "login message", NULL);
- options->guest = iniparser_getstrdup(config, INISEC_GLOBAL, "guest account", "nobody");
- options->extmapfile = iniparser_getstrdup(config, INISEC_GLOBAL, "extmap file", _PATH_CONFDIR "extmap.conf");
- options->passwdfile = iniparser_getstrdup(config, INISEC_GLOBAL, "passwd file", _PATH_AFPDPWFILE);
- options->uampath = iniparser_getstrdup(config, INISEC_GLOBAL, "uam path", _PATH_AFPDUAMPATH);
- options->uamlist = iniparser_getstrdup(config, INISEC_GLOBAL, "uam list", "uams_dhx.so uams_dhx2.so");
- options->port = iniparser_getstrdup(config, INISEC_GLOBAL, "afp port", "548");
- options->signatureopt = iniparser_getstrdup(config, INISEC_GLOBAL, "signature", "");
- options->k5service = iniparser_getstrdup(config, INISEC_GLOBAL, "k5 service", NULL);
- options->k5realm = iniparser_getstrdup(config, INISEC_GLOBAL, "k5 realm", NULL);
- options->listen = iniparser_getstrdup(config, INISEC_GLOBAL, "afp listen", NULL);
- options->interfaces = iniparser_getstrdup(config, INISEC_GLOBAL, "afp interfaces", NULL);
- options->ntdomain = iniparser_getstrdup(config, INISEC_GLOBAL, "nt domain", NULL);
- options->addomain = iniparser_getstrdup(config, INISEC_GLOBAL, "ad domain", NULL);
- options->ntseparator = iniparser_getstrdup(config, INISEC_GLOBAL, "nt separator", NULL);
- options->mimicmodel = iniparser_getstrdup(config, INISEC_GLOBAL, "mimic model", NULL);
- options->adminauthuser = iniparser_getstrdup(config, INISEC_GLOBAL, "admin auth user",NULL);
- options->connections = iniparser_getint (config, INISEC_GLOBAL, "max connections",200);
- options->passwdminlen = iniparser_getint (config, INISEC_GLOBAL, "passwd minlen", 0);
- options->tickleval = iniparser_getint (config, INISEC_GLOBAL, "tickleval", 30);
- options->timeout = iniparser_getint (config, INISEC_GLOBAL, "timeout", 4);
- options->dsireadbuf = iniparser_getint (config, INISEC_GLOBAL, "dsireadbuf", 12);
- options->server_quantum = iniparser_getint (config, INISEC_GLOBAL, "server quantum", DSI_SERVQUANT_DEF);
- options->volnamelen = iniparser_getint (config, INISEC_GLOBAL, "volnamelen", 80);
- options->dircachesize = iniparser_getint (config, INISEC_GLOBAL, "dircachesize", DEFAULT_MAX_DIRCACHE_SIZE);
- options->tcp_sndbuf = iniparser_getint (config, INISEC_GLOBAL, "tcpsndbuf", 0);
- options->tcp_rcvbuf = iniparser_getint (config, INISEC_GLOBAL, "tcprcvbuf", 0);
- options->fce_fmodwait = iniparser_getint (config, INISEC_GLOBAL, "fce holdfmod", 60);
- options->sleep = iniparser_getint (config, INISEC_GLOBAL, "sleep time", 10);
- options->disconnected = iniparser_getint (config, INISEC_GLOBAL, "disconnect time",24);
-
- p = iniparser_getstring(config, INISEC_GLOBAL, "map acls", "rights");
+ options->loginmesg = atalk_iniparser_getstrdup(config, INISEC_GLOBAL, "login message", NULL);
+ options->guest = atalk_iniparser_getstrdup(config, INISEC_GLOBAL, "guest account", "nobody");
+ options->extmapfile = atalk_iniparser_getstrdup(config, INISEC_GLOBAL, "extmap file", _PATH_CONFDIR "extmap.conf");
+ options->passwdfile = atalk_iniparser_getstrdup(config, INISEC_GLOBAL, "passwd file", _PATH_AFPDPWFILE);
+ options->uampath = atalk_iniparser_getstrdup(config, INISEC_GLOBAL, "uam path", _PATH_AFPDUAMPATH);
+ options->uamlist = atalk_iniparser_getstrdup(config, INISEC_GLOBAL, "uam list", "uams_dhx.so uams_dhx2.so");
+ options->port = atalk_iniparser_getstrdup(config, INISEC_GLOBAL, "afp port", "548");
+ options->signatureopt = atalk_iniparser_getstrdup(config, INISEC_GLOBAL, "signature", "");
+ options->k5service = atalk_iniparser_getstrdup(config, INISEC_GLOBAL, "k5 service", NULL);
+ options->k5realm = atalk_iniparser_getstrdup(config, INISEC_GLOBAL, "k5 realm", NULL);
+ options->listen = atalk_iniparser_getstrdup(config, INISEC_GLOBAL, "afp listen", NULL);
+ options->interfaces = atalk_iniparser_getstrdup(config, INISEC_GLOBAL, "afp interfaces", NULL);
+ options->ntdomain = atalk_iniparser_getstrdup(config, INISEC_GLOBAL, "nt domain", NULL);
+ options->addomain = atalk_iniparser_getstrdup(config, INISEC_GLOBAL, "ad domain", NULL);
+ options->ntseparator = atalk_iniparser_getstrdup(config, INISEC_GLOBAL, "nt separator", NULL);
+ options->mimicmodel = atalk_iniparser_getstrdup(config, INISEC_GLOBAL, "mimic model", NULL);
+ options->adminauthuser = atalk_iniparser_getstrdup(config, INISEC_GLOBAL, "admin auth user",NULL);
+ options->connections = atalk_iniparser_getint (config, INISEC_GLOBAL, "max connections",200);
+ options->passwdminlen = atalk_iniparser_getint (config, INISEC_GLOBAL, "passwd minlen", 0);
+ options->tickleval = atalk_iniparser_getint (config, INISEC_GLOBAL, "tickleval", 30);
+ options->timeout = atalk_iniparser_getint (config, INISEC_GLOBAL, "timeout", 4);
+ options->dsireadbuf = atalk_iniparser_getint (config, INISEC_GLOBAL, "dsireadbuf", 12);
+ options->server_quantum = atalk_iniparser_getint (config, INISEC_GLOBAL, "server quantum", DSI_SERVQUANT_DEF);
+ options->volnamelen = atalk_iniparser_getint (config, INISEC_GLOBAL, "volnamelen", 80);
+ options->dircachesize = atalk_iniparser_getint (config, INISEC_GLOBAL, "dircachesize", DEFAULT_MAX_DIRCACHE_SIZE);
+ options->tcp_sndbuf = atalk_iniparser_getint (config, INISEC_GLOBAL, "tcpsndbuf", 0);
+ options->tcp_rcvbuf = atalk_iniparser_getint (config, INISEC_GLOBAL, "tcprcvbuf", 0);
+ options->fce_fmodwait = atalk_iniparser_getint (config, INISEC_GLOBAL, "fce holdfmod", 60);
+ options->sleep = atalk_iniparser_getint (config, INISEC_GLOBAL, "sleep time", 10);
+ options->disconnected = atalk_iniparser_getint (config, INISEC_GLOBAL, "disconnect time",24);
+
+ p = atalk_iniparser_getstring(config, INISEC_GLOBAL, "map acls", "rights");
if (STRCMP(p, ==, "rights"))
options->flags |= OPTION_ACL2MACCESS;
else if (STRCMP(p, ==, "mode"))
}
}
- if ((p = iniparser_getstring(config, INISEC_GLOBAL, "hostname", NULL))) {
+ if ((p = atalk_iniparser_getstring(config, INISEC_GLOBAL, "hostname", NULL))) {
EC_NULL_LOG( options->hostname = strdup(p) );
} else {
if (gethostname(val, sizeof(val)) < 0 ) {
options->hostname = strdup(val);
}
- if ((p = iniparser_getstring(config, INISEC_GLOBAL, "k5 keytab", NULL))) {
+ if ((p = atalk_iniparser_getstring(config, INISEC_GLOBAL, "k5 keytab", NULL))) {
EC_NULL_LOG( options->k5keytab = malloc(strlen(p) + 14) );
snprintf(options->k5keytab, strlen(p) + 14, "KRB5_KTNAME=%s", p);
putenv(options->k5keytab);
}
#ifdef ADMIN_GRP
- if ((p = iniparser_getstring(config, INISEC_GLOBAL, "admin group", NULL))) {
+ if ((p = atalk_iniparser_getstring(config, INISEC_GLOBAL, "admin group", NULL))) {
struct group *gr = getgrnam(p);
if (gr != NULL)
options->admingid = gr->gr_gid;
}
#endif /* ADMIN_GRP */
- q = iniparser_getstrdup(config, INISEC_GLOBAL, "cnid server", "localhost:4700");
+ q = atalk_iniparser_getstrdup(config, INISEC_GLOBAL, "cnid server", "localhost:4700");
r = strrchr(q, ':');
if (r)
*r = 0;
if (q)
free(q);
- if ((q = iniparser_getstrdup(config, INISEC_GLOBAL, "fqdn", NULL))) {
+ if ((q = atalk_iniparser_getstrdup(config, INISEC_GLOBAL, "fqdn", NULL))) {
/* do a little checking for the domain name. */
r = strchr(q, ':');
if (r)
/* Charset Options */
/* unix charset is in [G] only */
- if (!(p = iniparser_getstring(config, INISEC_GLOBAL, "unix charset", NULL))) {
+ if (!(p = atalk_iniparser_getstring(config, INISEC_GLOBAL, "unix charset", NULL))) {
options->unixcodepage = strdup("UTF8");
set_charset_name(CH_UNIX, "UTF8");
} else {
LOG(log_debug, logtype_afpd, "Global unix charset is %s", options->unixcodepage);
/* vol charset is in [G] and [V] */
- if (!(p = iniparser_getstring(config, INISEC_GLOBAL, "vol charset", NULL))) {
+ if (!(p = atalk_iniparser_getstring(config, INISEC_GLOBAL, "vol charset", NULL))) {
options->volcodepage = strdup(options->unixcodepage);
} else {
if (strcasecmp(p, "UTF-8") == 0) {
LOG(log_debug, logtype_afpd, "Global vol charset is %s", options->volcodepage);
/* mac charset is in [G] and [V] */
- if (!(p = iniparser_getstring(config, INISEC_GLOBAL, "mac charset", NULL))) {
+ if (!(p = atalk_iniparser_getstring(config, INISEC_GLOBAL, "mac charset", NULL))) {
options->maccodepage = strdup("MAC_ROMAN");
set_charset_name(CH_MAC, "MAC_ROMAN");
} else {
CONFIG_ARG_FREE(obj->options.Cnid_port);
if (obj->options.fqdn)
CONFIG_ARG_FREE(obj->options.fqdn);
+ if (obj->options.slmod_path)
+ CONFIG_ARG_FREE(obj->options.slmod_path);
if (obj->options.unixcodepage)
CONFIG_ARG_FREE(obj->options.unixcodepage);
/* Free everything called from afp_config_parse() */
free_extmap();
- iniparser_freedict(obj->iniconfig);
+ atalk_iniparser_freedict(obj->iniconfig);
free_charset_names();
}