From f22fcc8272b905494397a907b72b7f02d347fc9c Mon Sep 17 00:00:00 2001 From: andersb Date: Sun, 24 Sep 2006 16:17:06 +0000 Subject: [PATCH] Fixed: [] around time. NCSA logformat requires it. Fixed: Status variable is not shown correctly. Added: base64() decode of Remote User. Note: Getting compile warning. git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@1122 d4fa192b-c00b-0410-8231-f00ffab90ce4 --- varnish-cache/bin/varnishncsa/varnishncsa.c | 27 ++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/varnish-cache/bin/varnishncsa/varnishncsa.c b/varnish-cache/bin/varnishncsa/varnishncsa.c index dd3a89c0..928f3e1f 100644 --- a/varnish-cache/bin/varnishncsa/varnishncsa.c +++ b/varnish-cache/bin/varnishncsa/varnishncsa.c @@ -61,6 +61,7 @@ static struct logline { char df_b[12]; /* Datafield for %b, Bytes */ char *df_R; /* Datafield for %{Referer} */ char *df_U; /* Datafield for %{User-agent} */ + char *df_RU; /* Datafield for %l, Remote user */ int bogus_req; /* bogus request */ struct vsb *sb; } *ll[65536]; @@ -87,6 +88,7 @@ extended_log_format(void *priv, unsigned tag, unsigned fd, unsigned len, unsigne FILE *fo; time_t t; long l; + unsigned lu; struct tm tm; char tbuf[40]; struct logline *lp; @@ -120,6 +122,8 @@ extended_log_format(void *priv, unsigned tag, unsigned fd, unsigned len, unsigne vsb_bcat(lp->sb, ptr, len); } else if (ispfx(ptr, len, "GET")) { vsb_bcat(lp->sb, ptr, len); + } else if (ispfx(ptr, len, "PURGE")) { + vsb_bcat(lp->sb, ptr, len); } else { lp->bogus_req = 1; } @@ -144,6 +148,8 @@ extended_log_format(void *priv, unsigned tag, unsigned fd, unsigned len, unsigne lp->df_U = strdup(ptr + 12); else if (ispfx(ptr, len, "referer:")) lp->df_R = strdup(ptr + 9); + else if (ispfx(ptr, len, "authorization:")) + lp->df_RU = strdup(ptr + 21); break; case SLT_Length: @@ -163,10 +169,29 @@ extended_log_format(void *priv, unsigned tag, unsigned fd, unsigned len, unsigne assert(1 == sscanf(ptr, "%*u %*u.%*u %ld.", &l)); t = l; localtime_r(&t, &tm); + + + strftime(tbuf, sizeof tbuf, "%d/%b/%Y:%T %z", &tm); - fprintf(fo, "%s - - %s", lp->df_h, tbuf); + fprintf(fo, "%s", lp->df_h); + + if (lp->df_RU != NULL){ + base64_init(); + lu = sizeof lp->df_RU; + base64_decode(lp->df_RU, &lu, lp->df_RU); + q = strchr(lp->df_RU, ':'); + *q = '\0'; + fprintf(fo, " %s", lp->df_RU); + free(lp->df_RU); + lp->df_RU = NULL; + } + else{ + fprintf(fo, " -"); + } + fprintf(fo, " - [%s]", tbuf); vsb_finish(lp->sb); fprintf(fo, " \"%s\"", vsb_data(lp->sb)); + fprintf(fo, " %s", lp->df_s); fprintf(fo, " %s", lp->df_b); if (lp->df_R != NULL) { fprintf(fo, " \"%s\"", lp->df_R); -- 2.39.5