Pass the http_request responsible for calling the validator.

This commit is contained in:
Joris Vink 2014-02-01 17:47:58 +01:00
parent ccd9e1046a
commit 634bb482d6
5 changed files with 23 additions and 21 deletions

View File

@ -244,11 +244,11 @@ TAILQ_HEAD(kore_domain_h, kore_domain);
#define KORE_VALIDATOR_TYPE_FUNCTION 2
struct kore_validator {
u_int8_t type;
char *name;
char *arg;
regex_t rctx;
int (*func)(char *);
u_int8_t type;
char *name;
char *arg;
regex_t rctx;
int (*func)(struct http_request *, char *);
TAILQ_ENTRY(kore_validator) list;
};
@ -407,8 +407,9 @@ struct kore_module_handle *kore_module_handler_find(char *, char *);
void kore_validator_init(void);
void kore_validator_reload(void);
int kore_validator_add(char *, u_int8_t, char *);
int kore_validator_run(char *, char *);
int kore_validator_check(struct kore_validator *, char *);
int kore_validator_run(struct http_request *, char *, char *);
int kore_validator_check(struct http_request *,
struct kore_validator *, char *);
struct kore_validator *kore_validator_lookup(char *);
void fatal(const char *, ...);

View File

@ -34,8 +34,8 @@ int serve_private(struct http_request *);
int serve_private_test(struct http_request *);
void my_callback(void);
int v_example_func(char *);
int v_session_validate(char *);
int v_example_func(struct http_request *, char *);
int v_session_validate(struct http_request *, char *);
void test_base64(u_int8_t *, u_int32_t, struct kore_buf *);
char *b64tests[] = {
@ -222,17 +222,17 @@ test_base64(u_int8_t *src, u_int32_t slen, struct kore_buf *res)
int
serve_validator(struct http_request *req)
{
if (kore_validator_run("v_example", "test"))
if (kore_validator_run(NULL, "v_example", "test"))
kore_log(LOG_NOTICE, "v_example ok (expected)");
else
kore_log(LOG_NOTICE, "v_example failed");
if (kore_validator_run("v_regex", "/test/123"))
if (kore_validator_run(NULL, "v_regex", "/test/123"))
kore_log(LOG_NOTICE, "regex #1 ok");
else
kore_log(LOG_NOTICE, "regex #1 failed (expected)");
if (kore_validator_run("v_regex", "/test/joris"))
if (kore_validator_run(NULL, "v_regex", "/test/joris"))
kore_log(LOG_NOTICE, "regex #2 ok (expected)");
else
kore_log(LOG_NOTICE, "regex #2 failed");
@ -339,7 +339,7 @@ my_callback(void)
}
int
v_example_func(char *data)
v_example_func(struct http_request *req, char *data)
{
kore_log(LOG_NOTICE, "v_example_func called");
@ -350,7 +350,7 @@ v_example_func(char *data)
}
int
v_session_validate(char *data)
v_session_validate(struct http_request *req, char *data)
{
kore_log(LOG_NOTICE, "v_session_validate: %s", data);

View File

@ -121,7 +121,7 @@ kore_auth_cookie(struct http_request *req, struct kore_auth *auth)
return (KORE_RESULT_ERROR);
}
i = kore_validator_check(auth->validator, ++value);
i = kore_validator_check(req, auth->validator, ++value);
kore_mem_free(cookie);
return (i);
@ -136,7 +136,7 @@ kore_auth_header(struct http_request *req, struct kore_auth *auth)
if (!http_request_header_get(req, auth->value, &header))
return (KORE_RESULT_ERROR);
r = kore_validator_check(auth->validator, header);
r = kore_validator_check(req, auth->validator, header);
kore_mem_free(header);
return (r);

View File

@ -801,7 +801,7 @@ http_argument_add(struct http_request *req, char *name,
len = strlen(value);
}
if (!kore_validator_check(p->validator, value)) {
if (!kore_validator_check(req, p->validator, value)) {
kore_log(LOG_NOTICE,
"validator %s (%s) for %s failed",
p->validator->name, p->name, req->path);

View File

@ -63,7 +63,7 @@ kore_validator_add(char *name, u_int8_t type, char *arg)
}
int
kore_validator_run(char *name, char *data)
kore_validator_run(struct http_request *req, char *name, char *data)
{
struct kore_validator *val;
@ -71,14 +71,15 @@ kore_validator_run(char *name, char *data)
if (strcmp(val->name, name))
continue;
return (kore_validator_check(val, data));
return (kore_validator_check(req, val, data));
}
return (KORE_RESULT_ERROR);
}
int
kore_validator_check(struct kore_validator *val, char *data)
kore_validator_check(struct http_request *req, struct kore_validator *val,
char *data)
{
int r;
@ -90,7 +91,7 @@ kore_validator_check(struct kore_validator *val, char *data)
r = KORE_RESULT_ERROR;
break;
case KORE_VALIDATOR_TYPE_FUNCTION:
r = val->func(data);
r = val->func(req, data);
break;
default:
r = KORE_RESULT_ERROR;