Electroneum
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_blockrespip_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_typerespip_set_get_tree (struct respip_set *set)
 
enum respip_action resp_addr_get_action (const struct resp_addr *addr)
 
struct ub_packed_rrset_keyresp_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

◆ 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

◆ respip_clear()

void respip_clear ( struct module_qstate qstate,
int  id 
)

response-ip cleanup query state

◆ respip_deinit()

void respip_deinit ( struct module_env env,
int  id 
)

response-ip deinit

◆ 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.

◆ respip_get_mem()

size_t respip_get_mem ( struct module_env env,
int  id 
)

response-ip alloc size routine

◆ 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.

◆ 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.

◆ respip_inform_super()

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

inform response-ip super

◆ respip_init()

int respip_init ( struct module_env env,
int  id 
)

response-ip init

◆ 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.

◆ 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

◆ 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.

◆ respip_set_create()

struct respip_set* respip_set_create ( void  )

Create response IP set.

Returns
new struct or NULL on error.

◆ respip_set_delete()

void respip_set_delete ( struct respip_set *  set)

Delete response IP set.

Parameters
setto delete.

◆ 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

◆ 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

◆ 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.