On 9/24/07, Ruediger Pluem <[EMAIL PROTECTED]> wrote:
>
>
> On 09/23/2007 10:49 PM, Jeff Trawick wrote:
> > On 9/18/07, Plüm, Rüdiger, VF-Group <[EMAIL PROTECTED]> wrote:
> >>
> >>> -----Ursprüngliche Nachricht-----
> >>> Von: Adam Hasselbalch Hansen
> >>> Gesendet: Dienstag, 18. September 2007 12:25
> >>> An: [email protected]
> >>> Betreff: [PATCH 43415] Logging remote port.
> >>>
> >>>
> >>> I have created a patch for httpd 2.2.6, giving the additional
> >>> LogFormat
> >>> directive %R, which logs the port of the host making the request.
> >>>
> >>> This is due to new legislation in Denmark, requiring ISPs and hosting
> >>> companies to log the originating port of all traffic.
> >> 5 comments:
> >
> >> 3. I am not too happy with using %R, but to be honest I have no better
> >> proposal :-).
> >> Maybe other have.
> >
> > %{canonical}p (default)
> > %{local}p
> > %{remote}p
>
> Sounds good to me.
The attached patch works for me (though I haven't yet rebuilt the docs
to see what that looks like).
[EMAIL PROTECTED] httpd]$ egrep
'(^ServerName|^.VirtualHost|^Listen|ports$)'
/scratch/inst/23/conf/httpd.conf
Listen 8089
LogFormat "%h %l %u %t \"%r\" %>s %b PORTS: %p %{canonical}p
%{local}p %{remote}p %{bogusarg}p" ports
CustomLog logs/access_log ports
<VirtualHost *:8089>
ServerName localhost:9999
[EMAIL PROTECTED] httpd]$ tail -1 /scratch/inst/23/logs/access_log
127.0.0.1 - - [24/Sep/2007:07:56:55 -0400] "GET / HTTP/1.0" 200 45
PORTS: 9999 9999 8089 65001 bogusarg
--
Born in Roswell... married an alien...
Index: modules/loggers/mod_log_config.c
===================================================================
--- modules/loggers/mod_log_config.c (revision 578767)
+++ modules/loggers/mod_log_config.c (working copy)
@@ -633,8 +633,22 @@
static const char *log_server_port(request_rec *r, char *a)
{
- return apr_psprintf(r->pool, "%u",
- r->server->port ? r->server->port :
ap_default_port(r));
+ apr_port_t port;
+
+ if (*a == '\0' || !strcmp(a, "canonical")) {
+ port = r->server->port ? r->server->port : ap_default_port(r);
+ }
+ else if (!strcmp(a, "remote")) {
+ port = r->connection->remote_addr->port;
+ }
+ else if (!strcmp(a, "local")) {
+ port = r->connection->local_addr->port;
+ }
+ else {
+ /* bogus format */
+ return a;
+ }
+ return pfmt(r->pool, (int)port);
}
/* This respects the setting of UseCanonicalName so that
Index: docs/manual/mod/mod_log_config.xml
===================================================================
--- docs/manual/mod/mod_log_config.xml (revision 578767)
+++ docs/manual/mod/mod_log_config.xml (working copy)
@@ -127,6 +127,12 @@
<tr><td><code>%p</code></td>
<td>The canonical port of the server serving the request</td></tr>
+ <tr><td><code>%{<var>format</var>}p</code></td>
+ <td>The canonical port of the server serving the request or the
+ server's actual port or the client's actual port. Valid formats
+ are <code>canonical</code>, <code>local</code>, or <code>remote</code>.
+ </td></tr>
+
<tr><td><code>%P</code></td>
<td>The process ID of the child that serviced the request.</td></tr>