Controller: validating user and group names.

This commit is contained in:
Igor Sysoev
2017-09-06 02:30:23 +03:00
parent f0723995a7
commit 22ae3d4ff5

View File

@@ -22,6 +22,9 @@ typedef nxt_int_t (*nxt_conf_vldt_member_t)(nxt_conf_value_t *conf,
nxt_str_t *name,
nxt_conf_value_t *value);
typedef nxt_int_t (*nxt_conf_vldt_system_t)(nxt_conf_value_t *conf, char *name);
static nxt_int_t nxt_conf_vldt_listener(nxt_conf_value_t *conf, nxt_str_t *name,
nxt_conf_value_t *value);
static nxt_int_t nxt_conf_vldt_app_name(nxt_conf_value_t *conf,
@@ -32,6 +35,10 @@ static nxt_int_t nxt_conf_vldt_object(nxt_conf_value_t *conf,
nxt_conf_value_t *value, void *data);
static nxt_int_t nxt_conf_vldt_object_iterator(nxt_conf_value_t *conf,
nxt_conf_value_t *value, void *data);
static nxt_int_t nxt_conf_vldt_system(nxt_conf_value_t *conf,
nxt_conf_value_t *value, void *data);
static nxt_int_t nxt_conf_vldt_user(nxt_conf_value_t *conf, char *name);
static nxt_int_t nxt_conf_vldt_group(nxt_conf_value_t *conf, char *name);
static nxt_conf_vldt_object_t nxt_conf_vldt_root_members[] = {
@@ -72,13 +79,13 @@ static nxt_conf_vldt_object_t nxt_conf_vldt_python_members[] = {
{ nxt_string("user"),
NXT_CONF_STRING,
NULL,
NULL },
nxt_conf_vldt_system,
(void *) &nxt_conf_vldt_user },
{ nxt_string("group"),
NXT_CONF_STRING,
NULL,
NULL },
nxt_conf_vldt_system,
(void *) &nxt_conf_vldt_group },
{ nxt_string("working_directory"),
NXT_CONF_STRING,
@@ -341,3 +348,59 @@ nxt_conf_vldt_object_iterator(nxt_conf_value_t *conf, nxt_conf_value_t *value,
}
}
}
static nxt_int_t
nxt_conf_vldt_system(nxt_conf_value_t *conf, nxt_conf_value_t *value,
void *data)
{
size_t length;
nxt_str_t name;
nxt_conf_vldt_system_t vldt;
char string[32];
vldt = data;
nxt_conf_get_string(value, &name);
length = name.length + 1;
length = nxt_min(length, sizeof(string));
nxt_cpystrn((u_char *) string, name.start, length);
return vldt(conf, string);
}
static nxt_int_t
nxt_conf_vldt_user(nxt_conf_value_t *conf, char *user)
{
struct passwd *pwd;
nxt_errno = 0;
pwd = getpwnam(user);
if (pwd != NULL) {
return NXT_OK;
}
return NXT_ERROR;
}
static nxt_int_t
nxt_conf_vldt_group(nxt_conf_value_t *conf, char *group)
{
struct group *grp;
nxt_errno = 0;
grp = getgrnam(group);
if (grp != NULL) {
return NXT_OK;
}
return NXT_ERROR;
}