From: James Bowe Date: Sun, 1 May 2011 12:10:37 +0000 (+1200) Subject: Add external_acl_type %EXT_LOG and %EXT_TAG format options. X-Git-Tag: take07~16^2~48 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=99e4ad673c09ecb9ba3510a9a0c3dad3861e88e1;p=thirdparty%2Fsquid.git Add external_acl_type %EXT_LOG and %EXT_TAG format options. %EXT_LOG and %EXT_TAG are filled with the log= and tag= fields returned by previous external ACLs. -for a string that never changes after it is set, tag= is suitable. -for a string that may need updating or overwriting by a later external_acl, log= is suitable. Under both circumstances it is conceivable that later external_acls may need access to the tag= or log= values after they have been set (e.g. for external_acl debugging, merging log messages, etc). --- diff --git a/doc/release-notes/release-3.2.sgml b/doc/release-notes/release-3.2.sgml index c46d286405..c85ab03d27 100644 --- a/doc/release-notes/release-3.2.sgml +++ b/doc/release-notes/release-3.2.sgml @@ -476,6 +476,8 @@ This section gives a thorough account of those changes in three categories:

New format tags and option parameters:

%SRCEUI48 EUI-48 / MAC address of client from ARP lookup.

%SRCEUI64 EUI-64 of clients with SLAAC address. +

%EXT_LOG log= message returned by previous external ACL calls. An updated version may be returned. +

%EXT_TAG tag= value returned by previous external ACL calls. Tag may not be altered once set.

children-max=N determins maximum number of helper processes used.

children-startup=N determins minimum number of helper processes used.

children-idle=N determines how many helper to retain as buffer against sudden traffic loads. diff --git a/src/cf.data.pre b/src/cf.data.pre index 3d860a9281..20e117f4a2 100644 --- a/src/cf.data.pre +++ b/src/cf.data.pre @@ -556,7 +556,9 @@ DOC_START FORMAT specifications %LOGIN Authenticated user login name - %EXT_USER Username from external acl + %EXT_USER Username from previous external acl + %EXT_LOG Log details from previous external acl + %EXT_TAG Tag from previous external acl %IDENT Ident user name %SRC Client IP %SRCPORT Client source port diff --git a/src/external_acl.cc b/src/external_acl.cc index dff0ea91d5..c661e5de7f 100644 --- a/src/external_acl.cc +++ b/src/external_acl.cc @@ -187,6 +187,8 @@ struct _external_acl_format { #if USE_AUTH EXT_ACL_EXT_USER, #endif + EXT_ACL_EXT_LOG, + EXT_ACL_TAG, EXT_ACL_END } type; external_acl_format *next; @@ -464,6 +466,10 @@ parse_externalAclHelper(external_acl ** list) else if (strcmp(token, "%EXT_USER") == 0) format->type = _external_acl_format::EXT_ACL_EXT_USER; #endif + else if (strcmp(token, "%EXT_LOG") == 0) + format->type = _external_acl_format::EXT_ACL_EXT_LOG; + else if (strcmp(token, "%TAG") == 0) + format->type = _external_acl_format::EXT_ACL_TAG; else { debugs(0,0, "ERROR: Unknown Format token " << token); self_destruct(); @@ -602,6 +608,8 @@ dump_externalAclHelper(StoreEntry * sentry, const char *name, const external_acl #if USE_AUTH DUMP_EXT_ACL_TYPE(EXT_USER); #endif + DUMP_EXT_ACL_TYPE(EXT_LOG); + DUMP_EXT_ACL_TYPE(TAG); default: fatal("unknown external_acl format error"); break; @@ -1068,6 +1076,12 @@ makeExternalAclKey(ACLFilledChecklist * ch, external_acl_data * acl_data) str = request->extacl_user.termedBuf(); break; #endif + case _external_acl_format::EXT_ACL_EXT_LOG: + str = request->extacl_log.termedBuf(); + break; + case _external_acl_format::EXT_ACL_TAG: + str = request->tag.termedBuf(); + break; case _external_acl_format::EXT_ACL_UNKNOWN: case _external_acl_format::EXT_ACL_END: