continue;
/* check if user home matches our "basedir regex" */
- if ((basedir = iniparser_getstring(obj->iniconfig, INISEC_HOMES, "basedir regex", NULL)) == NULL)
+ if ((basedir = iniparser_getstring(obj->iniconfig, INISEC_HOMES, "basedir regex", NULL)) == NULL) {
+ LOG(log_error, logtype_afpd, "\"basedir regex =\" must be defined in [Homes] section");
continue;
+ }
LOG(log_debug, logtype_afpd, "readvolfile: basedir regex: '%s'", basedir);
if (regexerr != 0 && (regexerr = regcomp(®, basedir, REG_EXTENDED)) != 0) {
/* do variable substitution for volume name */
if (STRCMP(secname, ==, INISEC_HOMES)) {
- if (p = iniparser_getstring(obj->iniconfig, INISEC_HOMES, "home name", "$u's home"))
- strlcpy(tmp, p, MAXPATHLEN);
- else
- strlcpy(tmp, p, MAXPATHLEN);
+ p = 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";
+ }
+ strlcpy(tmp, p, MAXPATHLEN);
} else {
strlcpy(tmp, secname, AFPVOL_U8MNAMELEN);
}
* @param obj (r) handle
* @param delvol_fn (r) callback called for deleted volumes
*/
-int load_volumes(AFPObj *obj, void (*delvol_fn)(struct vol *))
+int load_volumes(AFPObj *obj, void (*delvol_fn)(const AFPObj *obj, struct vol *))
{
EC_INIT;
int fd = -1;
if (vol->v_deleted) {
LOG(log_debug, logtype_afpd, "load_volumes: deleted: %s", vol->v_localname);
if (delvol_fn)
- delvol_fn(vol);
+ delvol_fn(obj, vol);
vol = Volumes;
}
}
/* do variable substitution for volume name */
p = 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, volpath, 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");
- options->flags = OPTION_ACL2MACCESS | OPTION_UUID | OPTION_SERVERNOTIF | AFPObj->cmdlineflags;
+ options->flags = OPTION_UUID | AFPObj->cmdlineflags;
if ((config = iniparser_load(AFPObj->options.configfile)) == NULL)
return -1;
options->flags |= OPTION_KEEPSESSIONS;
if (iniparser_getboolean(config, INISEC_GLOBAL, "close vol", 0))
options->flags |= OPTION_CLOSEVOL;
- if (!iniparser_getboolean(config, INISEC_GLOBAL, "client polling", 1))
+ if (!iniparser_getboolean(config, INISEC_GLOBAL, "client polling", 0))
options->flags |= OPTION_SERVERNOTIF;
if (!iniparser_getboolean(config, INISEC_GLOBAL, "use sendfile", 1))
options->flags |= OPTION_NOSENDFILE;
+ if (iniparser_getboolean(config, INISEC_GLOBAL, "solaris share reservations", 1))
+ options->flags |= OPTION_SHARE_RESERV;
+ if (iniparser_getboolean(config, INISEC_GLOBAL, "afp read locks", 0))
+ options->flags |= OPTION_AFP_READ_LOCK;
if (!iniparser_getboolean(config, INISEC_GLOBAL, "save password", 1))
options->passwdbits |= PASSWD_NOSAVE;
if (iniparser_getboolean(config, INISEC_GLOBAL, "set password", 0))