Electroneum
Loading...
Searching...
No Matches
respip.h File Reference
#include "util/module.h"
#include "services/localzone.h"
Include dependency graph for respip.h:

Go to the source code of this file.

Classes

struct  respip_client_info
struct  respip_action_info

Functions

struct respip_set * respip_set_create (void)
void respip_set_delete (struct respip_set *set)
int respip_global_apply_cfg (struct respip_set *set, struct config_file *cfg)
int respip_views_apply_cfg (struct views *vs, struct config_file *cfg, int *have_view_respip_cfg)
int respip_merge_cname (struct reply_info *base_rep, const struct query_info *qinfo, const struct reply_info *tgt_rep, const struct respip_client_info *cinfo, int must_validate, struct reply_info **new_repp, struct regional *region)
int respip_rewrite_reply (const struct query_info *qinfo, const struct respip_client_info *cinfo, const struct reply_info *rep, struct reply_info **new_repp, struct respip_action_info *actinfo, struct ub_packed_rrset_key **alias_rrset, int search_only, struct regional *region)
struct module_func_block * respip_get_funcblock (void)
int respip_init (struct module_env *env, int id)
void respip_deinit (struct module_env *env, int id)
void respip_operate (struct module_qstate *qstate, enum module_ev event, int id, struct outbound_entry *outbound)
void respip_inform_super (struct module_qstate *qstate, int id, struct module_qstate *super)
void respip_clear (struct module_qstate *qstate, int id)
struct rbtree_type * respip_set_get_tree (struct respip_set *set)
enum respip_action resp_addr_get_action (const struct resp_addr *addr)
struct ub_packed_rrset_key * resp_addr_get_rrset (struct resp_addr *addr)
size_t respip_get_mem (struct module_env *env, int id)
int respip_set_is_empty (const struct respip_set *set)
void respip_inform_print (struct respip_addr_info *respip_addr, uint8_t *qname, uint16_t qtype, uint16_t qclass, struct local_rrset *local_alias, struct comm_reply *repinfo)

Detailed Description

This file contains a module that selectively modifies query responses based on their AAAA/A IP addresses.

Definition in file respip.h.

Function Documentation

◆ resp_addr_get_action()

enum respip_action resp_addr_get_action ( const struct resp_addr * addr)

returns respip action for the specified node in the respip address returns respip_none for NULL input; exists for test purposes only

Here is the call graph for this function:
Here is the caller graph for this function:

◆ resp_addr_get_rrset()

struct ub_packed_rrset_key * resp_addr_get_rrset ( struct resp_addr * addr)

returns rrset portion of the specified node in the respip address tree; returns NULL for NULL input; exists for test purposes only

Here is the call graph for this function:
Here is the caller graph for this function:

◆ respip_clear()

void respip_clear ( struct module_qstate * qstate,
int id )

response-ip cleanup query state

Here is the call graph for this function:
Here is the caller graph for this function:

◆ respip_deinit()

void respip_deinit ( struct module_env * env,
int id )

response-ip deinit

Here is the call graph for this function:
Here is the caller graph for this function:

◆ respip_get_funcblock()

struct module_func_block * respip_get_funcblock ( void )

Get the response-ip function block.

Returns
: function block with function pointers to response-ip methods.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ respip_get_mem()

size_t respip_get_mem ( struct module_env * env,
int id )

response-ip alloc size routine

Here is the call graph for this function:
Here is the caller graph for this function:

◆ respip_global_apply_cfg()

int respip_global_apply_cfg ( struct respip_set * set,
struct config_file * cfg )

Apply response-ip config settings to the global (default) view. It assumes exclusive access to set (no internal locks).

Parameters
setprocessed global respip config data
cfgconfig data.
Returns
1 on success, 0 on error.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ respip_inform_print()

void respip_inform_print ( struct respip_addr_info * respip_addr,
uint8_t * qname,
uint16_t qtype,
uint16_t qclass,
struct local_rrset * local_alias,
struct comm_reply * repinfo )

print log information for a query subject to an inform or inform-deny response-ip action.

Parameters
respip_addrresponse-ip information that causes the action
qnamequery name in the context, will be ignored if local_alias is non-NULL.
qtypequery type, in host byte order.
qclassquery class, in host byte order.
local_aliasset to a local alias if the query matches an alias in a local zone. In this case its owner name will be considered the actual query name.
repinforeply info containing the client's source address and port.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ respip_inform_super()

void respip_inform_super ( struct module_qstate * qstate,
int id,
struct module_qstate * super )

