|
Electroneum
|

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) |
This file contains a module that selectively modifies query responses based on their AAAA/A IP addresses.
Definition in file respip.h.
| 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
| 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
| void respip_clear | ( | struct module_qstate * | qstate, |
| int | id | ||
| ) |
response-ip cleanup query state
| void respip_deinit | ( | struct module_env * | env, |
| int | id | ||
| ) |
response-ip deinit
| struct module_func_block* respip_get_funcblock | ( | void | ) |
Get the response-ip function block.
| size_t respip_get_mem | ( | struct module_env * | env, |
| int | id | ||
| ) |
response-ip alloc size routine
| 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).
| set | processed global respip config data |
| cfg | config data. |
| 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.
| respip_addr | response-ip information that causes the action |
| qname | query name in the context, will be ignored if local_alias is non-NULL. |
| qtype | query type, in host byte order. |
| qclass | query class, in host byte order. |
| local_alias | set 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. |
| repinfo | reply info containing the client's source address and port. |
| void respip_inform_super | ( | struct module_qstate * | qstate, |
| int | id, | ||
| struct module_qstate * | super | ||
| ) |
inform response-ip super
| int respip_init | ( | struct module_env * | env, |
| int | id | ||
| ) |
response-ip init
| 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.
| base_rep | the reply info containing an incomplete CNAME. |
| qinfo | query info corresponding to 'base_rep'. |
| tgt_rep | the reply info that completes the CNAME chain. |
| cinfo | client info corresponding to 'base_rep'. |
| must_validate | whether 'tgt_rep' must be DNSSEC-validated. |
| new_repp | pointer placeholder for the merged reply. will be intact on error. |
| region | allocator to build *new_repp. |
| void respip_operate | ( | struct module_qstate * | qstate, |
| enum module_ev | event, | ||
| int | id, | ||
| struct outbound_entry * | outbound | ||
| ) |
response-ip operate on a query
| 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.
| qinfo | query info corresponding to the reply. |
| cinfo | client-specific info to identify the best matching action. can be NULL. |
| rep | original reply info. must not be NULL. |
| new_repp | can be set to the rewritten reply info (intact on failure). |
| actinfo | result of response-ip processing |
| alias_rrset | must not be NULL. |
| search_only | if true, only check if an action would apply. actionp will be set (or intact) accordingly but the modified reply won't be built. |
| region | allocator to build *new_repp. |
| struct respip_set* respip_set_create | ( | void | ) |
Create response IP set.
| void respip_set_delete | ( | struct respip_set * | set | ) |
Delete response IP set.
| set | to delete. |
| 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
| int respip_set_is_empty | ( | const struct respip_set * | set | ) |
respip set emptiness test
| set | respip set to test |
| 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.
| vs | view structures with processed config data |
| cfg | config data. |
| have_view_respip_cfg | set to true if any named view has respip configuration; otherwise set to false |