Configuration: added checking for presence of mandatory fields.

This commit is contained in:
Valentin Bartenev
2020-07-24 20:25:20 +03:00
parent 2a71a8a9f4
commit 10f90f0d48
3 changed files with 131 additions and 13 deletions

View File

@@ -31,6 +31,11 @@ typedef enum {
|NXT_CONF_VLDT_OBJECT) |NXT_CONF_VLDT_OBJECT)
typedef enum {
NXT_CONF_VLDT_REQUIRED = 1,
} nxt_conf_vldt_flags_t;
typedef nxt_int_t (*nxt_conf_vldt_handler_t)(nxt_conf_validation_t *vldt, typedef nxt_int_t (*nxt_conf_vldt_handler_t)(nxt_conf_validation_t *vldt,
nxt_conf_value_t *value, nxt_conf_value_t *value,
void *data); void *data);
@@ -38,14 +43,15 @@ typedef nxt_int_t (*nxt_conf_vldt_handler_t)(nxt_conf_validation_t *vldt,
typedef struct { typedef struct {
nxt_str_t name; nxt_str_t name;
nxt_conf_vldt_type_t type; nxt_conf_vldt_type_t type:32;
nxt_conf_vldt_flags_t flags:32;
nxt_conf_vldt_handler_t validator; nxt_conf_vldt_handler_t validator;
void *data; void *data;
} nxt_conf_vldt_object_t; } nxt_conf_vldt_object_t;
#define NXT_CONF_VLDT_NEXT(f) { nxt_null_string, 0, NULL, (f) } #define NXT_CONF_VLDT_NEXT(f) { nxt_null_string, 0, 0, NULL, (f) }
#define NXT_CONF_VLDT_END { nxt_null_string, 0, NULL, NULL } #define NXT_CONF_VLDT_END { nxt_null_string, 0, 0, NULL, NULL }
typedef nxt_int_t (*nxt_conf_vldt_member_t)(nxt_conf_validation_t *vldt, typedef nxt_int_t (*nxt_conf_vldt_member_t)(nxt_conf_validation_t *vldt,
@@ -165,16 +171,19 @@ static nxt_int_t nxt_conf_vldt_clone_gidmap(nxt_conf_validation_t *vldt,
static nxt_conf_vldt_object_t nxt_conf_vldt_websocket_members[] = { static nxt_conf_vldt_object_t nxt_conf_vldt_websocket_members[] = {
{ nxt_string("read_timeout"), { nxt_string("read_timeout"),
NXT_CONF_VLDT_INTEGER, NXT_CONF_VLDT_INTEGER,
0,
NULL, NULL,
NULL }, NULL },
{ nxt_string("keepalive_interval"), { nxt_string("keepalive_interval"),
NXT_CONF_VLDT_INTEGER, NXT_CONF_VLDT_INTEGER,
0,
NULL, NULL,
NULL }, NULL },
{ nxt_string("max_frame_size"), { nxt_string("max_frame_size"),
NXT_CONF_VLDT_INTEGER, NXT_CONF_VLDT_INTEGER,
0,
NULL, NULL,
NULL }, NULL },
@@ -185,6 +194,7 @@ static nxt_conf_vldt_object_t nxt_conf_vldt_websocket_members[] = {
static nxt_conf_vldt_object_t nxt_conf_vldt_static_members[] = { static nxt_conf_vldt_object_t nxt_conf_vldt_static_members[] = {
{ nxt_string("mime_types"), { nxt_string("mime_types"),
NXT_CONF_VLDT_OBJECT, NXT_CONF_VLDT_OBJECT,
0,
&nxt_conf_vldt_mtypes, &nxt_conf_vldt_mtypes,
NULL }, NULL },
@@ -195,46 +205,55 @@ static nxt_conf_vldt_object_t nxt_conf_vldt_static_members[] = {
static nxt_conf_vldt_object_t nxt_conf_vldt_http_members[] = { static nxt_conf_vldt_object_t nxt_conf_vldt_http_members[] = {
{ nxt_string("header_read_timeout"), { nxt_string("header_read_timeout"),
NXT_CONF_VLDT_INTEGER, NXT_CONF_VLDT_INTEGER,
0,
NULL, NULL,
NULL }, NULL },
{ nxt_string("body_read_timeout"), { nxt_string("body_read_timeout"),
NXT_CONF_VLDT_INTEGER, NXT_CONF_VLDT_INTEGER,
0,
NULL, NULL,
NULL }, NULL },
{ nxt_string("send_timeout"), { nxt_string("send_timeout"),
NXT_CONF_VLDT_INTEGER, NXT_CONF_VLDT_INTEGER,
0,
NULL, NULL,
NULL }, NULL },
{ nxt_string("idle_timeout"), { nxt_string("idle_timeout"),
NXT_CONF_VLDT_INTEGER, NXT_CONF_VLDT_INTEGER,
0,
NULL, NULL,
NULL }, NULL },
{ nxt_string("body_buffer_size"), { nxt_string("body_buffer_size"),
NXT_CONF_VLDT_INTEGER, NXT_CONF_VLDT_INTEGER,
0,
NULL, NULL,
NULL }, NULL },
{ nxt_string("max_body_size"), { nxt_string("max_body_size"),
NXT_CONF_VLDT_INTEGER, NXT_CONF_VLDT_INTEGER,
0,
NULL, NULL,
NULL }, NULL },
{ nxt_string("body_temp_path"), { nxt_string("body_temp_path"),
NXT_CONF_VLDT_STRING, NXT_CONF_VLDT_STRING,
0,
NULL, NULL,
NULL }, NULL },
{ nxt_string("websocket"), { nxt_string("websocket"),
NXT_CONF_VLDT_OBJECT, NXT_CONF_VLDT_OBJECT,
0,
&nxt_conf_vldt_object, &nxt_conf_vldt_object,
(void *) &nxt_conf_vldt_websocket_members }, (void *) &nxt_conf_vldt_websocket_members },
{ nxt_string("static"), { nxt_string("static"),
NXT_CONF_VLDT_OBJECT, NXT_CONF_VLDT_OBJECT,
0,
&nxt_conf_vldt_object, &nxt_conf_vldt_object,
(void *) &nxt_conf_vldt_static_members }, (void *) &nxt_conf_vldt_static_members },
@@ -245,6 +264,7 @@ static nxt_conf_vldt_object_t nxt_conf_vldt_http_members[] = {
static nxt_conf_vldt_object_t nxt_conf_vldt_setting_members[] = { static nxt_conf_vldt_object_t nxt_conf_vldt_setting_members[] = {
{ nxt_string("http"), { nxt_string("http"),
NXT_CONF_VLDT_OBJECT, NXT_CONF_VLDT_OBJECT,
0,
&nxt_conf_vldt_object, &nxt_conf_vldt_object,
(void *) &nxt_conf_vldt_http_members }, (void *) &nxt_conf_vldt_http_members },
@@ -255,31 +275,37 @@ static nxt_conf_vldt_object_t nxt_conf_vldt_setting_members[] = {
static nxt_conf_vldt_object_t nxt_conf_vldt_root_members[] = { static nxt_conf_vldt_object_t nxt_conf_vldt_root_members[] = {
{ nxt_string("settings"), { nxt_string("settings"),
NXT_CONF_VLDT_OBJECT, NXT_CONF_VLDT_OBJECT,
0,
&nxt_conf_vldt_object, &nxt_conf_vldt_object,
(void *) &nxt_conf_vldt_setting_members }, (void *) &nxt_conf_vldt_setting_members },
{ nxt_string("listeners"), { nxt_string("listeners"),
NXT_CONF_VLDT_OBJECT, NXT_CONF_VLDT_OBJECT,
0,
&nxt_conf_vldt_object_iterator, &nxt_conf_vldt_object_iterator,
(void *) &nxt_conf_vldt_listener }, (void *) &nxt_conf_vldt_listener },
{ nxt_string("routes"), { nxt_string("routes"),
NXT_CONF_VLDT_ARRAY | NXT_CONF_VLDT_OBJECT, NXT_CONF_VLDT_ARRAY | NXT_CONF_VLDT_OBJECT,
0,
&nxt_conf_vldt_routes, &nxt_conf_vldt_routes,
NULL }, NULL },
{ nxt_string("applications"), { nxt_string("applications"),
NXT_CONF_VLDT_OBJECT, NXT_CONF_VLDT_OBJECT,
0,
&nxt_conf_vldt_object_iterator, &nxt_conf_vldt_object_iterator,
(void *) &nxt_conf_vldt_app }, (void *) &nxt_conf_vldt_app },
{ nxt_string("upstreams"), { nxt_string("upstreams"),
NXT_CONF_VLDT_OBJECT, NXT_CONF_VLDT_OBJECT,
0,
&nxt_conf_vldt_object_iterator, &nxt_conf_vldt_object_iterator,
(void *) &nxt_conf_vldt_upstream }, (void *) &nxt_conf_vldt_upstream },
{ nxt_string("access_log"), { nxt_string("access_log"),
NXT_CONF_VLDT_STRING, NXT_CONF_VLDT_STRING,
0,
NULL, NULL,
NULL }, NULL },
@@ -292,6 +318,7 @@ static nxt_conf_vldt_object_t nxt_conf_vldt_root_members[] = {
static nxt_conf_vldt_object_t nxt_conf_vldt_tls_members[] = { static nxt_conf_vldt_object_t nxt_conf_vldt_tls_members[] = {
{ nxt_string("certificate"), { nxt_string("certificate"),
NXT_CONF_VLDT_STRING, NXT_CONF_VLDT_STRING,
0,
&nxt_conf_vldt_certificate, &nxt_conf_vldt_certificate,
NULL }, NULL },
@@ -304,11 +331,13 @@ static nxt_conf_vldt_object_t nxt_conf_vldt_tls_members[] = {
static nxt_conf_vldt_object_t nxt_conf_vldt_listener_members[] = { static nxt_conf_vldt_object_t nxt_conf_vldt_listener_members[] = {
{ nxt_string("pass"), { nxt_string("pass"),
NXT_CONF_VLDT_STRING, NXT_CONF_VLDT_STRING,
0,
&nxt_conf_vldt_pass, &nxt_conf_vldt_pass,
NULL }, NULL },
{ nxt_string("application"), { nxt_string("application"),
NXT_CONF_VLDT_STRING, NXT_CONF_VLDT_STRING,
0,
&nxt_conf_vldt_app_name, &nxt_conf_vldt_app_name,
NULL }, NULL },
@@ -316,6 +345,7 @@ static nxt_conf_vldt_object_t nxt_conf_vldt_listener_members[] = {
{ nxt_string("tls"), { nxt_string("tls"),
NXT_CONF_VLDT_OBJECT, NXT_CONF_VLDT_OBJECT,
0,
&nxt_conf_vldt_object, &nxt_conf_vldt_object,
(void *) &nxt_conf_vldt_tls_members }, (void *) &nxt_conf_vldt_tls_members },
@@ -328,46 +358,55 @@ static nxt_conf_vldt_object_t nxt_conf_vldt_listener_members[] = {
static nxt_conf_vldt_object_t nxt_conf_vldt_match_members[] = { static nxt_conf_vldt_object_t nxt_conf_vldt_match_members[] = {
{ nxt_string("method"), { nxt_string("method"),
NXT_CONF_VLDT_STRING | NXT_CONF_VLDT_ARRAY, NXT_CONF_VLDT_STRING | NXT_CONF_VLDT_ARRAY,
0,
&nxt_conf_vldt_match_patterns, &nxt_conf_vldt_match_patterns,
NULL }, NULL },
{ nxt_string("scheme"), { nxt_string("scheme"),
NXT_CONF_VLDT_STRING, NXT_CONF_VLDT_STRING,
0,
&nxt_conf_vldt_match_scheme_pattern, &nxt_conf_vldt_match_scheme_pattern,
NULL }, NULL },
{ nxt_string("host"), { nxt_string("host"),
NXT_CONF_VLDT_STRING | NXT_CONF_VLDT_ARRAY, NXT_CONF_VLDT_STRING | NXT_CONF_VLDT_ARRAY,
0,
&nxt_conf_vldt_match_patterns, &nxt_conf_vldt_match_patterns,
NULL }, NULL },
{ nxt_string("source"), { nxt_string("source"),
NXT_CONF_VLDT_STRING | NXT_CONF_VLDT_ARRAY, NXT_CONF_VLDT_STRING | NXT_CONF_VLDT_ARRAY,
0,
&nxt_conf_vldt_match_addrs, &nxt_conf_vldt_match_addrs,
NULL }, NULL },
{ nxt_string("destination"), { nxt_string("destination"),
NXT_CONF_VLDT_STRING | NXT_CONF_VLDT_ARRAY, NXT_CONF_VLDT_STRING | NXT_CONF_VLDT_ARRAY,
0,
&nxt_conf_vldt_match_addrs, &nxt_conf_vldt_match_addrs,
NULL }, NULL },
{ nxt_string("uri"), { nxt_string("uri"),
NXT_CONF_VLDT_STRING | NXT_CONF_VLDT_ARRAY, NXT_CONF_VLDT_STRING | NXT_CONF_VLDT_ARRAY,
0,
&nxt_conf_vldt_match_encoded_patterns, &nxt_conf_vldt_match_encoded_patterns,
NULL }, NULL },
{ nxt_string("arguments"), { nxt_string("arguments"),
NXT_CONF_VLDT_OBJECT | NXT_CONF_VLDT_ARRAY, NXT_CONF_VLDT_OBJECT | NXT_CONF_VLDT_ARRAY,
0,
&nxt_conf_vldt_match_encoded_patterns_sets, &nxt_conf_vldt_match_encoded_patterns_sets,
NULL }, NULL },
{ nxt_string("headers"), { nxt_string("headers"),
NXT_CONF_VLDT_OBJECT | NXT_CONF_VLDT_ARRAY, NXT_CONF_VLDT_OBJECT | NXT_CONF_VLDT_ARRAY,
0,
&nxt_conf_vldt_match_patterns_sets, &nxt_conf_vldt_match_patterns_sets,
NULL }, NULL },
{ nxt_string("cookies"), { nxt_string("cookies"),
NXT_CONF_VLDT_OBJECT | NXT_CONF_VLDT_ARRAY, NXT_CONF_VLDT_OBJECT | NXT_CONF_VLDT_ARRAY,
0,
&nxt_conf_vldt_match_patterns_sets, &nxt_conf_vldt_match_patterns_sets,
NULL }, NULL },
@@ -378,6 +417,7 @@ static nxt_conf_vldt_object_t nxt_conf_vldt_match_members[] = {
static nxt_conf_vldt_object_t nxt_conf_vldt_pass_action_members[] = { static nxt_conf_vldt_object_t nxt_conf_vldt_pass_action_members[] = {
{ nxt_string("pass"), { nxt_string("pass"),
NXT_CONF_VLDT_STRING, NXT_CONF_VLDT_STRING,
0,
&nxt_conf_vldt_pass, &nxt_conf_vldt_pass,
NULL }, NULL },
@@ -388,11 +428,13 @@ static nxt_conf_vldt_object_t nxt_conf_vldt_pass_action_members[] = {
static nxt_conf_vldt_object_t nxt_conf_vldt_return_action_members[] = { static nxt_conf_vldt_object_t nxt_conf_vldt_return_action_members[] = {
{ nxt_string("return"), { nxt_string("return"),
NXT_CONF_VLDT_INTEGER, NXT_CONF_VLDT_INTEGER,
0,
&nxt_conf_vldt_return, &nxt_conf_vldt_return,
NULL }, NULL },
{ nxt_string("location"), { nxt_string("location"),
NXT_CONF_VLDT_STRING, NXT_CONF_VLDT_STRING,
0,
NULL, NULL,
NULL }, NULL },
@@ -403,11 +445,13 @@ static nxt_conf_vldt_object_t nxt_conf_vldt_return_action_members[] = {
static nxt_conf_vldt_object_t nxt_conf_vldt_share_action_members[] = { static nxt_conf_vldt_object_t nxt_conf_vldt_share_action_members[] = {
{ nxt_string("share"), { nxt_string("share"),
NXT_CONF_VLDT_STRING, NXT_CONF_VLDT_STRING,
0,
NULL, NULL,
NULL }, NULL },
{ nxt_string("fallback"), { nxt_string("fallback"),
NXT_CONF_VLDT_OBJECT, NXT_CONF_VLDT_OBJECT,
0,
&nxt_conf_vldt_action, &nxt_conf_vldt_action,
NULL }, NULL },
@@ -418,6 +462,7 @@ static nxt_conf_vldt_object_t nxt_conf_vldt_share_action_members[] = {
static nxt_conf_vldt_object_t nxt_conf_vldt_proxy_action_members[] = { static nxt_conf_vldt_object_t nxt_conf_vldt_proxy_action_members[] = {
{ nxt_string("proxy"), { nxt_string("proxy"),
NXT_CONF_VLDT_STRING, NXT_CONF_VLDT_STRING,
0,
&nxt_conf_vldt_proxy, &nxt_conf_vldt_proxy,
NULL }, NULL },
@@ -428,11 +473,13 @@ static nxt_conf_vldt_object_t nxt_conf_vldt_proxy_action_members[] = {
static nxt_conf_vldt_object_t nxt_conf_vldt_route_members[] = { static nxt_conf_vldt_object_t nxt_conf_vldt_route_members[] = {
{ nxt_string("match"), { nxt_string("match"),
NXT_CONF_VLDT_OBJECT, NXT_CONF_VLDT_OBJECT,
0,
&nxt_conf_vldt_object, &nxt_conf_vldt_object,
(void *) &nxt_conf_vldt_match_members }, (void *) &nxt_conf_vldt_match_members },
{ nxt_string("action"), { nxt_string("action"),
NXT_CONF_VLDT_OBJECT, NXT_CONF_VLDT_OBJECT,
0,
&nxt_conf_vldt_action, &nxt_conf_vldt_action,
NULL }, NULL },
@@ -443,21 +490,25 @@ static nxt_conf_vldt_object_t nxt_conf_vldt_route_members[] = {
static nxt_conf_vldt_object_t nxt_conf_vldt_app_limits_members[] = { static nxt_conf_vldt_object_t nxt_conf_vldt_app_limits_members[] = {
{ nxt_string("timeout"), { nxt_string("timeout"),
NXT_CONF_VLDT_INTEGER, NXT_CONF_VLDT_INTEGER,
0,
NULL, NULL,
NULL }, NULL },
{ nxt_string("reschedule_timeout"), { nxt_string("reschedule_timeout"),
NXT_CONF_VLDT_INTEGER, NXT_CONF_VLDT_INTEGER,
0,
NULL, NULL,
NULL }, NULL },
{ nxt_string("requests"), { nxt_string("requests"),
NXT_CONF_VLDT_INTEGER, NXT_CONF_VLDT_INTEGER,
0,
NULL, NULL,
NULL }, NULL },
{ nxt_string("shm"), { nxt_string("shm"),
NXT_CONF_VLDT_INTEGER, NXT_CONF_VLDT_INTEGER,
0,
NULL, NULL,
NULL }, NULL },
@@ -468,16 +519,19 @@ static nxt_conf_vldt_object_t nxt_conf_vldt_app_limits_members[] = {
static nxt_conf_vldt_object_t nxt_conf_vldt_app_processes_members[] = { static nxt_conf_vldt_object_t nxt_conf_vldt_app_processes_members[] = {
{ nxt_string("spare"), { nxt_string("spare"),
NXT_CONF_VLDT_INTEGER, NXT_CONF_VLDT_INTEGER,
0,
NULL, NULL,
NULL }, NULL },
{ nxt_string("max"), { nxt_string("max"),
NXT_CONF_VLDT_INTEGER, NXT_CONF_VLDT_INTEGER,
0,
NULL, NULL,
NULL }, NULL },
{ nxt_string("idle_timeout"), { nxt_string("idle_timeout"),
NXT_CONF_VLDT_INTEGER, NXT_CONF_VLDT_INTEGER,
0,
NULL, NULL,
NULL }, NULL },
@@ -490,6 +544,7 @@ static nxt_conf_vldt_object_t nxt_conf_vldt_app_namespaces_members[] = {
#if (NXT_HAVE_CLONE_NEWUSER) #if (NXT_HAVE_CLONE_NEWUSER)
{ nxt_string("credential"), { nxt_string("credential"),
NXT_CONF_VLDT_BOOLEAN, NXT_CONF_VLDT_BOOLEAN,
0,
NULL, NULL,
NULL }, NULL },
#endif #endif
@@ -497,6 +552,7 @@ static nxt_conf_vldt_object_t nxt_conf_vldt_app_namespaces_members[] = {
#if (NXT_HAVE_CLONE_NEWPID) #if (NXT_HAVE_CLONE_NEWPID)
{ nxt_string("pid"), { nxt_string("pid"),
NXT_CONF_VLDT_BOOLEAN, NXT_CONF_VLDT_BOOLEAN,
0,
NULL, NULL,
NULL }, NULL },
#endif #endif
@@ -504,6 +560,7 @@ static nxt_conf_vldt_object_t nxt_conf_vldt_app_namespaces_members[] = {
#if (NXT_HAVE_CLONE_NEWNET) #if (NXT_HAVE_CLONE_NEWNET)
{ nxt_string("network"), { nxt_string("network"),
NXT_CONF_VLDT_BOOLEAN, NXT_CONF_VLDT_BOOLEAN,
0,
NULL, NULL,
NULL }, NULL },
#endif #endif
@@ -511,6 +568,7 @@ static nxt_conf_vldt_object_t nxt_conf_vldt_app_namespaces_members[] = {
#if (NXT_HAVE_CLONE_NEWNS) #if (NXT_HAVE_CLONE_NEWNS)
{ nxt_string("mount"), { nxt_string("mount"),
NXT_CONF_VLDT_BOOLEAN, NXT_CONF_VLDT_BOOLEAN,
0,
NULL, NULL,
NULL }, NULL },
#endif #endif
@@ -518,6 +576,7 @@ static nxt_conf_vldt_object_t nxt_conf_vldt_app_namespaces_members[] = {
#if (NXT_HAVE_CLONE_NEWUTS) #if (NXT_HAVE_CLONE_NEWUTS)
{ nxt_string("uname"), { nxt_string("uname"),
NXT_CONF_VLDT_BOOLEAN, NXT_CONF_VLDT_BOOLEAN,
0,
NULL, NULL,
NULL }, NULL },
#endif #endif
@@ -525,6 +584,7 @@ static nxt_conf_vldt_object_t nxt_conf_vldt_app_namespaces_members[] = {
#if (NXT_HAVE_CLONE_NEWCGROUP) #if (NXT_HAVE_CLONE_NEWCGROUP)
{ nxt_string("cgroup"), { nxt_string("cgroup"),
NXT_CONF_VLDT_BOOLEAN, NXT_CONF_VLDT_BOOLEAN,
0,
NULL, NULL,
NULL }, NULL },
#endif #endif
@@ -538,16 +598,19 @@ static nxt_conf_vldt_object_t nxt_conf_vldt_app_namespaces_members[] = {
static nxt_conf_vldt_object_t nxt_conf_vldt_app_procmap_members[] = { static nxt_conf_vldt_object_t nxt_conf_vldt_app_procmap_members[] = {
{ nxt_string("container"), { nxt_string("container"),
NXT_CONF_VLDT_INTEGER, NXT_CONF_VLDT_INTEGER,
0,
NULL, NULL,
NULL }, NULL },
{ nxt_string("host"), { nxt_string("host"),
NXT_CONF_VLDT_INTEGER, NXT_CONF_VLDT_INTEGER,
0,
NULL, NULL,
NULL }, NULL },
{ nxt_string("size"), { nxt_string("size"),
NXT_CONF_VLDT_INTEGER, NXT_CONF_VLDT_INTEGER,
0,
NULL, NULL,
NULL }, NULL },
@@ -560,6 +623,7 @@ static nxt_conf_vldt_object_t nxt_conf_vldt_app_procmap_members[] = {
static nxt_conf_vldt_object_t nxt_conf_vldt_app_isolation_members[] = { static nxt_conf_vldt_object_t nxt_conf_vldt_app_isolation_members[] = {
{ nxt_string("namespaces"), { nxt_string("namespaces"),
NXT_CONF_VLDT_OBJECT, NXT_CONF_VLDT_OBJECT,
0,
&nxt_conf_vldt_clone_namespaces, &nxt_conf_vldt_clone_namespaces,
(void *) &nxt_conf_vldt_app_namespaces_members }, (void *) &nxt_conf_vldt_app_namespaces_members },
@@ -567,11 +631,13 @@ static nxt_conf_vldt_object_t nxt_conf_vldt_app_isolation_members[] = {
{ nxt_string("uidmap"), { nxt_string("uidmap"),
NXT_CONF_VLDT_ARRAY, NXT_CONF_VLDT_ARRAY,
0,
&nxt_conf_vldt_array_iterator, &nxt_conf_vldt_array_iterator,
(void *) &nxt_conf_vldt_clone_uidmap }, (void *) &nxt_conf_vldt_clone_uidmap },
{ nxt_string("gidmap"), { nxt_string("gidmap"),
NXT_CONF_VLDT_ARRAY, NXT_CONF_VLDT_ARRAY,
0,
&nxt_conf_vldt_array_iterator, &nxt_conf_vldt_array_iterator,
(void *) &nxt_conf_vldt_clone_gidmap }, (void *) &nxt_conf_vldt_clone_gidmap },
@@ -581,6 +647,7 @@ static nxt_conf_vldt_object_t nxt_conf_vldt_app_isolation_members[] = {
{ nxt_string("rootfs"), { nxt_string("rootfs"),
NXT_CONF_VLDT_STRING, NXT_CONF_VLDT_STRING,
0,
NULL, NULL,
NULL }, NULL },
@@ -590,6 +657,7 @@ static nxt_conf_vldt_object_t nxt_conf_vldt_app_isolation_members[] = {
{ nxt_string("new_privs"), { nxt_string("new_privs"),
NXT_CONF_VLDT_BOOLEAN, NXT_CONF_VLDT_BOOLEAN,
0,
NULL, NULL,
NULL }, NULL },
@@ -602,41 +670,49 @@ static nxt_conf_vldt_object_t nxt_conf_vldt_app_isolation_members[] = {
static nxt_conf_vldt_object_t nxt_conf_vldt_common_members[] = { static nxt_conf_vldt_object_t nxt_conf_vldt_common_members[] = {
{ nxt_string("type"), { nxt_string("type"),
NXT_CONF_VLDT_STRING, NXT_CONF_VLDT_STRING,
0,
NULL, NULL,
NULL }, NULL },
{ nxt_string("limits"), { nxt_string("limits"),
NXT_CONF_VLDT_OBJECT, NXT_CONF_VLDT_OBJECT,
0,
&nxt_conf_vldt_object, &nxt_conf_vldt_object,
(void *) &nxt_conf_vldt_app_limits_members }, (void *) &nxt_conf_vldt_app_limits_members },
{ nxt_string("processes"), { nxt_string("processes"),
NXT_CONF_VLDT_INTEGER | NXT_CONF_VLDT_OBJECT, NXT_CONF_VLDT_INTEGER | NXT_CONF_VLDT_OBJECT,
0,
&nxt_conf_vldt_processes, &nxt_conf_vldt_processes,
(void *) &nxt_conf_vldt_app_processes_members }, (void *) &nxt_conf_vldt_app_processes_members },
{ nxt_string("user"), { nxt_string("user"),
NXT_CONF_VLDT_STRING, NXT_CONF_VLDT_STRING,
0,
NULL, NULL,
NULL }, NULL },
{ nxt_string("group"), { nxt_string("group"),
NXT_CONF_VLDT_STRING, NXT_CONF_VLDT_STRING,
0,
NULL, NULL,
NULL }, NULL },
{ nxt_string("working_directory"), { nxt_string("working_directory"),
NXT_CONF_VLDT_STRING, NXT_CONF_VLDT_STRING,
0,
NULL, NULL,
NULL }, NULL },
{ nxt_string("environment"), { nxt_string("environment"),
NXT_CONF_VLDT_OBJECT, NXT_CONF_VLDT_OBJECT,
0,
&nxt_conf_vldt_object_iterator, &nxt_conf_vldt_object_iterator,
(void *) &nxt_conf_vldt_environment }, (void *) &nxt_conf_vldt_environment },
{ nxt_string("isolation"), { nxt_string("isolation"),
NXT_CONF_VLDT_OBJECT, NXT_CONF_VLDT_OBJECT,
0,
&nxt_conf_vldt_isolation, &nxt_conf_vldt_isolation,
(void *) &nxt_conf_vldt_app_isolation_members }, (void *) &nxt_conf_vldt_app_isolation_members },
@@ -647,11 +723,13 @@ static nxt_conf_vldt_object_t nxt_conf_vldt_common_members[] = {
static nxt_conf_vldt_object_t nxt_conf_vldt_external_members[] = { static nxt_conf_vldt_object_t nxt_conf_vldt_external_members[] = {
{ nxt_string("executable"), { nxt_string("executable"),
NXT_CONF_VLDT_STRING, NXT_CONF_VLDT_STRING,
NXT_CONF_VLDT_REQUIRED,
NULL, NULL,
NULL }, NULL },
{ nxt_string("arguments"), { nxt_string("arguments"),
NXT_CONF_VLDT_ARRAY, NXT_CONF_VLDT_ARRAY,
0,
&nxt_conf_vldt_array_iterator, &nxt_conf_vldt_array_iterator,
(void *) &nxt_conf_vldt_argument }, (void *) &nxt_conf_vldt_argument },
@@ -662,16 +740,19 @@ static nxt_conf_vldt_object_t nxt_conf_vldt_external_members[] = {
static nxt_conf_vldt_object_t nxt_conf_vldt_python_members[] = { static nxt_conf_vldt_object_t nxt_conf_vldt_python_members[] = {
{ nxt_string("home"), { nxt_string("home"),
NXT_CONF_VLDT_STRING, NXT_CONF_VLDT_STRING,
0,
NULL, NULL,
NULL }, NULL },
{ nxt_string("path"), { nxt_string("path"),
NXT_CONF_VLDT_STRING, NXT_CONF_VLDT_STRING,
0,
NULL, NULL,
NULL }, NULL },
{ nxt_string("module"), { nxt_string("module"),
NXT_CONF_VLDT_STRING, NXT_CONF_VLDT_STRING,
NXT_CONF_VLDT_REQUIRED,
NULL, NULL,
NULL }, NULL },
@@ -682,16 +763,19 @@ static nxt_conf_vldt_object_t nxt_conf_vldt_python_members[] = {
static nxt_conf_vldt_object_t nxt_conf_vldt_php_target_members[] = { static nxt_conf_vldt_object_t nxt_conf_vldt_php_target_members[] = {
{ nxt_string("root"), { nxt_string("root"),
NXT_CONF_VLDT_STRING, NXT_CONF_VLDT_STRING,
NXT_CONF_VLDT_REQUIRED,
NULL, NULL,
NULL }, NULL },
{ nxt_string("script"), { nxt_string("script"),
NXT_CONF_VLDT_STRING, NXT_CONF_VLDT_STRING,
0,
NULL, NULL,
NULL }, NULL },
{ nxt_string("index"), { nxt_string("index"),
NXT_CONF_VLDT_STRING, NXT_CONF_VLDT_STRING,
0,
NULL, NULL,
NULL }, NULL },
@@ -702,16 +786,19 @@ static nxt_conf_vldt_object_t nxt_conf_vldt_php_target_members[] = {
static nxt_conf_vldt_object_t nxt_conf_vldt_php_options_members[] = { static nxt_conf_vldt_object_t nxt_conf_vldt_php_options_members[] = {
{ nxt_string("file"), { nxt_string("file"),
NXT_CONF_VLDT_STRING, NXT_CONF_VLDT_STRING,
0,
NULL, NULL,
NULL }, NULL },
{ nxt_string("admin"), { nxt_string("admin"),
NXT_CONF_VLDT_OBJECT, NXT_CONF_VLDT_OBJECT,
0,
&nxt_conf_vldt_object_iterator, &nxt_conf_vldt_object_iterator,
(void *) &nxt_conf_vldt_php_option }, (void *) &nxt_conf_vldt_php_option },
{ nxt_string("user"), { nxt_string("user"),
NXT_CONF_VLDT_OBJECT, NXT_CONF_VLDT_OBJECT,
0,
&nxt_conf_vldt_object_iterator, &nxt_conf_vldt_object_iterator,
(void *) &nxt_conf_vldt_php_option }, (void *) &nxt_conf_vldt_php_option },
@@ -722,6 +809,7 @@ static nxt_conf_vldt_object_t nxt_conf_vldt_php_options_members[] = {
static nxt_conf_vldt_object_t nxt_conf_vldt_php_common_members[] = { static nxt_conf_vldt_object_t nxt_conf_vldt_php_common_members[] = {
{ nxt_string("options"), { nxt_string("options"),
NXT_CONF_VLDT_OBJECT, NXT_CONF_VLDT_OBJECT,
0,
&nxt_conf_vldt_object, &nxt_conf_vldt_object,
(void *) &nxt_conf_vldt_php_options_members }, (void *) &nxt_conf_vldt_php_options_members },
@@ -732,16 +820,19 @@ static nxt_conf_vldt_object_t nxt_conf_vldt_php_common_members[] = {
static nxt_conf_vldt_object_t nxt_conf_vldt_php_notargets_members[] = { static nxt_conf_vldt_object_t nxt_conf_vldt_php_notargets_members[] = {
{ nxt_string("root"), { nxt_string("root"),
NXT_CONF_VLDT_STRING, NXT_CONF_VLDT_STRING,
NXT_CONF_VLDT_REQUIRED,
NULL, NULL,
NULL }, NULL },
{ nxt_string("script"), { nxt_string("script"),
NXT_CONF_VLDT_STRING, NXT_CONF_VLDT_STRING,
0,
NULL, NULL,
NULL }, NULL },
{ nxt_string("index"), { nxt_string("index"),
NXT_CONF_VLDT_STRING, NXT_CONF_VLDT_STRING,
0,
NULL, NULL,
NULL }, NULL },
@@ -752,21 +843,25 @@ static nxt_conf_vldt_object_t nxt_conf_vldt_php_notargets_members[] = {
static nxt_conf_vldt_object_t nxt_conf_vldt_php_members[] = { static nxt_conf_vldt_object_t nxt_conf_vldt_php_members[] = {
{ nxt_string("root"), { nxt_string("root"),
NXT_CONF_VLDT_ANY_TYPE, NXT_CONF_VLDT_ANY_TYPE,
0,
&nxt_conf_vldt_php_targets_exclusive, &nxt_conf_vldt_php_targets_exclusive,
(void *) "root" }, (void *) "root" },
{ nxt_string("script"), { nxt_string("script"),
NXT_CONF_VLDT_ANY_TYPE, NXT_CONF_VLDT_ANY_TYPE,
0,
&nxt_conf_vldt_php_targets_exclusive, &nxt_conf_vldt_php_targets_exclusive,
(void *) "script" }, (void *) "script" },
{ nxt_string("index"), { nxt_string("index"),
NXT_CONF_VLDT_ANY_TYPE, NXT_CONF_VLDT_ANY_TYPE,
0,
&nxt_conf_vldt_php_targets_exclusive, &nxt_conf_vldt_php_targets_exclusive,
(void *) "index" }, (void *) "index" },
{ nxt_string("targets"), { nxt_string("targets"),
NXT_CONF_VLDT_OBJECT, NXT_CONF_VLDT_OBJECT,
0,
&nxt_conf_vldt_php_targets, &nxt_conf_vldt_php_targets,
NULL }, NULL },
@@ -777,6 +872,7 @@ static nxt_conf_vldt_object_t nxt_conf_vldt_php_members[] = {
static nxt_conf_vldt_object_t nxt_conf_vldt_perl_members[] = { static nxt_conf_vldt_object_t nxt_conf_vldt_perl_members[] = {
{ nxt_string("script"), { nxt_string("script"),
NXT_CONF_VLDT_STRING, NXT_CONF_VLDT_STRING,
NXT_CONF_VLDT_REQUIRED,
NULL, NULL,
NULL }, NULL },
@@ -787,6 +883,7 @@ static nxt_conf_vldt_object_t nxt_conf_vldt_perl_members[] = {
static nxt_conf_vldt_object_t nxt_conf_vldt_ruby_members[] = { static nxt_conf_vldt_object_t nxt_conf_vldt_ruby_members[] = {
{ nxt_string("script"), { nxt_string("script"),
NXT_CONF_VLDT_STRING, NXT_CONF_VLDT_STRING,
NXT_CONF_VLDT_REQUIRED,
NULL, NULL,
NULL }, NULL },
@@ -797,21 +894,25 @@ static nxt_conf_vldt_object_t nxt_conf_vldt_ruby_members[] = {
static nxt_conf_vldt_object_t nxt_conf_vldt_java_members[] = { static nxt_conf_vldt_object_t nxt_conf_vldt_java_members[] = {
{ nxt_string("classpath"), { nxt_string("classpath"),
NXT_CONF_VLDT_ARRAY, NXT_CONF_VLDT_ARRAY,
0,
&nxt_conf_vldt_array_iterator, &nxt_conf_vldt_array_iterator,
(void *) &nxt_conf_vldt_java_classpath }, (void *) &nxt_conf_vldt_java_classpath },
{ nxt_string("webapp"), { nxt_string("webapp"),
NXT_CONF_VLDT_STRING, NXT_CONF_VLDT_STRING,
NXT_CONF_VLDT_REQUIRED,
NULL, NULL,
NULL }, NULL },
{ nxt_string("options"), { nxt_string("options"),
NXT_CONF_VLDT_ARRAY, NXT_CONF_VLDT_ARRAY,
0,
&nxt_conf_vldt_array_iterator, &nxt_conf_vldt_array_iterator,
(void *) &nxt_conf_vldt_java_option }, (void *) &nxt_conf_vldt_java_option },
{ nxt_string("unit_jars"), { nxt_string("unit_jars"),
NXT_CONF_VLDT_STRING, NXT_CONF_VLDT_STRING,
0,
NULL, NULL,
NULL }, NULL },
@@ -822,6 +923,7 @@ static nxt_conf_vldt_object_t nxt_conf_vldt_java_members[] = {
static nxt_conf_vldt_object_t nxt_conf_vldt_upstream_members[] = { static nxt_conf_vldt_object_t nxt_conf_vldt_upstream_members[] = {
{ nxt_string("servers"), { nxt_string("servers"),
NXT_CONF_VLDT_OBJECT, NXT_CONF_VLDT_OBJECT,
0,
&nxt_conf_vldt_object_iterator, &nxt_conf_vldt_object_iterator,
(void *) &nxt_conf_vldt_server }, (void *) &nxt_conf_vldt_server },
@@ -832,6 +934,7 @@ static nxt_conf_vldt_object_t nxt_conf_vldt_upstream_members[] = {
static nxt_conf_vldt_object_t nxt_conf_vldt_upstream_server_members[] = { static nxt_conf_vldt_object_t nxt_conf_vldt_upstream_server_members[] = {
{ nxt_string("weight"), { nxt_string("weight"),
NXT_CONF_VLDT_NUMBER, NXT_CONF_VLDT_NUMBER,
0,
&nxt_conf_vldt_server_weight, &nxt_conf_vldt_server_weight,
NULL }, NULL },
@@ -1729,6 +1832,31 @@ nxt_conf_vldt_object(nxt_conf_validation_t *vldt, nxt_conf_value_t *value,
nxt_conf_value_t *member; nxt_conf_value_t *member;
nxt_conf_vldt_object_t *vals; nxt_conf_vldt_object_t *vals;
vals = data;
for ( ;; ) {
if (vals->name.length == 0) {
if (vals->data != NULL) {
vals = vals->data;
continue;
}
break;
}
if (vals->flags & NXT_CONF_VLDT_REQUIRED) {
member = nxt_conf_get_object_member(value, &vals->name, NULL);
if (member == NULL) {
return nxt_conf_vldt_error(vldt, "Required parameter \"%V\" "
"is missing.", &vals->name);
}
}
vals++;
}
index = 0; index = 0;
for ( ;; ) { for ( ;; ) {

View File

@@ -402,11 +402,6 @@ nxt_php_set_target(nxt_task_t *task, nxt_php_target_t *target,
value = nxt_conf_get_object_member(conf, &root_str, NULL); value = nxt_conf_get_object_member(conf, &root_str, NULL);
if (value == NULL) {
nxt_alert(task, "no php root specified");
return NXT_ERROR;
}
nxt_conf_get_string(value, &str); nxt_conf_get_string(value, &str);
tmp = nxt_malloc(str.length + 1); tmp = nxt_malloc(str.length + 1);

View File

@@ -243,11 +243,6 @@ nxt_python_start(nxt_task_t *task, nxt_process_data_t *data)
app_conf = data->app; app_conf = data->app;
c = &app_conf->u.python; c = &app_conf->u.python;
if (c->module.length == 0) {
nxt_alert(task, "python module is empty");
return NXT_ERROR;
}
if (c->home != NULL) { if (c->home != NULL) {
len = nxt_strlen(c->home); len = nxt_strlen(c->home);