diff options
author | Igor Sysoev <igor@sysoev.ru> | 2017-09-06 02:30:23 +0300 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2017-09-06 02:30:23 +0300 |
commit | 22ae3d4ff55ae778688a89c585b5da8eddce6cc0 (patch) | |
tree | c47fedaecb1516abdf54b4a3a206b17fe1fe2ae7 /src | |
parent | f0723995a75d350b82ed0595e68a82b729f42b8f (diff) | |
download | unit-22ae3d4ff55ae778688a89c585b5da8eddce6cc0.tar.gz unit-22ae3d4ff55ae778688a89c585b5da8eddce6cc0.tar.bz2 |
Controller: validating user and group names.
Diffstat (limited to 'src')
-rw-r--r-- | src/nxt_conf_validation.c | 71 |
1 files changed, 67 insertions, 4 deletions
diff --git a/src/nxt_conf_validation.c b/src/nxt_conf_validation.c index 94371ca8..de3d537c 100644 --- a/src/nxt_conf_validation.c +++ b/src/nxt_conf_validation.c @@ -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; +} |