X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=libatalk%2Futil%2Fnetatalk_conf.c;h=6d252e83db772af8dde924f1d1cad49d2fb4671b;hb=94afc9de97f2118bd28f6971bdec009e4e380b7a;hp=cd550be08b12a5e8c5ce417f197c886050997cdc;hpb=b45fbee17198dc7cfe4a95f8f8ee94b11c345a37;p=netatalk.git diff --git a/libatalk/util/netatalk_conf.c b/libatalk/util/netatalk_conf.c index cd550be0..6d252e83 100644 --- a/libatalk/util/netatalk_conf.c +++ b/libatalk/util/netatalk_conf.c @@ -989,6 +989,7 @@ static int readvolfile(AFPObj *obj, const struct passwd *pwent) EC_INIT; static int regexerr = -1; static regex_t reg; + char *realpw_dir; char *realvolpath; char volname[AFPVOL_U8MNAMELEN + 1]; char tmp[MAXPATHLEN + 1], tmp2[MAXPATHLEN + 1]; @@ -1022,6 +1023,8 @@ static int readvolfile(AFPObj *obj, const struct passwd *pwent) if (pwent->pw_dir == NULL || STRCMP("", ==, pwent->pw_dir)) /* no user home */ continue; + if ((realpw_dir = realpath_safe(pwent->pw_dir)) == NULL) + continue; /* check if user home matches our "basedir regex" */ if ((basedir = iniparser_getstring(obj->iniconfig, INISEC_HOMES, "basedir regex", NULL)) == NULL) { @@ -1036,13 +1039,13 @@ static int readvolfile(AFPObj *obj, const struct passwd *pwent) LOG(log_debug, logtype_default, "readvolfile: bad basedir regex: %s", errbuf); } - if (regexec(®, pwent->pw_dir, 1, match, 0) == REG_NOMATCH) { + if (regexec(®, realpw_dir, 1, match, 0) == REG_NOMATCH) { LOG(log_debug, logtype_default, "readvolfile: user home \"%s\" doesn't match basedir regex \"%s\"", - pwent->pw_dir, basedir); + realpw_dir, basedir); continue; } - strlcpy(tmp, pwent->pw_dir, MAXPATHLEN); + strlcpy(tmp, realpw_dir, MAXPATHLEN); strlcat(tmp, "/", MAXPATHLEN); if (p = iniparser_getstring(obj->iniconfig, INISEC_HOMES, "path", NULL)) strlcat(tmp, p, MAXPATHLEN);