Return early in case we cannot read the configuration file
This drops one level of indentation
This commit is contained in:
parent
5710dc534c
commit
c69b42d00b
@ -241,126 +241,127 @@ read_userconfig(char const * file)
|
||||
if (file == NULL)
|
||||
file = _PATH_PW_CONF;
|
||||
|
||||
if ((fp = fopen(file, "r")) != NULL) {
|
||||
while ((linelen = getline(&buf, &linecap, fp)) > 0) {
|
||||
if (*buf && (p = strtok(buf, " \t\r\n=")) != NULL && *p != '#') {
|
||||
static char const toks[] = " \t\r\n,=";
|
||||
char *q = strtok(NULL, toks);
|
||||
int i = 0;
|
||||
mode_t *modeset;
|
||||
if ((fp = fopen(file, "r")) == NULL)
|
||||
return (&config);
|
||||
|
||||
while (i < _UC_FIELDS && strcmp(p, kwds[i]) != 0)
|
||||
++i;
|
||||
while ((linelen = getline(&buf, &linecap, fp)) > 0) {
|
||||
if (*buf && (p = strtok(buf, " \t\r\n=")) != NULL && *p != '#') {
|
||||
static char const toks[] = " \t\r\n,=";
|
||||
char *q = strtok(NULL, toks);
|
||||
int i = 0;
|
||||
mode_t *modeset;
|
||||
|
||||
while (i < _UC_FIELDS && strcmp(p, kwds[i]) != 0)
|
||||
++i;
|
||||
#if debugging
|
||||
if (i == _UC_FIELDS)
|
||||
printf("Got unknown kwd `%s' val=`%s'\n", p, q ? q : "");
|
||||
else
|
||||
printf("Got kwd[%s]=%s\n", p, q);
|
||||
if (i == _UC_FIELDS)
|
||||
printf("Got unknown kwd `%s' val=`%s'\n", p, q ? q : "");
|
||||
else
|
||||
printf("Got kwd[%s]=%s\n", p, q);
|
||||
#endif
|
||||
switch (i) {
|
||||
case _UC_DEFAULTPWD:
|
||||
config.default_password = boolean_val(q, 1);
|
||||
break;
|
||||
case _UC_REUSEUID:
|
||||
config.reuse_uids = boolean_val(q, 0);
|
||||
break;
|
||||
case _UC_REUSEGID:
|
||||
config.reuse_gids = boolean_val(q, 0);
|
||||
break;
|
||||
case _UC_NISPASSWD:
|
||||
config.nispasswd = (q == NULL || !boolean_val(q, 1))
|
||||
? NULL : newstr(q);
|
||||
break;
|
||||
case _UC_DOTDIR:
|
||||
config.dotdir = (q == NULL || !boolean_val(q, 1))
|
||||
? NULL : newstr(q);
|
||||
break;
|
||||
switch (i) {
|
||||
case _UC_DEFAULTPWD:
|
||||
config.default_password = boolean_val(q, 1);
|
||||
break;
|
||||
case _UC_REUSEUID:
|
||||
config.reuse_uids = boolean_val(q, 0);
|
||||
break;
|
||||
case _UC_REUSEGID:
|
||||
config.reuse_gids = boolean_val(q, 0);
|
||||
break;
|
||||
case _UC_NISPASSWD:
|
||||
config.nispasswd = (q == NULL || !boolean_val(q, 1))
|
||||
? NULL : newstr(q);
|
||||
break;
|
||||
case _UC_DOTDIR:
|
||||
config.dotdir = (q == NULL || !boolean_val(q, 1))
|
||||
? NULL : newstr(q);
|
||||
break;
|
||||
case _UC_NEWMAIL:
|
||||
config.newmail = (q == NULL || !boolean_val(q, 1))
|
||||
? NULL : newstr(q);
|
||||
break;
|
||||
case _UC_LOGFILE:
|
||||
config.logfile = (q == NULL || !boolean_val(q, 1))
|
||||
? NULL : newstr(q);
|
||||
break;
|
||||
case _UC_HOMEROOT:
|
||||
config.home = (q == NULL || !boolean_val(q, 1))
|
||||
? "/home" : newstr(q);
|
||||
break;
|
||||
case _UC_HOMEMODE:
|
||||
modeset = setmode(q);
|
||||
config.homemode = (q == NULL || !boolean_val(q, 1))
|
||||
? _DEF_DIRMODE : getmode(modeset, _DEF_DIRMODE);
|
||||
free(modeset);
|
||||
break;
|
||||
case _UC_SHELLPATH:
|
||||
config.shelldir = (q == NULL || !boolean_val(q, 1))
|
||||
? "/bin" : newstr(q);
|
||||
break;
|
||||
case _UC_SHELLS:
|
||||
for (i = 0; i < _UC_MAXSHELLS && q != NULL; i++, q = strtok(NULL, toks))
|
||||
system_shells[i] = newstr(q);
|
||||
if (i > 0)
|
||||
while (i < _UC_MAXSHELLS)
|
||||
system_shells[i++] = NULL;
|
||||
break;
|
||||
case _UC_DEFAULTSHELL:
|
||||
config.shell_default = (q == NULL || !boolean_val(q, 1))
|
||||
? (char *) bourne_shell : newstr(q);
|
||||
break;
|
||||
case _UC_DEFAULTGROUP:
|
||||
q = unquote(q);
|
||||
config.default_group = (q == NULL || !boolean_val(q, 1) || GETGRNAM(q) == NULL)
|
||||
? NULL : newstr(q);
|
||||
break;
|
||||
case _UC_EXTRAGROUPS:
|
||||
for (i = 0; q != NULL; q = strtok(NULL, toks)) {
|
||||
if (extendarray(&config.groups, &config.numgroups, i + 2) != -1)
|
||||
config.groups[i++] = newstr(q);
|
||||
}
|
||||
if (i > 0)
|
||||
while (i < config.numgroups)
|
||||
config.groups[i++] = NULL;
|
||||
break;
|
||||
case _UC_DEFAULTCLASS:
|
||||
config.default_class = (q == NULL || !boolean_val(q, 1))
|
||||
? NULL : newstr(q);
|
||||
break;
|
||||
case _UC_MINUID:
|
||||
if ((q = unquote(q)) != NULL && isdigit(*q))
|
||||
config.min_uid = (uid_t) atol(q);
|
||||
break;
|
||||
case _UC_MAXUID:
|
||||
if ((q = unquote(q)) != NULL && isdigit(*q))
|
||||
config.max_uid = (uid_t) atol(q);
|
||||
break;
|
||||
case _UC_MINGID:
|
||||
if ((q = unquote(q)) != NULL && isdigit(*q))
|
||||
config.min_gid = (gid_t) atol(q);
|
||||
break;
|
||||
case _UC_MAXGID:
|
||||
if ((q = unquote(q)) != NULL && isdigit(*q))
|
||||
config.max_gid = (gid_t) atol(q);
|
||||
break;
|
||||
case _UC_EXPIRE:
|
||||
if ((q = unquote(q)) != NULL && isdigit(*q))
|
||||
config.expire_days = atoi(q);
|
||||
break;
|
||||
case _UC_PASSWORD:
|
||||
if ((q = unquote(q)) != NULL && isdigit(*q))
|
||||
config.password_days = atoi(q);
|
||||
break;
|
||||
case _UC_FIELDS:
|
||||
case _UC_NONE:
|
||||
break;
|
||||
config.newmail = (q == NULL || !boolean_val(q, 1))
|
||||
? NULL : newstr(q);
|
||||
break;
|
||||
case _UC_LOGFILE:
|
||||
config.logfile = (q == NULL || !boolean_val(q, 1))
|
||||
? NULL : newstr(q);
|
||||
break;
|
||||
case _UC_HOMEROOT:
|
||||
config.home = (q == NULL || !boolean_val(q, 1))
|
||||
? "/home" : newstr(q);
|
||||
break;
|
||||
case _UC_HOMEMODE:
|
||||
modeset = setmode(q);
|
||||
config.homemode = (q == NULL || !boolean_val(q, 1))
|
||||
? _DEF_DIRMODE : getmode(modeset, _DEF_DIRMODE);
|
||||
free(modeset);
|
||||
break;
|
||||
case _UC_SHELLPATH:
|
||||
config.shelldir = (q == NULL || !boolean_val(q, 1))
|
||||
? "/bin" : newstr(q);
|
||||
break;
|
||||
case _UC_SHELLS:
|
||||
for (i = 0; i < _UC_MAXSHELLS && q != NULL; i++, q = strtok(NULL, toks))
|
||||
system_shells[i] = newstr(q);
|
||||
if (i > 0)
|
||||
while (i < _UC_MAXSHELLS)
|
||||
system_shells[i++] = NULL;
|
||||
break;
|
||||
case _UC_DEFAULTSHELL:
|
||||
config.shell_default = (q == NULL || !boolean_val(q, 1))
|
||||
? (char *) bourne_shell : newstr(q);
|
||||
break;
|
||||
case _UC_DEFAULTGROUP:
|
||||
q = unquote(q);
|
||||
config.default_group = (q == NULL || !boolean_val(q, 1) || GETGRNAM(q) == NULL)
|
||||
? NULL : newstr(q);
|
||||
break;
|
||||
case _UC_EXTRAGROUPS:
|
||||
for (i = 0; q != NULL; q = strtok(NULL, toks)) {
|
||||
if (extendarray(&config.groups, &config.numgroups, i + 2) != -1)
|
||||
config.groups[i++] = newstr(q);
|
||||
}
|
||||
if (i > 0)
|
||||
while (i < config.numgroups)
|
||||
config.groups[i++] = NULL;
|
||||
break;
|
||||
case _UC_DEFAULTCLASS:
|
||||
config.default_class = (q == NULL || !boolean_val(q, 1))
|
||||
? NULL : newstr(q);
|
||||
break;
|
||||
case _UC_MINUID:
|
||||
if ((q = unquote(q)) != NULL && isdigit(*q))
|
||||
config.min_uid = (uid_t) atol(q);
|
||||
break;
|
||||
case _UC_MAXUID:
|
||||
if ((q = unquote(q)) != NULL && isdigit(*q))
|
||||
config.max_uid = (uid_t) atol(q);
|
||||
break;
|
||||
case _UC_MINGID:
|
||||
if ((q = unquote(q)) != NULL && isdigit(*q))
|
||||
config.min_gid = (gid_t) atol(q);
|
||||
break;
|
||||
case _UC_MAXGID:
|
||||
if ((q = unquote(q)) != NULL && isdigit(*q))
|
||||
config.max_gid = (gid_t) atol(q);
|
||||
break;
|
||||
case _UC_EXPIRE:
|
||||
if ((q = unquote(q)) != NULL && isdigit(*q))
|
||||
config.expire_days = atoi(q);
|
||||
break;
|
||||
case _UC_PASSWORD:
|
||||
if ((q = unquote(q)) != NULL && isdigit(*q))
|
||||
config.password_days = atoi(q);
|
||||
break;
|
||||
case _UC_FIELDS:
|
||||
case _UC_NONE:
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (linecap > 0)
|
||||
free(buf);
|
||||
fclose(fp);
|
||||
}
|
||||
return &config;
|
||||
return (&config);
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user