[squid-dev] [PATCH] Note ACL substrings matching

Christos Tsantilas christos at chtsanti.net
Mon Dec 14 10:58:10 UTC 2015


On 12/13/2015 11:31 AM, Amos Jeffries wrote:
> On 9/12/2015 10:56 p.m., Christos Tsantilas wrote:
>> There are several use cases where an annotation may contain a list of
>> values for a single key. Today it is only possible to match the full
>> annotation value.
>>
>> This patch investigates the -m flag which can be used to enable
>> delimiter separated substrings matching on annotations:
>>
>>     acl aclname note [-m[=delimiters]] name value ...
>>
>> The '-m' flag by default matches comma separated substrings. The
>> optional  "delimiters" parameter is a list of non-alphanumeric
>> characters, which can be used as alternate delimiters.
>>
>> E.g. if an external ACL sets an annotation like:
>>     "applications=http,facebook,facebook-chat"
>> the following ACLs can be used to block access to certain applications:
>>
>> acl fb_chat      note -m applications facebook-chat
>> acl db_upload    note -m  applications dropbox-upload
>> http_access      deny fb_chat
>> http_access      deny db_upload
>>
>> This is a Measurement Factory project
>
>
> Annotations from the helper are kv-pair. By definition that means
> singular value per key on helper responses. Values are also stored
> internally separate, and matched individually agaist the ACL values.

Yes, but a simple value may consists by a string which include spaces or 
comas, like those in your following examples

>
> Any concatenation of values that would need this delimiting is solely an
> artifact of the reporting method (logformat, header sets, etc).
>
>    So where is the need for this coming from?

Imagine cases where an ICAP/ECAP meta header which include a list, for 
example:
  "X-Meta-Applications: http;facebook;facebook-chat"

This is stored as one key value pair.

>
> Also;
>
> How does this interact with helpers that return multiple kv-pairs ?
>   eg. OK user=foo group=Group1 group=Group2 group=group3

the acl:
   acl GROUP1 note -m group Group1

still matches.



>
> How does it interact with kv-pair which contain the delimiter characters
> internally?
>   eg OK group=Group,1 group=Group2

To match the following kv pairs:
OK group=Group1;subgroupTesters group=Group2

Should use acls in the form:
  acl SUBGROUPTESTERS  note -m=; group subgroupTesters
  acl GROUP1 note -m; group Group1
  acl GROUP2 note -m; group Group2


>
> What about when those delimiters are escaped?
>   eg. OK group="Group\,One" group=Group%2cTwo

Well, this patch does not handle all these cases, someone has to:
   1) Fix  helper to use always at least escaped coma
   2) Use both '\' and ',' as delimiters to -m option (accepts more than 
one delimiters):
         acl GROUP2 note -m,\ group Two




>
>
> Amos
>
> _______________________________________________
> squid-dev mailing list
> squid-dev at lists.squid-cache.org
> http://lists.squid-cache.org/listinfo/squid-dev
>




More information about the squid-dev mailing list