From: hno <> Date: Sun, 7 Nov 2004 05:22:16 +0000 (+0000) Subject: Bug #1060: acl time fails to parse multiple time specifications correctly X-Git-Tag: SQUID_3_0_PRE4~999 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3f7580f9f6c3ba2bc7fc97942f0fabdfc3edbf51;p=thirdparty%2Fsquid.git Bug #1060: acl time fails to parse multiple time specifications correctly --- diff --git a/src/ACLTimeData.cc b/src/ACLTimeData.cc index 979795506c..1d0b23eff5 100644 --- a/src/ACLTimeData.cc +++ b/src/ACLTimeData.cc @@ -1,5 +1,5 @@ /* - * $Id: ACLTimeData.cc,v 1.5 2004/08/30 05:12:31 robertc Exp $ + * $Id: ACLTimeData.cc,v 1.6 2004/11/06 22:22:16 hno Exp $ * * DEBUG: section 28 Access Control * AUTHOR: Duane Wessels @@ -125,17 +125,13 @@ void ACLTimeData::parse() { ACLTimeData **Tail; + long weekbits = 0; for (Tail = &next; *Tail; Tail = &((*Tail)->next)) ; ACLTimeData *q = NULL; - if (Tail == &next) - q = new ACLTimeData; - else - q = this; - int h1, m1, h2, m2; char *t = NULL; @@ -148,35 +144,35 @@ ACLTimeData::parse() switch (*t++) { case 'S': - q->weekbits |= ACL_SUNDAY; + weekbits |= ACL_SUNDAY; break; case 'M': - q->weekbits |= ACL_MONDAY; + weekbits |= ACL_MONDAY; break; case 'T': - q->weekbits |= ACL_TUESDAY; + weekbits |= ACL_TUESDAY; break; case 'W': - q->weekbits |= ACL_WEDNESDAY; + weekbits |= ACL_WEDNESDAY; break; case 'H': - q->weekbits |= ACL_THURSDAY; + weekbits |= ACL_THURSDAY; break; case 'F': - q->weekbits |= ACL_FRIDAY; + weekbits |= ACL_FRIDAY; break; case 'A': - q->weekbits |= ACL_SATURDAY; + weekbits |= ACL_SATURDAY; break; case 'D': - q->weekbits |= ACL_WEEKDAYS; + weekbits |= ACL_WEEKDAYS; break; case '-': @@ -204,9 +200,19 @@ ACLTimeData::parse() return; } + if ((weekbits == 0) && (start == 0) && (stop == 0)) + q = this; + else + q = new ACLTimeData; + q->start = h1 * 60 + m1; + q->stop = h2 * 60 + m2; + q->weekbits = weekbits; + + weekbits = 0; + if (q->start > q->stop) { debug(28, 0) ("%s line %d: %s\n", cfg_filename, config_lineno, config_input_line); @@ -217,17 +223,35 @@ ACLTimeData::parse() return; } + + if (q->weekbits == 0) + q->weekbits = ACL_ALLWEEK; + + if (q != this) { + *(Tail) = q; + Tail = &q->next; + } } } - if (q->start == 0 && q->stop == 0) - q->stop = 23 * 60 + 59; + if (weekbits) { + + if ((weekbits == 0) && (start == 0) && (stop == 0)) + q = this; + else + q = new ACLTimeData; + + q->start = 0 * 60 + 0; - if (q->weekbits == 0) - q->weekbits = ACL_ALLWEEK; + q->stop = 24 * 60 + 0; - if (q != this) - *(Tail) = q; + q->weekbits = weekbits; + + if (q != this) { + *(Tail) = q; + Tail = &q->next; + } + } }