PowerDNS Recursor provides a set of functions available through the LUA FFI library that allow you to interact with handle passed to gettag_ffi()
and postresolve_ffi()
.
gettag_ffi()
¶pdns_ffi_param_get_qname
(pdns_ffi_param_t* ref) → const char*¶Get the query’s qualified name
pdns_ffi_param_get_qtype
(const pdns_ffi_param_t* ref) → uint16_t¶Get the query’s type
pdns_ffi_param_get_remote
(pdns_ffi_param_t* ref) → const char*¶Get the sender’s IP address
pdns_ffi_param_get_remote_port
(const pdns_ffi_param_t* ref) → uint16_t¶Get the sender’s port
pdns_ffi_param_get_local
(pdns_ffi_param_t* ref) → const char*¶Get the local IP address the query was received on
pdns_ffi_param_get_local_port
(const pdns_ffi_param_t* ref) → uint16_t¶Get the local port the query was received on
pdns_ffi_param_get_edns_cs
(pdns_ffi_param_t* ref) → const char*¶Get query’s EDNS client subnet
pdns_ffi_param_get_edns_cs_source_mask
(const pdns_ffi_param_t* ref) → uint8_t¶Get query’s EDNS client subnet mask
pdns_ffi_param_get_edns_options
(pdns_ffi_param_t* ref, const pdns_ednsoption_t** out) → size_t¶Get query’s EDNS options. Returns the length of the resulting out array
pdns_ffi_param_get_edns_options_by_code
(pdns_ffi_param_t* ref, uint16_t optionCode, const pdns_ednsoption_t** out) → size_t¶Get query’s EDNS option for a given code. Returns the length of the resulting out array
pdns_ffi_param_get_proxy_protocol_values
(pdns_ffi_param_t* ref, const pdns_proxyprotocol_value_t** out) → size_t¶Get query’s proxy protocol values. Returns the length of the resulting out array
pdns_ffi_param_get_edns_cs_raw
(pdns_ffi_param_t* ref, const void** net, size_t* netSize) → void¶Fill out net with query’s EDNS client subnet
pdns_ffi_param_get_remote_raw
(pdns_ffi_param_t* ref, const void** addr, size_t* addrSize) → void¶Fill out addr with sender’s IP address
pdns_ffi_param_get_qname_raw
(pdns_ffi_param_t* ref, const char** qname, size_t* qnameSize) → void¶Fill out qname with query’s qualified name
pdns_ffi_param_get_local_raw
(pdns_ffi_param_t* ref, const void** addr, size_t* addrSize) → void¶Fill out addr with local IP address the query was received on
pdns_ffi_param_set_tag
(pdns_ffi_param_t* ref, unsigned int tag) → void¶Tag the query with the given number
pdns_ffi_param_add_policytag
(pdns_ffi_param_t* ref, const char* name) → void¶Add the given tag to the query
pdns_ffi_param_set_requestorid
(pdns_ffi_param_t* ref, const char* name) → void¶Set query’s requestor ID
pdns_ffi_param_set_devicename
(pdns_ffi_param_t* ref, const char* name) → void¶Set query’s device name
pdns_ffi_param_set_deviceid
(pdns_ffi_param_t* ref, size_t len, const void* name) → void¶Set query’s device ID
pdns_ffi_param_set_routingtag
(pdns_ffi_param_t* ref, const char* name) → void¶Set routing tag which is used as an extra name to identify records in the record cache, see gettag()
pdns_ffi_param_set_variable
(pdns_ffi_param_t* ref, bool variable) → void¶Mark as variable and ensure it’s not inserted into the packetcache
pdns_ffi_param_set_ttl_cap
(pdns_ffi_param_t* ref, uint32_t ttl) → void¶Cap the max TTL of the returned records
pdns_ffi_param_set_log_query
(pdns_ffi_param_t* ref, bool logQuery) → void¶Turn on/off query logging
pdns_ffi_param_set_log_response
(pdns_ffi_param_t* ref, bool logResponse) → void¶Turn on/off response logging
pdns_ffi_param_set_rcode
(pdns_ffi_param_t* ref, int rcode) → void¶Set response RCode
pdns_ffi_param_set_follow_cname_records
(pdns_ffi_param_t* ref, bool follow) → void¶Instruct the recursor to do a proper resolution in order to follow any CNAME records added
pdns_ffi_param_set_extended_error_code
(pdns_ffi_param_t* ref, uint16_t code) → void¶Set extended DNS error info code
pdns_ffi_param_set_extended_error_extra
(pdns_ffi_param_t* ref, size_t len, const char* extra) → void¶Set extended DNS error extra text
pdns_ffi_param_set_padding_disabled
(pdns_ffi_param_t* ref, bool disabled) → void¶Disable padding
pdns_ffi_param_add_record
(pdns_ffi_param_t* ref, const char* name, uint16_t type, uint32_t ttl, const char* content, size_t contentSize, pdns_record_place_t place) → bool¶Adds a record. Returns true if it was correctly added, false otherwise
postresolve_ffi()
¶New in version 4.7.0.
All functions below were added in version 4.7.0.
pdns_postresolve_ffi_handle_get_qname
(pdns_postresolve_ffi_handle_t* ref) → const char*¶Get the name queried as a string.
pdns_postresolve_ffi_handle_get_qname_raw
(pdns_postresolve_ffi_handle_t* ref, const char** qname, size_t* qnameSize) → void¶Get the name queried (and its size) in DNS wire format.
pdns_postresolve_ffi_handle_get_qtype
(const pdns_postresolve_ffi_handle_t* ref) → uint16¶Get the qtype of the query.
pdns_postresolve_ffi_handle_get_rcode
(const pdns_postresolve_ffi_handle_t* ref) → uint16¶Get the rcode returned by the resolving process.
pdns_postresolve_ffi_handle_set_rcode
(const pdns_postresolve_ffi_handle_t* ref, uint16_t rcode) → void¶Set the rcode to be returned.
pdns_postresolve_ffi_handle_get_appliedpolicy_kind
(const pdns_postresolve_ffi_handle_t* ref) → pdns_policy_kind_t¶Get the applied policy.
pdns_postresolve_ffi_handle_set_appliedpolicy_kind
(pdns_postresolve_ffi_handle_t* ref, pdns_policy_kind_t kind) → void¶Set the applied policy.
pdns_postresolve_ffi_handle_get_record
(pdns_postresolve_ffi_handle_t* ref, unsigned int i, pdns_ffi_record_t* record, bool raw) → bool¶Get a record indexed by i. Returns false if no record is available at index i.
pdns_postresolve_ffi_handle_set_record
(pdns_postresolve_ffi_handle_t* ref, unsigned int i, const char* content, size_t contentLen, bool raw) → bool¶Set the record at index i.
pdns_postresolve_ffi_handle_clear_records
(pdns_postresolve_ffi_handle_t* ref) → void¶Clear all records.
pdns_postresolve_ffi_handle_add_record
(pdns_postresolve_ffi_handle_t* ref, const char* name, uint16_t type, uint32_t ttl, const char* content, size_t contentLen, pdns_record_place_t place, bool raw) → bool¶Add a record to the existing records.
pdns_postresolve_ffi_handle_get_authip
(pdns_postresolve_ffi_handle_t* ref) → const char*¶Get a string representation of the IP address of the authoritative server that answered the query. The string might by empty if the address is not available.
pdns_postresolve_ffi_handle_get_authip_raw
(pdns_postresolve_ffi_handle_t* ref, const void** addr, size_t* addrSize) → void¶Get the raw IP address (in network byte order) and size of the raw IP address of the authoritative server that answered the query. The string might be empty if the address is not available.