Apache HTTPD
Classes | Macros | Typedefs | Enumerations | Functions | Variables
mod_remoteip.c File Reference
#include "ap_config.h"
#include "ap_mmn.h"
#include "ap_listen.h"
#include "httpd.h"
#include "http_config.h"
#include "http_connection.h"
#include "http_protocol.h"
#include "http_log.h"
#include "http_main.h"
#include "apr_strings.h"
#include "apr_lib.h"
#include "apr_want.h"
#include "apr_network_io.h"
#include "apr_version.h"

Go to the source code of this file.

Classes

struct  remoteip_proxymatch_t
 
struct  remoteip_addr_info
 
struct  remoteip_config_t
 
struct  remoteip_req_t
 
struct  proxy_v1
 
union  proxy_v2_addr
 
struct  proxy_v2
 
union  proxy_header
 
struct  remoteip_filter_context
 
struct  remoteip_conn_config_t
 

Macros

#define APR_WANT_BYTEFUNC
 
#define MIN_V1_HDR_LEN   15
 
#define MIN_V2_HDR_LEN   16
 
#define MIN_HDR_LEN   MIN_V1_HDR_LEN
 
#define INET6_ADDRSTRLEN   46
 
#define GET_NEXT_WORD(field)
 

Typedefs

typedef struct remoteip_addr_info remoteip_addr_info
 

Enumerations

enum  remoteip_parse_status_t { HDR_DONE , HDR_ERROR , HDR_NEED_MORE }
 

Functions

static void * create_remoteip_server_config (apr_pool_t *p, server_rec *s)
 
static void * merge_remoteip_server_config (apr_pool_t *p, void *globalv, void *serverv)
 
static const charheader_name_set (cmd_parms *cmd, void *dummy, const char *arg)
 
static const charproxies_header_name_set (cmd_parms *cmd, void *dummy, const char *arg)
 
static int looks_like_ip (const char *ipstr)
 
static const charproxies_set (cmd_parms *cmd, void *cfg, const char *arg)
 
static const charproxylist_read (cmd_parms *cmd, void *cfg, const char *filename)
 
static int remoteip_sockaddr_equal (apr_sockaddr_t *addr1, apr_sockaddr_t *addr2)
 
static int remoteip_sockaddr_compat (apr_sockaddr_t *addr1, apr_sockaddr_t *addr2)
 
static int remoteip_addr_in_list (remoteip_addr_info *list, apr_sockaddr_t *addr)
 
static void remoteip_warn_enable_conflict (remoteip_addr_info *prev, server_rec *new, int flag)
 
static const charremoteip_enable_proxy_protocol (cmd_parms *cmd, void *config, int flag)
 
static const charremoteip_disable_networks (cmd_parms *cmd, void *d, int argc, char *const argv[])
 
static int remoteip_hook_post_config (apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
 
static int remoteip_modify_request (request_rec *r)
 
static int remoteip_is_server_port (apr_port_t port)
 
static remoteip_parse_status_t remoteip_process_v1_header (conn_rec *c, remoteip_conn_config_t *conn_conf, proxy_header *hdr, apr_size_t len, apr_size_t *hdr_len)
 
static int remoteip_hook_pre_connection (conn_rec *c, void *csd)
 
static remoteip_parse_status_t remoteip_process_v2_header (conn_rec *c, remoteip_conn_config_t *conn_conf, proxy_header *hdr)
 
static apr_size_t remoteip_get_v2_len (proxy_header *hdr)
 
static int remoteip_determine_version (conn_rec *c, const char *ptr)
 
static apr_status_t remoteip_input_filter (ap_filter_t *f, apr_bucket_brigade *bb_out, ap_input_mode_t mode, apr_read_type_e block, apr_off_t readbytes)
 
static void register_hooks (apr_pool_t *p)
 

Variables

static ap_filter_rec_tremoteip_filter
 
static const char v2sig [12] = "\x0D\x0A\x0D\x0A\x00\x0D\x0A\x51\x55\x49\x54\x0A"
 
static const command_rec remoteip_cmds []
 
static int *const aplog_module_index = &( remoteip_module.module_index)
 

Macro Definition Documentation

◆ APR_WANT_BYTEFUNC

#define APR_WANT_BYTEFUNC

Definition at line 31 of file mod_remoteip.c.

◆ GET_NEXT_WORD

#define GET_NEXT_WORD (   field)
Value:
if (!word) { \
"RemoteIPProxyProtocol: no " field " found in header '%s'", \
hdr->v1.line); \
return HDR_ERROR; \
}
#define APLOGNO(n)
Definition http_log.h:117
#define APLOG_ERR
Definition http_log.h:67
#define APLOG_MARK
Definition http_log.h:283
apr_text_header * hdr
Definition apr_xml.h:77
apr_size_t size
apr_vformatter_buff_t * c
Definition apr_lib.h:175
@ HDR_ERROR
return NULL
Definition mod_so.c:359

