Commit eb1bb1c1 authored by Graham Leggett's avatar Graham Leggett
Browse files

Introduce a per request version of the remote IP address, which can be

optionally modified by a module when the effective IP of the client
is not the same as the real IP of the client (such as a load balancer).


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1204968 13f79535-47bb-0310-9956-ffa450edef68
parent b9ac4b19
Loading
Loading
Loading
Loading
+6 −0
Changes for include/httpd.h: 6 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -1003,6 +1003,12 @@ struct request_rec {
    apr_uri_t parsed_uri;
    /**  finfo.protection (st_mode) set to zero if no such file */
    apr_finfo_t finfo;

    /** remote address information from conn_rec, can be overridden if
     * necessary by a module.
     */
    apr_sockaddr_t *remote_addr;
    char *remote_ip;
};

/**
+1 −1
Changes for modules/aaa/mod_access_compat.c: 1 added line, 1 removed line.
Original line number Diff line number Diff line
@@ -271,7 +271,7 @@ static int find_allowdeny(request_rec *r, apr_array_header_t *a, int method)
            return 1;

        case T_IP:
            if (apr_ipsubnet_test(ap[i].x.ip, r->connection->remote_addr)) {
            if (apr_ipsubnet_test(ap[i].x.ip, r->remote_addr)) {
                return 1;
            }
            break;
+4 −4
Changes for modules/aaa/mod_authz_host.c: 4 added lines, 4 removed lines.
Original line number Diff line number Diff line
@@ -153,7 +153,7 @@ static authz_status ip_check_authorization(request_rec *r,
    apr_ipsubnet_t **ip = (apr_ipsubnet_t **)parsed_require_line;

    while (*ip) {
        if (apr_ipsubnet_test(*ip, r->connection->remote_addr))
        if (apr_ipsubnet_test(*ip, r->remote_addr))
            return AUTHZ_GRANTED;
        ip++;
    }
@@ -201,10 +201,10 @@ static authz_status local_check_authorization(request_rec *r,
                                              const void *parsed_require_line)
{
     if (   apr_sockaddr_equal(r->connection->local_addr,
                               r->connection->remote_addr)
         || apr_ipsubnet_test(localhost_v4, r->connection->remote_addr)
                               r->remote_addr)
         || apr_ipsubnet_test(localhost_v4, r->remote_addr)
#if APR_HAVE_IPV6
         || apr_ipsubnet_test(localhost_v6, r->connection->remote_addr)
         || apr_ipsubnet_test(localhost_v6, r->remote_addr)
#endif
        )
     {
+2 −2
Changes for modules/arch/netware/mod_nw_ssl.c: 2 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -1000,6 +1000,8 @@ char *ssl_var_lookup(apr_pool_t *p, server_rec *s, conn_rec *c, request_rec *r,
                result = r->uri;
            else if (strcEQ(var, "REQUEST_FILENAME"))
                result = r->filename;
            else if (strcEQ(var, "REMOTE_ADDR"))
                result = r->remote_ip;
            else if (strcEQ(var, "REMOTE_HOST"))
                result = ap_get_remote_host(r->connection, r->per_dir_config,
                                            REMOTE_NAME, NULL);
@@ -1055,8 +1057,6 @@ char *ssl_var_lookup(apr_pool_t *p, server_rec *s, conn_rec *c, request_rec *r,

                if (strlen(var) > 4 && strcEQn(var, "SSL_", 4))
                        result = NULL;
        else if (strcEQ(var, "REMOTE_ADDR"))
            result = c->remote_ip;
    }

    /*
+1 −1
Changes for modules/filters/mod_ext_filter.c: 1 added line, 1 removed line.
Original line number Diff line number Diff line
@@ -406,7 +406,7 @@ static void child_errfn(apr_pool_t *pool, apr_status_t err, const char *descript
    apr_file_printf(stderr_log,
                    "[%s] [client %s] mod_ext_filter (%d)%s: %s\n",
                    time_str,
                    r->connection->remote_ip,
                    r->remote_ip,
                    err,
                    apr_strerror(err, errbuf, sizeof(errbuf)),
                    description);
Loading