78 lines
1.7 KiB
C
78 lines
1.7 KiB
C
/* Copyright (C) CZ.NIC, z.s.p.o. <knot-resolver@labs.nic.cz>
|
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
|
*/
|
|
|
|
#include "daemon/engine.h"
|
|
#include "lib/layer.h"
|
|
#include "modules/cookies/cookiectl.h"
|
|
#include "modules/cookies/cookiemonster.h"
|
|
|
|
/**
|
|
* Get/set DNS cookie related stuff.
|
|
*
|
|
* Input: { name: value, ... }
|
|
* Output: current configuration
|
|
*/
|
|
static char *cookies_config(void *env, struct kr_module *module,
|
|
const char *args)
|
|
{
|
|
struct kr_cookie_ctx *cookie_ctx = module->data;
|
|
if (kr_fails_assert(cookie_ctx))
|
|
return NULL;
|
|
|
|
/* Apply configuration, if any. */
|
|
config_apply(cookie_ctx, args);
|
|
|
|
/* Return current configuration. */
|
|
return config_read(cookie_ctx);
|
|
}
|
|
|
|
/*
|
|
* Module implementation.
|
|
*/
|
|
|
|
KR_EXPORT
|
|
int cookies_init(struct kr_module *module)
|
|
{
|
|
/* The function answer_finalize() in resolver is called before any
|
|
* .finish callback. Therefore this layer does not use it. */
|
|
static kr_layer_api_t layer = {
|
|
.begin = &check_request,
|
|
.consume = &check_response
|
|
};
|
|
/* Store module reference */
|
|
layer.data = module;
|
|
module->layer = &layer;
|
|
|
|
static const struct kr_prop props[] = {
|
|
{ &cookies_config, "config", "Empty value to return current configuration.", },
|
|
{ NULL, NULL, NULL }
|
|
};
|
|
module->props = props;
|
|
|
|
struct engine *engine = module->data;
|
|
|
|
struct kr_cookie_ctx *cookie_ctx = &engine->resolver.cookie_ctx;
|
|
|
|
int ret = config_init(cookie_ctx);
|
|
if (ret != kr_ok()) {
|
|
return ret;
|
|
}
|
|
|
|
/* Replace engine pointer. */
|
|
module->data = cookie_ctx;
|
|
|
|
return kr_ok();
|
|
}
|
|
|
|
KR_EXPORT
|
|
int cookies_deinit(struct kr_module *module)
|
|
{
|
|
struct kr_cookie_ctx *cookie_ctx = module->data;
|
|
|
|
config_deinit(cookie_ctx);
|
|
|
|
return kr_ok();
|
|
}
|
|
|
|
KR_MODULE_EXPORT(cookies)
|