◆ INET6_ADDRSTRLEN

#define INET6_ADDRSTRLEN   46

Definition at line 127 of file mod_remoteip.c.

◆ MIN_HDR_LEN

#define MIN_HDR_LEN   MIN_V1_HDR_LEN

Definition at line 122 of file mod_remoteip.c.

◆ MIN_V1_HDR_LEN

#define MIN_V1_HDR_LEN   15

Definition at line 120 of file mod_remoteip.c.

◆ MIN_V2_HDR_LEN

#define MIN_V2_HDR_LEN   16

Definition at line 121 of file mod_remoteip.c.

Typedef Documentation

◆ remoteip_addr_info

Enumeration Type Documentation

◆ remoteip_parse_status_t

Enumerator
HDR_DONE 
HDR_ERROR 
HDR_NEED_MORE 

Definition at line 150 of file mod_remoteip.c.

Function Documentation

◆ create_remoteip_server_config()

static void * create_remoteip_server_config ( apr_pool_t p,
server_rec s 
)
static

Definition at line 152 of file mod_remoteip.c.

◆ header_name_set()

static const char * header_name_set ( cmd_parms cmd,
void *  dummy,
const char arg 
)
static

Definition at line 185 of file mod_remoteip.c.

◆ looks_like_ip()

static int looks_like_ip ( const char ipstr)
static

Definition at line 205 of file mod_remoteip.c.

◆ merge_remoteip_server_config()

static void * merge_remoteip_server_config ( apr_pool_t p,
void *  globalv,
void *  serverv 
)
static

Definition at line 165 of file mod_remoteip.c.

◆ proxies_header_name_set()

static const char * proxies_header_name_set ( cmd_parms cmd,
void *  dummy,
const char arg 
)
static

Definition at line 194 of file mod_remoteip.c.

◆ proxies_set()

static const char * proxies_set ( cmd_parms cmd,
void *  cfg,
const char arg 
)
static

<

See also
apr_sockaddr_info_get()

Definition at line 218 of file mod_remoteip.c.

◆ proxylist_read()

static const char * proxylist_read ( cmd_parms cmd,
void *  cfg,
const char filename 
)
static

Definition at line 275 of file mod_remoteip.c.

◆ register_hooks()

static void register_hooks ( apr_pool_t p)
static

Definition at line 1246 of file mod_remoteip.c.

◆ remoteip_addr_in_list()

static int remoteip_addr_in_list ( remoteip_addr_info list,
apr_sockaddr_t addr 
)
static

Definition at line 377 of file mod_remoteip.c.

◆ remoteip_determine_version()

static int remoteip_determine_version ( conn_rec c,
const char ptr 
)
static

Determine if this is a v1 or v2 PROXY header.

Definition at line 1025 of file mod_remoteip.c.

◆ remoteip_disable_networks()

static const char * remoteip_disable_networks ( cmd_parms cmd,
void *  d,
int  argc,
char *const  argv[] 
)
static

Definition at line 456 of file mod_remoteip.c.

◆ remoteip_enable_proxy_protocol()

static const char * remoteip_enable_proxy_protocol ( cmd_parms cmd,
void *  config,
int  flag 
)
static

Definition at line 404 of file mod_remoteip.c.

◆ remoteip_get_v2_len()

static apr_size_t remoteip_get_v2_len ( proxy_header hdr)
static

Return length for a v2 protocol header.

Definition at line 1018 of file mod_remoteip.c.

◆ remoteip_hook_post_config()

static int remoteip_hook_post_config ( apr_pool_t pconf,
apr_pool_t plog,
apr_pool_t ptemp,
server_rec s 
)
static

< Module has handled this stage.

Definition at line 495 of file mod_remoteip.c.

◆ remoteip_hook_pre_connection()

static int remoteip_hook_pre_connection ( conn_rec c,
void *  csd 
)
static

Add our filter to the connection if it is requested

< Module declines to handle

< Module declines to handle

< Module declines to handle

< Module declines to handle

< Module declines to handle

< Module has handled this stage.

Definition at line 876 of file mod_remoteip.c.

◆ remoteip_input_filter()

static apr_status_t remoteip_input_filter ( ap_filter_t f,
apr_bucket_brigade bb_out,
ap_input_mode_t  mode,
apr_read_type_e  block,
apr_off_t  readbytes 
)
static

Definition at line 1046 of file mod_remoteip.c.

◆ remoteip_is_server_port()

static int remoteip_is_server_port ( apr_port_t  port)
static

Definition at line 752 of file mod_remoteip.c.

◆ remoteip_modify_request()

static int remoteip_modify_request ( request_rec r)
static

< Module declines to handle

< Module has handled this stage.

< Module has handled this stage.

<

See also
apr_sockaddr_info_get()

< Module has handled this stage.

< Module has handled this stage.

Definition at line 519 of file mod_remoteip.c.

◆ remoteip_process_v1_header()

static remoteip_parse_status_t remoteip_process_v1_header ( conn_rec c,
remoteip_conn_config_t conn_conf,
proxy_header hdr,
apr_size_t  len,
apr_size_t hdr_len 
)
static

Definition at line 769 of file mod_remoteip.c.

◆ remoteip_process_v2_header()

static remoteip_parse_status_t remoteip_process_v2_header ( conn_rec c,
remoteip_conn_config_t conn_conf,
proxy_header hdr 
)
static

Definition at line 944 of file mod_remoteip.c.

◆ remoteip_sockaddr_compat()

static int remoteip_sockaddr_compat ( apr_sockaddr_t addr1,
apr_sockaddr_t addr2 
)
static

Similar to remoteip_sockaddr_equal, except that it handles wildcard addresses and ports too.

Definition at line 355 of file mod_remoteip.c.

◆ remoteip_sockaddr_equal()

static int remoteip_sockaddr_equal ( apr_sockaddr_t addr1,
apr_sockaddr_t addr2 
)
static

Similar to apr_sockaddr_equal, except that it compares ports too.

Definition at line 313 of file mod_remoteip.c.

◆ remoteip_warn_enable_conflict()

static void remoteip_warn_enable_conflict ( remoteip_addr_info prev,
server_rec new,
int  flag 
)
static

Definition at line 388 of file mod_remoteip.c.

Variable Documentation

◆ aplog_module_index

int* const aplog_module_index = &( remoteip_module.module_index)
static

Definition at line 1259 of file mod_remoteip.c.

◆ remoteip_cmds

const command_rec remoteip_cmds[]
static
Initial value:
=
{
{ "RemoteIPHeader" , header_name_set , NULL , 128 , TAKE1, "Specifies a request header to trust as the client IP, " "e.g. X-Forwarded-For" },
{ "RemoteIPProxiesHeader" , proxies_header_name_set , NULL , 128 , TAKE1, "Specifies a request header to record proxy IP's, " "e.g. X-Forwarded-By; if not given then do not record" },
{ "RemoteIPTrustedProxy" , proxies_set , 0 , 128 , ITERATE, "Specifies one or more proxies which are trusted " "to present IP headers" },
{ "RemoteIPInternalProxy" , proxies_set , (void*)1 , 128 , ITERATE, "Specifies one or more internal (transparent) proxies " "which are trusted to present IP headers" },
{ "RemoteIPTrustedProxyList" , proxylist_read , 0 , 128 | 256 , TAKE1, "The filename to read the list of trusted proxies, " "see the RemoteIPTrustedProxy directive" },
{ "RemoteIPInternalProxyList" , proxylist_read , (void*)1 , 128 | 256 , TAKE1, "The filename to read the list of internal proxies, " "see the RemoteIPInternalProxy directive" },
{ "RemoteIPProxyProtocol" , remoteip_enable_proxy_protocol , NULL , 128 , FLAG, "Enable PROXY protocol handling ('on', 'off')" },
{ "RemoteIPProxyProtocolExceptions" , remoteip_disable_networks , NULL , 128 , TAKE_ARGV, "Disable PROXY " "protocol handling for this list of networks in CIDR format" },
{ NULL }
}
@ TAKE1
Definition http_config.h:51
@ TAKE_ARGV
Definition http_config.h:66
@ FLAG
Definition http_config.h:59
@ ITERATE
Definition http_config.h:53
static const char * remoteip_disable_networks(cmd_parms *cmd, void *d, int argc, char *const argv[])
static const char * header_name_set(cmd_parms *cmd, void *dummy, const char *arg)
static const char * proxies_header_name_set(cmd_parms *cmd, void *dummy, const char *arg)
static const char * remoteip_enable_proxy_protocol(cmd_parms *cmd, void *config, int flag)
static const char * proxies_set(cmd_parms *cmd, void *cfg, const char *arg)
static const char * proxylist_read(cmd_parms *cmd, void *cfg, const char *filename)

Definition at line 1215 of file mod_remoteip.c.

◆ remoteip_filter

ap_filter_rec_t* remoteip_filter
static

Definition at line 81 of file mod_remoteip.c.

◆ v2sig

const char v2sig[12] = "\x0D\x0A\x0D\x0A\x00\x0D\x0A\x51\x55\x49\x54\x0A"
static

Definition at line 119 of file mod_remoteip.c.