/*
- * $Id: acl.cc,v 1.72 1997/01/10 18:48:42 wessels Exp $
+ * $Id: acl.cc,v 1.73 1997/01/10 23:14:20 wessels Exp $
*
* DEBUG: section 28 Access Control
* AUTHOR: Duane Wessels
return 1;
}
+static struct _acl_ip_data *
+aclParseIpData(const char *t)
+{
+ LOCAL_ARRAY(char, addr1, 256);
+ LOCAL_ARRAY(char, addr2, 256);
+ LOCAL_ARRAY(char, mask, 256);
+ struct _acl_ip_data *q = xcalloc(1, sizeof(struct _acl_ip_data));
+ if (!strcasecmp(t, "all")) {
+ q->addr1.s_addr = 0;
+ q->addr2.s_addr = 0;
+ q->mask.s_addr = 0;
+ return q;
+ }
+ memset(addr1, 0, 256);
+ memset(addr2, 0, 256);
+ memset(mask, 0, 256);
+ if (sscanf(t, "%[0-9.]-%[0-9.]/%[0-9.]", addr1, addr2, mask) == 3) {
+ (void) 0;
+ } else if (sscanf(t, "%[0-9.]-%[0-9.]", addr1, addr2) == 2) {
+ mask[0] = '\0';
+ } else if (sscanf(t, "%[0-9.]/%[0-9.]", addr1, mask) == 2) {
+ addr2[0] = '\0';
+ } else if (sscanf(t, "%[0-9.]", addr1) == 1) {
+ addr2[0] = '\0';
+ mask[0] = '\0';
+ } else if (sscanf(t, "%[^/]/%s", addr1, mask) == 2) {
+ addr2[0] = '\0';
+ } else if (sscanf(t, "%s", addr1) == 1) {
+ addr2[0] = '\0';
+ mask[0] = '\0';
+ } else {
+ debug(28, 0, "aclParseIpList: Bad host/IP: '%s'\n", t);
+ safe_free(q);
+ return NULL;
+ }
+ /* Decode addr1 */
+ if (!decode_addr(addr1, &q->addr1, &q->mask)) {
+ debug(28, 0, "%s line %d: %s\n",
+ cfg_filename, config_lineno, config_input_line);
+ debug(28, 0, "aclParseIpList: Ignoring invalid IP acl entry: unknown first address '%s'\n", addr1);
+ safe_free(q);
+ return NULL;
+ }
+ /* Decode addr2 */
+ if (*addr2 && !decode_addr(addr2, &q->addr2, &q->mask)) {
+ debug(28, 0, "%s line %d: %s\n",
+ cfg_filename, config_lineno, config_input_line);
+ debug(28, 0, "aclParseIpList: Ignoring invalid IP acl entry: unknown second address '%s'\n", addr2);
+ safe_free(q);
+ return NULL;
+ }
+ /* Decode mask */
+ if (*mask && !decode_addr(mask, &q->mask, NULL)) {
+ debug(28, 0, "%s line %d: %s\n",
+ cfg_filename, config_lineno, config_input_line);
+ debug(28, 0, "aclParseIpList: Ignoring invalid IP acl entry: unknown netmask '%s'\n", mask);
+ safe_free(q);
+ return NULL;
+ }
+ q->addr1.s_addr &= q->mask.s_addr;
+ q->addr2.s_addr &= q->mask.s_addr;
+ /* 1.2.3.4/255.255.255.0 --> 1.2.3.0 */
+ return q;
+}
static struct _acl_ip_data *
aclParseIpList(void)
{
char *t = NULL;
- char *p = NULL;
struct _acl_ip_data *head = NULL;
struct _acl_ip_data **Tail = &head;
struct _acl_ip_data *q = NULL;
- LOCAL_ARRAY(char, addr1, 256);
- LOCAL_ARRAY(char, addr2, 256);
- LOCAL_ARRAY(char, mask, 256);
-
while ((t = strtokFile())) {
- q = xcalloc(1, sizeof(struct _acl_ip_data));
- if (!strcasecmp(t, "all")) {
- q->addr1.s_addr = 0;
- q->addr2.s_addr = 0;
- q->mask.s_addr = 0;
- } else {
- p = t;
- memset(addr1, 0, 256);
- memset(addr2, 0, 256);
- memset(mask, 0, 256);
-
- for (;;) {
- if (sscanf(t, "%[0-9.]-%[0-9.]/%[0-9.]", addr1, addr2, mask) == 3)
- break;
- if (sscanf(t, "%[0-9.]-%[0-9.]", addr1, addr2) == 2) {
- mask[0] = '\0';
- break;
- }
- if (sscanf(t, "%[0-9.]/%[0-9.]", addr1, mask) == 2) {
- addr2[0] = '\0';
- break;
- }
- if (sscanf(t, "%[0-9.]", addr1) == 1) {
- addr2[0] = '\0';
- mask[0] = '\0';
- break;
- }
- if (sscanf(t, "%[^/]/%s", addr1, mask) == 2) {
- addr2[0] = '\0';
- break;
- }
- if (sscanf(t, "%s", addr1) == 1) {
- addr2[0] = '\0';
- mask[0] = '\0';
- break;
- }
- debug(28, 0, "aclParseIpList: Bad host/IP: '%s'\n", t);
- break;
- }
-
- /* Decode addr1 */
- if (!decode_addr(addr1, &q->addr1, &q->mask)) {
- debug(28, 0, "%s line %d: %s\n",
- cfg_filename, config_lineno, config_input_line);
- debug(28, 0, "aclParseIpList: Ignoring invalid IP acl entry: unknown first address '%s'\n", addr1);
- safe_free(q);
- continue;
- }
- /* Decode addr2 */
- if (*addr2 && !decode_addr(addr2, &q->addr2, &q->mask)) {
- debug(28, 0, "%s line %d: %s\n",
- cfg_filename, config_lineno, config_input_line);
- debug(28, 0, "aclParseIpList: Ignoring invalid IP acl entry: unknown second address '%s'\n", addr2);
- safe_free(q);
+ if ((q = aclParseIpData(t)) == NULL)
continue;
- }
- /* Decode mask */
- if (*mask && !decode_addr(mask, &q->mask, NULL)) {
- debug(28, 0, "%s line %d: %s\n",
- cfg_filename, config_lineno, config_input_line);
- debug(28, 0, "aclParseIpList: Ignoring invalid IP acl entry: unknown netmask '%s'\n", mask);
- safe_free(q);
- continue;
- }
- q->addr1.s_addr &= q->mask.s_addr;
- q->addr2.s_addr &= q->mask.s_addr;
- /* 1.2.3.4/255.255.255.0 --> 1.2.3.0 */
- }
*(Tail) = q;
Tail = &q->next;
}
/*
- * $Id: cache_cf.cc,v 1.161 1996/12/21 07:54:50 wessels Exp $
+ * $Id: cache_cf.cc,v 1.162 1997/01/10 23:14:22 wessels Exp $
*
* DEBUG: section 3 Configuration File Parsing
* AUTHOR: Harvest Derived
#define DefaultAnnounceFile (char *)NULL /* default NONE */
#define DefaultAnnounceRate 0 /* Default off */
#define DefaultTcpRcvBufsz 0 /* use system default */
+#define DefaultUdpMaxHitObjsz SQUID_UDP_SO_SNDBUF /* from configure */
#define DefaultTcpIncomingAddr INADDR_ANY
#define DefaultTcpOutgoingAddr inaddr_none
#define DefaultUdpIncomingAddr INADDR_ANY
int a1, a2, a3, a4;
int m1, m2, m3, m4;
struct in_addr lmask;
+ int inv = 0;
int c;
if (!ip_str) {
p->next = q;
}
-
/* decode ip address */
+ if (*ip_str == '!') {
+ ip_str++;
+ inv = 1;
+ }
if (!strcasecmp(ip_str, "all")) {
a1 = a2 = a3 = a4 = 0;
lmask.s_addr = 0;
}
}
- q->access = access;
+ if (inv)
+ q->access = (access == IP_ALLOW) ? IP_DENY : IP_ALLOW;
q->addr.s_addr = htonl(a1 * 0x1000000 + a2 * 0x10000 + a3 * 0x100 + a4);
q->mask.s_addr = lmask.s_addr;
}
parseOnOff(&opt_mem_pools);
else if (!strcmp(token, "udp_hit_obj"))
parseOnOff(&opt_udp_hit_obj);
+ else if (!strcmp(token, "udp_hit_obj_size"))
+ parseIntegerValue(&Config.udpMaxHitObjsz);
else if (!strcmp(token, "forwarded_for"))
parseOnOff(&opt_forwarded_for);
else if (!strcmp(token, "log_icp_queries"))
Config.Announce.rate = DefaultAnnounceRate;
Config.Announce.on = 0;
Config.tcpRcvBufsz = DefaultTcpRcvBufsz;
+ Config.udpMaxHitObjsz = DefaultUdpMaxHitObjsz;
Config.Addrs.tcp_outgoing.s_addr = DefaultTcpOutgoingAddr;
Config.Addrs.tcp_incoming.s_addr = DefaultTcpIncomingAddr;
Config.Addrs.udp_outgoing.s_addr = DefaultUdpOutgoingAddr;
getMyHostname(),
(int) Config.Port.http,
SQUID_VERSION);
+ if (!Config.udpMaxHitObjsz || Config.udpMaxHitObjsz > SQUID_UDP_SO_SNDBUF)
+ Config.udpMaxHitObjsz = SQUID_UDP_SO_SNDBUF;
}