inform response-ip super

Here is the call graph for this function:
Here is the caller graph for this function:

◆ respip_init()

int respip_init ( struct module_env * env,
int id )

response-ip init

Here is the call graph for this function:
Here is the caller graph for this function:

◆ respip_merge_cname()

int respip_merge_cname ( struct reply_info * base_rep,
const struct query_info * qinfo,
const struct reply_info * tgt_rep,
const struct respip_client_info * cinfo,
int must_validate,
struct reply_info ** new_repp,
struct regional * region )

Merge two replies to build a complete CNAME chain. It appends the content of 'tgt_rep' to 'base_rep', assuming (but not checking) the former ends with a CNAME and the latter resolves its target. A merged new reply will be built using 'region' and *new_repp will point to the new one on success. If the target reply would also be subject to a response-ip action for 'cinfo', this function uses 'base_rep' as the merged reply, ignoring 'tgt_rep'. This is for avoiding cases like a CNAME loop or failure of applying an action to an address. RRSIGs in 'tgt_rep' will be excluded in the merged reply, as the resulting reply is assumed to be faked due to a response-ip action and can't be considered secure in terms of DNSSEC. The caller must ensure that neither 'base_rep' nor 'tgt_rep' can be modified until this function returns.

Parameters
base_repthe reply info containing an incomplete CNAME.
qinfoquery info corresponding to 'base_rep'.
tgt_repthe reply info that completes the CNAME chain.
cinfoclient info corresponding to 'base_rep'.
must_validatewhether 'tgt_rep' must be DNSSEC-validated.
new_repppointer placeholder for the merged reply. will be intact on error.
regionallocator to build *new_repp.
Returns
1 on success, 0 on error.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ respip_operate()

void respip_operate ( struct module_qstate * qstate,
enum module_ev event,
int id,
struct outbound_entry * outbound )

response-ip operate on a query

Here is the call graph for this function:
Here is the caller graph for this function:

◆ respip_rewrite_reply()

int respip_rewrite_reply ( const struct query_info * qinfo,
const struct respip_client_info * cinfo,
const struct reply_info * rep,
struct reply_info ** new_repp,
struct respip_action_info * actinfo,
struct ub_packed_rrset_key ** alias_rrset,
int search_only,
struct regional * region )

See if any IP-based action should apply to any IP address of AAAA/A answer record in the reply. If so, apply the action. In some cases it rewrites the reply rrsets, in which case *new_repp will point to the updated reply info. Depending on the action, some of the rrsets in 'rep' will be shallow-copied into '*new_repp'; the caller must ensure that the rrsets in 'rep' are valid throughout the lifetime of *new_repp, and it must provide appropriate mutex if the rrsets can be shared by multiple threads.

Parameters
qinfoquery info corresponding to the reply.
cinfoclient-specific info to identify the best matching action. can be NULL.
reporiginal reply info. must not be NULL.
new_reppcan be set to the rewritten reply info (intact on failure).
actinforesult of response-ip processing
alias_rrsetmust not be NULL.
search_onlyif true, only check if an action would apply. actionp will be set (or intact) accordingly but the modified reply won't be built.
regionallocator to build *new_repp.
Returns
1 on success, 0 on error.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ respip_set_create()

struct respip_set * respip_set_create ( void )

Create response IP set.

Returns
new struct or NULL on error.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ respip_set_delete()

void respip_set_delete ( struct respip_set * set)

Delete response IP set.

Parameters
setto delete.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ respip_set_get_tree()

struct rbtree_type * respip_set_get_tree ( struct respip_set * set)

returns address of the IP address tree of the specified respip set; returns NULL for NULL input; exists for test purposes only

Here is the call graph for this function:
Here is the caller graph for this function:

◆ respip_set_is_empty()

int respip_set_is_empty ( const struct respip_set * set)

respip set emptiness test

Parameters
setrespip set to test
Returns
0 if the specified set exists (non-NULL) and is non-empty; otherwise returns 1
Here is the call graph for this function:
Here is the caller graph for this function:

◆ respip_views_apply_cfg()

int respip_views_apply_cfg ( struct views * vs,
struct config_file * cfg,
int * have_view_respip_cfg )

Apply response-ip config settings in named views.

Parameters
vsview structures with processed config data
cfgconfig data.
have_view_respip_cfgset to true if any named view has respip configuration; otherwise set to false
Returns
1 on success, 0 on error.
Here is the call graph for this function:
Here is the caller graph for this function: