source: squid-ssl/trunk/fuentes/src/cf_parser.cci @ 5495

Last change on this file since 5495 was 5495, checked in by Juanma, 21 months ago

Initial release

File size: 164.6 KB
Line 
1/*
2 * Generated automatically from cf.data by ./cf_gen
3 *
4 * Abstract: This file contains routines used to configure the
5 *           variables in the squid server.
6 */
7
8static void
9default_line(const char *s)
10{
11    LOCAL_ARRAY(char, tmp_line, BUFSIZ);
12    xstrncpy(tmp_line, s, BUFSIZ);
13    xstrncpy(config_input_line, s, BUFSIZ);
14    config_lineno++;
15    parse_line(tmp_line);
16}
17
18static void
19default_all(void)
20{
21    cfg_filename = "Default Configuration";
22    config_lineno = 0;
23    default_line("workers 1");
24    // No default for cpu_affinity_map
25    // No default for auth_param
26    default_line("authenticate_cache_garbage_interval 1 hour");
27    default_line("authenticate_ttl 1 hour");
28    default_line("authenticate_ip_ttl 1 second");
29    // No default for external_acl_type
30    default_line("acl ssl::certHasExpired ssl_error X509_V_ERR_CERT_HAS_EXPIRED");
31    default_line("acl ssl::certNotYetValid ssl_error X509_V_ERR_CERT_NOT_YET_VALID");
32    default_line("acl ssl::certDomainMismatch ssl_error SQUID_X509_V_ERR_DOMAIN_MISMATCH");
33    default_line("acl ssl::certUntrusted ssl_error X509_V_ERR_INVALID_CA X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY X509_V_ERR_CERT_UNTRUSTED");
34    default_line("acl ssl::certSelfSigned ssl_error X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT");
35    default_line("acl all src all");
36    default_line("acl manager url_regex -i ^cache_object:// +i ^https?://[^/]+/squid-internal-mgr/");
37    default_line("acl localhost src 127.0.0.1/32 ::1");
38    default_line("acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1");
39    // No default for proxy_protocol_access
40    // No default for follow_x_forwarded_for
41#if FOLLOW_X_FORWARDED_FOR
42    default_line("acl_uses_indirect_client on");
43#endif
44#if FOLLOW_X_FORWARDED_FOR&&USE_DELAY_POOLS
45    default_line("delay_pool_uses_indirect_client on");
46#endif
47#if FOLLOW_X_FORWARDED_FOR
48    default_line("log_uses_indirect_client on");
49#endif
50#if FOLLOW_X_FORWARDED_FOR&&LINUX_NETFILTER
51    default_line("tproxy_uses_indirect_client off");
52#endif
53    // No default for spoof_client_ip
54    // No default for http_access
55    // No default for adapted_http_access
56    // No default for http_reply_access
57    // No default for icp_access
58    // No default for htcp_access
59    // No default for htcp_clr_access
60    // No default for miss_access
61    // No default for ident_lookup_access
62    // No default for reply_body_max_size
63    // No default for http_port
64    // No default for https_port
65    // No default for ftp_port
66    // No default for tcp_outgoing_tos
67    // No default for clientside_tos
68    // No default for tcp_outgoing_mark
69    // No default for clientside_mark
70    // No default for qos_flows
71    // No default for tcp_outgoing_address
72    default_line("host_verify_strict off");
73    default_line("client_dst_passthru on");
74#if USE_OPENSSL
75    default_line("ssl_unclean_shutdown off");
76#endif
77    // No default for ssl_engine
78    // No default for sslproxy_client_certificate
79    // No default for sslproxy_client_key
80#if USE_OPENSSL
81    default_line("sslproxy_version 1");
82#endif
83    // No default for sslproxy_options
84    // No default for sslproxy_cipher
85    // No default for sslproxy_cafile
86    // No default for sslproxy_capath
87#if USE_OPENSSL
88    default_line("sslproxy_session_ttl 300");
89#endif
90#if USE_OPENSSL
91    default_line("sslproxy_session_cache_size 2 MB");
92#endif
93    // No default for sslproxy_cert_sign_hash
94    // No default for ssl_bump
95    // No default for sslproxy_flags
96    // No default for sslproxy_cert_error
97    // No default for sslproxy_cert_sign
98    // No default for sslproxy_cert_adapt
99    // No default for sslpassword_program
100#if USE_SSL_CRTD
101    default_line("sslcrtd_program /usr/lib/squid-ssl/ssl_crtd-ssl -s /var/lib/ssl_db -M 4MB");
102#endif
103#if USE_SSL_CRTD
104    default_line("sslcrtd_children 32 startup=5 idle=1");
105#endif
106    // No default for sslcrtvalidator_program
107#if USE_OPENSSL
108    default_line("sslcrtvalidator_children 32 startup=5 idle=1 concurrency=1");
109#endif
110    // No default for cache_peer
111    // No default for cache_peer_domain
112    // No default for cache_peer_access
113    // No default for neighbor_type_domain
114    default_line("dead_peer_timeout 10 seconds");
115    default_line("forward_max_tries 25");
116    default_line("cache_mem 256 MB");
117    default_line("maximum_object_size_in_memory 512 KB");
118    // No default for memory_cache_shared
119    default_line("memory_cache_mode always");
120    default_line("memory_replacement_policy lru");
121    default_line("cache_replacement_policy lru");
122    default_line("minimum_object_size 0 KB");
123    default_line("maximum_object_size 4 MB");
124    // No default for cache_dir
125    default_line("store_dir_select_algorithm least-load");
126    default_line("max_open_disk_fds 0");
127    default_line("cache_swap_low 90");
128    default_line("cache_swap_high 95");
129    // No default for logformat
130    // No default for access_log
131    // No default for icap_log
132    default_line("logfile_daemon /usr/lib/squid-ssl/log_file_daemon-ssl");
133    // No default for stats_collection
134    // No default for cache_store_log
135    // No default for cache_swap_state
136    default_line("logfile_rotate 0");
137    default_line("mime_table /usr/share/squid-ssl/mime.conf");
138    default_line("log_mime_hdrs off");
139    default_line("pid_filename /var/run/squid-ssl.pid");
140    default_line("client_netmask no_addr");
141    default_line("strip_query_terms on");
142    default_line("buffered_logs off");
143#if USE_ICMP
144    default_line("netdb_filename stdio:/var/log/squid-ssl/netdb.state");
145#endif
146    // No default for cache_log
147    default_line("debug_options ALL,1");
148    // No default for coredump_dir
149    default_line("ftp_user Squid@");
150    default_line("ftp_passive on");
151    default_line("ftp_epsv_all off");
152    // No default for ftp_epsv
153    default_line("ftp_eprt on");
154    default_line("ftp_sanitycheck on");
155    default_line("ftp_telnet_protocol on");
156    default_line("diskd_program /usr/lib/squid-ssl/diskd-ssl");
157#if USE_UNLINKD
158    default_line("unlinkd_program /usr/lib/squid-ssl/unlinkd-ssl");
159#endif
160#if USE_ICMP
161    default_line("pinger_program /usr/lib/squid-ssl/pinger-ssl");
162#endif
163#if USE_ICMP
164    default_line("pinger_enable on");
165#endif
166    // No default for url_rewrite_program
167    default_line("url_rewrite_children 20 startup=0 idle=1 concurrency=0");
168    default_line("url_rewrite_host_header on");
169    // No default for url_rewrite_access
170    default_line("url_rewrite_bypass off");
171    default_line("url_rewrite_extras \"%>a/%>A %un %>rm myip=%la myport=%lp\"");
172    // No default for store_id_program
173    default_line("store_id_extras \"%>a/%>A %un %>rm myip=%la myport=%lp\"");
174    default_line("store_id_children 20 startup=0 idle=1 concurrency=0");
175    // No default for store_id_access
176    default_line("store_id_bypass on");
177    // No default for cache
178    // No default for send_hit
179    // No default for store_miss
180    default_line("max_stale 1 week");
181    // No default for refresh_pattern
182    default_line("quick_abort_min 16 KB");
183    default_line("quick_abort_max 16 KB");
184    default_line("quick_abort_pct 95");
185    default_line("read_ahead_gap 16 KB");
186#if USE_HTTP_VIOLATIONS
187    default_line("negative_ttl 0 seconds");
188#endif
189    default_line("positive_dns_ttl 6 hours");
190    default_line("negative_dns_ttl 1 minutes");
191    // No default for range_offset_limit
192    default_line("minimum_expiry_time 60 seconds");
193    default_line("store_avg_object_size 13 KB");
194    default_line("store_objects_per_bucket 20");
195    default_line("request_header_max_size 64 KB");
196    default_line("reply_header_max_size 64 KB");
197    default_line("request_body_max_size 0 KB");
198    default_line("client_request_buffer_max_size 512 KB");
199    // No default for broken_posts
200#if FOLLOW_X_FORWARDED_FOR&&USE_ADAPTATION
201    default_line("adaptation_uses_indirect_client on");
202#endif
203#if USE_HTTP_VIOLATIONS
204    default_line("via on");
205#endif
206    default_line("ie_refresh off");
207    default_line("vary_ignore_expire off");
208    default_line("request_entities off");
209    // No default for request_header_access
210    // No default for reply_header_access
211    // No default for request_header_replace
212    // No default for reply_header_replace
213    // No default for request_header_add
214    // No default for note
215    default_line("relaxed_header_parser on");
216    default_line("collapsed_forwarding off");
217    default_line("forward_timeout 4 minutes");
218    default_line("connect_timeout 1 minute");
219    default_line("peer_connect_timeout 30 seconds");
220    default_line("read_timeout 15 minutes");
221    default_line("write_timeout 15 minutes");
222    default_line("request_timeout 5 minutes");
223    default_line("client_idle_pconn_timeout 2 minutes");
224    default_line("ftp_client_idle_timeout 30 minutes");
225    default_line("client_lifetime 1 day");
226    default_line("half_closed_clients off");
227    default_line("server_idle_pconn_timeout 1 minute");
228#if USE_IDENT
229    default_line("ident_timeout 10 seconds");
230#endif
231    default_line("shutdown_lifetime 30 seconds");
232    default_line("cache_mgr webmaster");
233    // No default for mail_from
234    default_line("mail_program mail");
235    default_line("cache_effective_user proxy");
236    // No default for cache_effective_group
237    default_line("httpd_suppress_version_string off");
238    // No default for visible_hostname
239    // No default for unique_hostname
240    // No default for hostname_aliases
241    default_line("umask 027");
242    default_line("announce_period 0");
243    default_line("announce_host tracker.ircache.net");
244    // No default for announce_file
245    default_line("announce_port 3131");
246    // No default for httpd_accel_surrogate_id
247    default_line("http_accel_surrogate_remote off");
248#if USE_SQUID_ESI
249    default_line("esi_parser custom");
250#endif
251#if USE_DELAY_POOLS
252    default_line("delay_pools 0");
253#endif
254    // No default for delay_class
255    // No default for delay_access
256    // No default for delay_parameters
257#if USE_DELAY_POOLS
258    default_line("delay_initial_bucket_level 50");
259#endif
260#if USE_DELAY_POOLS
261    default_line("client_delay_pools 0");
262#endif
263#if USE_DELAY_POOLS
264    default_line("client_delay_initial_bucket_level 50");
265#endif
266    // No default for client_delay_parameters
267    // No default for client_delay_access
268#if USE_WCCP
269    default_line("wccp_router any_addr");
270#endif
271    // No default for wccp2_router
272#if USE_WCCP
273    default_line("wccp_version 4");
274#endif
275#if USE_WCCPv2
276    default_line("wccp2_rebuild_wait on");
277#endif
278#if USE_WCCPv2
279    default_line("wccp2_forwarding_method gre");
280#endif
281#if USE_WCCPv2
282    default_line("wccp2_return_method gre");
283#endif
284#if USE_WCCPv2
285    default_line("wccp2_assignment_method hash");
286#endif
287    // No default for wccp2_service
288    // No default for wccp2_service_info
289#if USE_WCCPv2
290    default_line("wccp2_weight 10000");
291#endif
292#if USE_WCCP
293    default_line("wccp_address 0.0.0.0");
294#endif
295#if USE_WCCPv2
296    default_line("wccp2_address 0.0.0.0");
297#endif
298    default_line("client_persistent_connections on");
299    default_line("server_persistent_connections on");
300    default_line("persistent_connection_after_error on");
301    default_line("detect_broken_pconn off");
302#if USE_CACHE_DIGESTS
303    default_line("digest_generation on");
304#endif
305#if USE_CACHE_DIGESTS
306    default_line("digest_bits_per_entry 5");
307#endif
308#if USE_CACHE_DIGESTS
309    default_line("digest_rebuild_period 1 hour");
310#endif
311#if USE_CACHE_DIGESTS
312    default_line("digest_rewrite_period 1 hour");
313#endif
314#if USE_CACHE_DIGESTS
315    default_line("digest_swapout_chunk_size 4096 bytes");
316#endif
317#if USE_CACHE_DIGESTS
318    default_line("digest_rebuild_chunk_percentage 10");
319#endif
320#if SQUID_SNMP
321    default_line("snmp_port 0");
322#endif
323    // No default for snmp_access
324#if SQUID_SNMP
325    default_line("snmp_incoming_address any_addr");
326#endif
327#if SQUID_SNMP
328    default_line("snmp_outgoing_address no_addr");
329#endif
330    default_line("icp_port 0");
331#if USE_HTCP
332    default_line("htcp_port 0");
333#endif
334    default_line("log_icp_queries on");
335    default_line("udp_incoming_address any_addr");
336    default_line("udp_outgoing_address no_addr");
337    default_line("icp_hit_stale off");
338    default_line("minimum_direct_hops 4");
339    default_line("minimum_direct_rtt 400");
340    default_line("netdb_low 900");
341    default_line("netdb_high 1000");
342    default_line("netdb_ping_period 5 minutes");
343    default_line("query_icmp off");
344    default_line("test_reachability off");
345    default_line("icp_query_timeout 0");
346    default_line("maximum_icp_query_timeout 2000");
347    default_line("minimum_icp_query_timeout 5");
348    default_line("background_ping_rate 10 seconds");
349    // No default for mcast_groups
350#if MULTICAST_MISS_STREAM
351    default_line("mcast_miss_addr no_addr");
352#endif
353#if MULTICAST_MISS_STREAM
354    default_line("mcast_miss_ttl 16");
355#endif
356#if MULTICAST_MISS_STREAM
357    default_line("mcast_miss_port 3135");
358#endif
359#if MULTICAST_MISS_STREAM
360    default_line("mcast_miss_encode_key XXXXXXXXXXXXXXXX");
361#endif
362    default_line("mcast_icp_query_timeout 2000");
363    default_line("icon_directory /usr/share/squid-ssl/icons");
364    default_line("global_internal_static on");
365    default_line("short_icon_urls on");
366    // No default for error_directory
367    // No default for error_default_language
368#if USE_ERR_LOCALES
369    default_line("error_log_languages on");
370#endif
371    default_line("err_page_stylesheet /etc/squid-ssl/errorpage.css");
372    // No default for err_html_text
373    default_line("email_err_data on");
374    // No default for deny_info
375    default_line("nonhierarchical_direct on");
376    default_line("prefer_direct off");
377    default_line("cache_miss_revalidate on");
378    // No default for always_direct
379    // No default for never_direct
380    default_line("incoming_udp_average 6");
381    default_line("incoming_tcp_average 4");
382    default_line("incoming_dns_average 4");
383    default_line("min_udp_poll_cnt 8");
384    default_line("min_dns_poll_cnt 8");
385    default_line("min_tcp_poll_cnt 8");
386    // No default for accept_filter
387    default_line("client_ip_max_connections -1");
388    default_line("tcp_recv_bufsize 0 bytes");
389#if ICAP_CLIENT
390    default_line("icap_enable off");
391#endif
392    // No default for icap_connect_timeout
393    // No default for icap_io_timeout
394#if ICAP_CLIENT
395    default_line("icap_service_failure_limit 10");
396#endif
397#if ICAP_CLIENT
398    default_line("icap_service_revival_delay 180");
399#endif
400#if ICAP_CLIENT
401    default_line("icap_preview_enable on");
402#endif
403#if ICAP_CLIENT
404    default_line("icap_preview_size -1");
405#endif
406#if ICAP_CLIENT
407    default_line("icap_206_enable on");
408#endif
409#if ICAP_CLIENT
410    default_line("icap_default_options_ttl 60");
411#endif
412#if ICAP_CLIENT
413    default_line("icap_persistent_connections on");
414#endif
415#if USE_ADAPTATION
416    default_line("adaptation_send_client_ip off");
417#endif
418#if USE_ADAPTATION
419    default_line("adaptation_send_username off");
420#endif
421#if ICAP_CLIENT
422    default_line("icap_client_username_header X-Client-Username");
423#endif
424#if ICAP_CLIENT
425    default_line("icap_client_username_encode off");
426#endif
427    // No default for icap_service
428    // No default for icap_class
429    // No default for icap_access
430#if USE_ECAP
431    default_line("ecap_enable off");
432#endif
433    // No default for ecap_service
434    // No default for loadable_modules
435    // No default for adaptation_service_set
436    // No default for adaptation_service_chain
437    // No default for adaptation_access
438#if USE_ADAPTATION
439    default_line("adaptation_service_iteration_limit 16");
440#endif
441    // No default for adaptation_masterx_shared_names
442    // No default for adaptation_meta
443    // No default for icap_retry
444#if ICAP_CLIENT
445    default_line("icap_retry_limit 0");
446#endif
447    default_line("check_hostnames off");
448    default_line("allow_underscore on");
449    default_line("dns_retransmit_interval 5 seconds");
450    default_line("dns_timeout 30 seconds");
451    // No default for dns_packet_max
452    default_line("dns_defnames off");
453    default_line("dns_multicast_local off");
454    // No default for dns_nameservers
455    default_line("hosts_file /etc/hosts");
456    // No default for append_domain
457    default_line("ignore_unknown_nameservers on");
458    default_line("dns_v4_first off");
459    default_line("ipcache_size 1024");
460    default_line("ipcache_low 90");
461    default_line("ipcache_high 95");
462    default_line("fqdncache_size 1024");
463    default_line("configuration_includes_quoted_values off");
464    default_line("memory_pools on");
465    default_line("memory_pools_limit 5 MB");
466    default_line("forwarded_for on");
467    // No default for cachemgr_passwd
468    default_line("client_db on");
469    default_line("refresh_all_ims off");
470#if USE_HTTP_VIOLATIONS
471    default_line("reload_into_ims off");
472#endif
473    default_line("connect_retries 0");
474    default_line("retry_on_error off");
475    default_line("as_whois_server whois.ra.net");
476    default_line("offline_mode off");
477    default_line("uri_whitespace strip");
478    // No default for chroot
479    default_line("balance_on_multiple_ip off");
480    default_line("pipeline_prefetch 0");
481    default_line("high_response_time_warning 0");
482    default_line("high_page_fault_warning 0");
483#if HAVE_MSTATS&&HAVE_GNUMALLOC_H
484    default_line("high_memory_warning 0 KB");
485#endif
486    default_line("sleep_after_fork 0");
487#if _SQUID_WINDOWS_
488    default_line("windows_ipaddrchangemonitor on");
489#endif
490#if USE_SQUID_EUI
491    default_line("eui_lookup on");
492#endif
493    default_line("max_filedescriptors 0");
494    cfg_filename = NULL;
495}
496
497static void
498defaults_if_none(void)
499{
500    cfg_filename = "Default Configuration (if absent)";
501    config_lineno = 0;
502#if FOLLOW_X_FORWARDED_FOR
503    if (check_null_acl_access(Config.accessList.followXFF)) {
504        default_line("follow_x_forwarded_for deny all");
505    }
506#endif
507    if (check_null_acl_access(Config.accessList.http)) {
508        default_line("http_access deny all");
509    }
510    if (check_null_access_log(Config.Log.accesslogs)) {
511        default_line("access_log daemon:/var/log/squid-ssl/access.log squid");
512    }
513    if (check_null_string(Debug::cache_log)) {
514        default_line("cache_log /var/log/squid-ssl/cache.log");
515    }
516    if (check_null_string(Config.coredump_dir)) {
517        default_line("coredump_dir none");
518    }
519#if USE_WCCPv2
520    if (check_null_wccp2_service(Config.Wccp2.info)) {
521        default_line("wccp2_service standard 0");
522    }
523#endif
524#if ICAP_CLIENT
525    if (check_null_acl_access(Adaptation::Icap::TheConfig.repeat)) {
526        default_line("icap_retry deny all");
527    }
528#endif
529    cfg_filename = NULL;
530}
531
532static void
533defaults_postscriptum(void)
534{
535    cfg_filename = "Default Configuration (postscriptum)";
536    config_lineno = 0;
537#if USE_OPENSSL
538    default_line("sslproxy_cert_sign signUntrusted ssl::certUntrusted");
539    default_line("sslproxy_cert_sign signSelf ssl::certSelfSigned");
540    default_line("sslproxy_cert_sign signTrusted all");
541#endif
542    cfg_filename = NULL;
543}
544
545static int
546parse_line(char *buff)
547{
548        char    *token;
549        if ((token = strtok(buff, w_space)) == NULL)
550                return 1;       /* ignore empty lines */
551        ConfigParser::SetCfgLine(strtok(NULL, ""));
552    if (!strcmp(token, "broken_vary_encoding")) {
553        cfg_directive = "broken_vary_encoding";
554        debugs(0, DBG_CRITICAL, "ERROR: Directive 'broken_vary_encoding' is obsolete.");
555        debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "broken_vary_encoding : This option is not yet supported by Squid-3.");
556        parse_obsolete(token);
557        cfg_directive = NULL;
558        return 1;
559    };
560    if (!strcmp(token, "cache_vary")) {
561        cfg_directive = "cache_vary";
562        debugs(0, DBG_CRITICAL, "ERROR: Directive 'cache_vary' is obsolete.");
563        debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "cache_vary : This option is not yet supported by Squid-3.");
564        parse_obsolete(token);
565        cfg_directive = NULL;
566        return 1;
567    };
568    if (!strcmp(token, "error_map")) {
569        cfg_directive = "error_map";
570        debugs(0, DBG_CRITICAL, "ERROR: Directive 'error_map' is obsolete.");
571        debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "error_map : This option is not yet supported by Squid-3.");
572        parse_obsolete(token);
573        cfg_directive = NULL;
574        return 1;
575    };
576    if (!strcmp(token, "external_refresh_check")) {
577        cfg_directive = "external_refresh_check";
578        debugs(0, DBG_CRITICAL, "ERROR: Directive 'external_refresh_check' is obsolete.");
579        debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "external_refresh_check : This option is not yet supported by Squid-3.");
580        parse_obsolete(token);
581        cfg_directive = NULL;
582        return 1;
583    };
584    if (!strcmp(token, "location_rewrite_program")) {
585        cfg_directive = "location_rewrite_program";
586        debugs(0, DBG_CRITICAL, "ERROR: Directive 'location_rewrite_program' is obsolete.");
587        debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "location_rewrite_program : This option is not yet supported by Squid-3.");
588        parse_obsolete(token);
589        cfg_directive = NULL;
590        return 1;
591    };
592    if (!strcmp(token, "location_rewrite_concurrency")) {
593        cfg_directive = "location_rewrite_concurrency";
594        debugs(0, DBG_CRITICAL, "ERROR: Directive 'location_rewrite_concurrency' is obsolete.");
595        debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "location_rewrite_concurrency : This option is not yet supported by Squid-3.");
596        parse_obsolete(token);
597        cfg_directive = NULL;
598        return 1;
599    };
600    if (!strcmp(token, "location_rewrite_children")) {
601        cfg_directive = "location_rewrite_children";
602        debugs(0, DBG_CRITICAL, "ERROR: Directive 'location_rewrite_children' is obsolete.");
603        debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "location_rewrite_children : This option is not yet supported by Squid-3.");
604        parse_obsolete(token);
605        cfg_directive = NULL;
606        return 1;
607    };
608    if (!strcmp(token, "location_rewrite_access")) {
609        cfg_directive = "location_rewrite_access";
610        debugs(0, DBG_CRITICAL, "ERROR: Directive 'location_rewrite_access' is obsolete.");
611        debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "location_rewrite_access : This option is not yet supported by Squid-3.");
612        parse_obsolete(token);
613        cfg_directive = NULL;
614        return 1;
615    };
616    if (!strcmp(token, "refresh_stale_hit")) {
617        cfg_directive = "refresh_stale_hit";
618        debugs(0, DBG_CRITICAL, "ERROR: Directive 'refresh_stale_hit' is obsolete.");
619        debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "refresh_stale_hit : This option is not yet supported by Squid-3.");
620        parse_obsolete(token);
621        cfg_directive = NULL;
622        return 1;
623    };
624    if (!strcmp(token, "hierarchy_stoplist")) {
625        cfg_directive = "hierarchy_stoplist";
626        debugs(0, DBG_CRITICAL, "ERROR: Directive 'hierarchy_stoplist' is obsolete.");
627        debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "hierarchy_stoplist : Remove this line. Use always_direct or cache_peer_access ACLs instead if you need to prevent cache_peer use.");
628        parse_obsolete(token);
629        cfg_directive = NULL;
630        return 1;
631    };
632    if (!strcmp(token, "log_access")) {
633        cfg_directive = "log_access";
634        debugs(0, DBG_CRITICAL, "ERROR: Directive 'log_access' is obsolete.");
635        debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "log_access : Remove this line. Use acls with access_log directives to control access logging");
636        parse_obsolete(token);
637        cfg_directive = NULL;
638        return 1;
639    };
640    if (!strcmp(token, "log_icap")) {
641        cfg_directive = "log_icap";
642        debugs(0, DBG_CRITICAL, "ERROR: Directive 'log_icap' is obsolete.");
643        debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "log_icap : Remove this line. Use acls with icap_log directives to control icap logging");
644        parse_obsolete(token);
645        cfg_directive = NULL;
646        return 1;
647    };
648    if (!strcmp(token, "ignore_ims_on_miss")) {
649        cfg_directive = "ignore_ims_on_miss";
650        debugs(0, DBG_CRITICAL, "ERROR: Directive 'ignore_ims_on_miss' is obsolete.");
651        debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ignore_ims_on_miss : Remove this line. The HTTP/1.1 feature is now configured by 'cache_miss_revalidate'.");
652        parse_obsolete(token);
653        cfg_directive = NULL;
654        return 1;
655    };
656    if (!strcmp(token, "chunked_request_body_max_size")) {
657        cfg_directive = "chunked_request_body_max_size";
658        debugs(0, DBG_CRITICAL, "ERROR: Directive 'chunked_request_body_max_size' is obsolete.");
659        debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "chunked_request_body_max_size : Remove this line. Squid is now HTTP/1.1 compliant.");
660        parse_obsolete(token);
661        cfg_directive = NULL;
662        return 1;
663    };
664    if (!strcmp(token, "dns_v4_fallback")) {
665        cfg_directive = "dns_v4_fallback";
666        debugs(0, DBG_CRITICAL, "ERROR: Directive 'dns_v4_fallback' is obsolete.");
667        debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "dns_v4_fallback : Remove this line. Squid performs a 'Happy Eyeballs' algorithm, the 'fallback' algorithm is no longer relevant.");
668        parse_obsolete(token);
669        cfg_directive = NULL;
670        return 1;
671    };
672    if (!strcmp(token, "emulate_httpd_log")) {
673        cfg_directive = "emulate_httpd_log";
674        debugs(0, DBG_CRITICAL, "ERROR: Directive 'emulate_httpd_log' is obsolete.");
675        debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "emulate_httpd_log : Replace this with an access_log directive using the format 'common' or 'combined'.");
676        parse_obsolete(token);
677        cfg_directive = NULL;
678        return 1;
679    };
680    if (!strcmp(token, "forward_log")) {
681        cfg_directive = "forward_log";
682        debugs(0, DBG_CRITICAL, "ERROR: Directive 'forward_log' is obsolete.");
683        debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "forward_log : Use a regular access.log with ACL limiting it to MISS events.");
684        parse_obsolete(token);
685        cfg_directive = NULL;
686        return 1;
687    };
688    if (!strcmp(token, "ftp_list_width")) {
689        cfg_directive = "ftp_list_width";
690        debugs(0, DBG_CRITICAL, "ERROR: Directive 'ftp_list_width' is obsolete.");
691        debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ftp_list_width : Remove this line. Configure FTP page display using the CSS controls in errorpages.css instead.");
692        parse_obsolete(token);
693        cfg_directive = NULL;
694        return 1;
695    };
696    if (!strcmp(token, "ignore_expect_100")) {
697        cfg_directive = "ignore_expect_100";
698        debugs(0, DBG_CRITICAL, "ERROR: Directive 'ignore_expect_100' is obsolete.");
699        debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ignore_expect_100 : Remove this line. The HTTP/1.1 feature is now fully supported by default.");
700        parse_obsolete(token);
701        cfg_directive = NULL;
702        return 1;
703    };
704    if (!strcmp(token, "log_fqdn")) {
705        cfg_directive = "log_fqdn";
706        debugs(0, DBG_CRITICAL, "ERROR: Directive 'log_fqdn' is obsolete.");
707        debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "log_fqdn : Remove this option from your config. To log FQDN use %>A in the log format.");
708        parse_obsolete(token);
709        cfg_directive = NULL;
710        return 1;
711    };
712    if (!strcmp(token, "log_ip_on_direct")) {
713        cfg_directive = "log_ip_on_direct";
714        debugs(0, DBG_CRITICAL, "ERROR: Directive 'log_ip_on_direct' is obsolete.");
715        debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "log_ip_on_direct : Remove this option from your config. To log server or peer names use %<A in the log format.");
716        parse_obsolete(token);
717        cfg_directive = NULL;
718        return 1;
719    };
720    if (!strcmp(token, "maximum_single_addr_tries")) {
721        cfg_directive = "maximum_single_addr_tries";
722        debugs(0, DBG_CRITICAL, "ERROR: Directive 'maximum_single_addr_tries' is obsolete.");
723        debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "maximum_single_addr_tries : Replaced by connect_retries. The behaviour has changed, please read the documentation before altering.");
724        parse_obsolete(token);
725        cfg_directive = NULL;
726        return 1;
727    };
728    if (!strcmp(token, "referer_log")) {
729        cfg_directive = "referer_log";
730        debugs(0, DBG_CRITICAL, "ERROR: Directive 'referer_log' is obsolete.");
731        debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "referer_log : Replace this with an access_log directive using the format 'referrer'.");
732        parse_obsolete(token);
733        cfg_directive = NULL;
734        return 1;
735    };
736    if (!strcmp(token, "referrer_log")) {
737        cfg_directive = "referrer_log";
738        debugs(0, DBG_CRITICAL, "ERROR: Directive 'referrer_log' is obsolete.");
739        debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "referrer_log : Replace this with an access_log directive using the format 'referrer'.");
740        parse_obsolete(token);
741        cfg_directive = NULL;
742        return 1;
743    };
744    if (!strcmp(token, "update_headers")) {
745        cfg_directive = "update_headers";
746        debugs(0, DBG_CRITICAL, "ERROR: Directive 'update_headers' is obsolete.");
747        debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "update_headers : Remove this line. The feature is supported by default in storage types where update is implemented.");
748        parse_obsolete(token);
749        cfg_directive = NULL;
750        return 1;
751    };
752    if (!strcmp(token, "url_rewrite_concurrency")) {
753        cfg_directive = "url_rewrite_concurrency";
754        debugs(0, DBG_CRITICAL, "ERROR: Directive 'url_rewrite_concurrency' is obsolete.");
755        debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "url_rewrite_concurrency : Remove this line. Set the 'concurrency=' option of url_rewrite_children instead.");
756        parse_obsolete(token);
757        cfg_directive = NULL;
758        return 1;
759    };
760    if (!strcmp(token, "useragent_log")) {
761        cfg_directive = "useragent_log";
762        debugs(0, DBG_CRITICAL, "ERROR: Directive 'useragent_log' is obsolete.");
763        debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "useragent_log : Replace this with an access_log directive using the format 'useragent'.");
764        parse_obsolete(token);
765        cfg_directive = NULL;
766        return 1;
767    };
768    if (!strcmp(token, "dns_testnames")) {
769        cfg_directive = "dns_testnames";
770        debugs(0, DBG_CRITICAL, "ERROR: Directive 'dns_testnames' is obsolete.");
771        debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "dns_testnames : Remove this line. DNS is no longer tested on startup.");
772        parse_obsolete(token);
773        cfg_directive = NULL;
774        return 1;
775    };
776    if (!strcmp(token, "extension_methods")) {
777        cfg_directive = "extension_methods";
778        debugs(0, DBG_CRITICAL, "ERROR: Directive 'extension_methods' is obsolete.");
779        debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "extension_methods : Remove this line. All valid methods for HTTP are accepted by default.");
780        parse_obsolete(token);
781        cfg_directive = NULL;
782        return 1;
783    };
784    if (!strcmp(token, "zero_buffers")) {
785        cfg_directive = "zero_buffers";
786        debugs(0, DBG_CRITICAL, "ERROR: Directive 'zero_buffers' is obsolete.");
787        parse_obsolete(token);
788        cfg_directive = NULL;
789        return 1;
790    };
791    if (!strcmp(token, "incoming_rate")) {
792        cfg_directive = "incoming_rate";
793        debugs(0, DBG_CRITICAL, "ERROR: Directive 'incoming_rate' is obsolete.");
794        parse_obsolete(token);
795        cfg_directive = NULL;
796        return 1;
797    };
798    if (!strcmp(token, "server_http11")) {
799        cfg_directive = "server_http11";
800        debugs(0, DBG_CRITICAL, "ERROR: Directive 'server_http11' is obsolete.");
801        debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "server_http11 : Remove this line. HTTP/1.1 is supported by default.");
802        parse_obsolete(token);
803        cfg_directive = NULL;
804        return 1;
805    };
806    if (!strcmp(token, "upgrade_http0.9")) {
807        cfg_directive = "upgrade_http0.9";
808        debugs(0, DBG_CRITICAL, "ERROR: Directive 'upgrade_http0.9' is obsolete.");
809        debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "upgrade_http0.9 : Remove this line. ICY/1.0 streaming protocol is supported by default.");
810        parse_obsolete(token);
811        cfg_directive = NULL;
812        return 1;
813    };
814    if (!strcmp(token, "zph_local")) {
815        cfg_directive = "zph_local";
816        debugs(0, DBG_CRITICAL, "ERROR: Directive 'zph_local' is obsolete.");
817        debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "zph_local : Alter these entries. Use the qos_flows directive instead.");
818        parse_obsolete(token);
819        cfg_directive = NULL;
820        return 1;
821    };
822    if (!strcmp(token, "zph_sibling")) {
823        cfg_directive = "zph_sibling";
824        debugs(0, DBG_CRITICAL, "ERROR: Directive 'zph_sibling' is obsolete.");
825        debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "zph_sibling : Alter these entries. Use the qos_flows directive instead.");
826        parse_obsolete(token);
827        cfg_directive = NULL;
828        return 1;
829    };
830    if (!strcmp(token, "zph_parent")) {
831        cfg_directive = "zph_parent";
832        debugs(0, DBG_CRITICAL, "ERROR: Directive 'zph_parent' is obsolete.");
833        debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "zph_parent : Alter these entries. Use the qos_flows directive instead.");
834        parse_obsolete(token);
835        cfg_directive = NULL;
836        return 1;
837    };
838    if (!strcmp(token, "zph_option")) {
839        cfg_directive = "zph_option";
840        debugs(0, DBG_CRITICAL, "ERROR: Directive 'zph_option' is obsolete.");
841        debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "zph_option : Alter these entries. Use the qos_flows directive instead.");
842        parse_obsolete(token);
843        cfg_directive = NULL;
844        return 1;
845    };
846    if (!strcmp(token, "zph_mode")) {
847        cfg_directive = "zph_mode";
848        debugs(0, DBG_CRITICAL, "ERROR: Directive 'zph_mode' is obsolete.");
849        debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "zph_mode : Alter these entries. Use the qos_flows directive instead.");
850        parse_obsolete(token);
851        cfg_directive = NULL;
852        return 1;
853    };
854    if (!strcmp(token, "header_access")) {
855        cfg_directive = "header_access";
856        debugs(0, DBG_CRITICAL, "ERROR: Directive 'header_access' is obsolete.");
857        debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "header_access : Since squid-3.0 replace with request_header_access or reply_header_access");
858        debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "header_access : depending on whether you wish to match client requests or server replies.");
859        parse_obsolete(token);
860        cfg_directive = NULL;
861        return 1;
862    };
863    if (!strcmp(token, "httpd_accel_no_pmtu_disc")) {
864        cfg_directive = "httpd_accel_no_pmtu_disc";
865        debugs(0, DBG_CRITICAL, "ERROR: Directive 'httpd_accel_no_pmtu_disc' is obsolete.");
866        debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "httpd_accel_no_pmtu_disc : Since squid-3.0 use the 'disable-pmtu-discovery' flag on http_port instead.");
867        parse_obsolete(token);
868        cfg_directive = NULL;
869        return 1;
870    };
871    if (!strcmp(token, "wais_relay_host")) {
872        cfg_directive = "wais_relay_host";
873        debugs(0, DBG_CRITICAL, "ERROR: Directive 'wais_relay_host' is obsolete.");
874        debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "wais_relay_host : Replace this line with 'cache_peer' configuration.");
875        parse_obsolete(token);
876        cfg_directive = NULL;
877        return 1;
878    };
879    if (!strcmp(token, "wais_relay_port")) {
880        cfg_directive = "wais_relay_port";
881        debugs(0, DBG_CRITICAL, "ERROR: Directive 'wais_relay_port' is obsolete.");
882        debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "wais_relay_port : Replace this line with 'cache_peer' configuration.");
883        parse_obsolete(token);
884        cfg_directive = NULL;
885        return 1;
886    };
887    if (!strcmp(token, "workers")) {
888        cfg_directive = "workers";
889        parse_int(&Config.workers);
890        cfg_directive = NULL;
891        return 1;
892    };
893    if (!strcmp(token, "cpu_affinity_map")) {
894        cfg_directive = "cpu_affinity_map";
895        parse_CpuAffinityMap(&Config.cpuAffinityMap);
896        cfg_directive = NULL;
897        return 1;
898    };
899    if (!strcmp(token, "auth_param")) {
900#if USE_AUTH
901        cfg_directive = "auth_param";
902        parse_authparam(&Auth::TheConfig);
903        cfg_directive = NULL;
904#else
905    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'auth_param' requires --enable-auth");
906#endif
907        return 1;
908    };
909    if (!strcmp(token, "authenticate_cache_garbage_interval")) {
910        cfg_directive = "authenticate_cache_garbage_interval";
911        parse_time_t(&Config.authenticateGCInterval);
912        cfg_directive = NULL;
913        return 1;
914    };
915    if (!strcmp(token, "authenticate_ttl")) {
916        cfg_directive = "authenticate_ttl";
917        parse_time_t(&Config.authenticateTTL);
918        cfg_directive = NULL;
919        return 1;
920    };
921    if (!strcmp(token, "authenticate_ip_ttl")) {
922        cfg_directive = "authenticate_ip_ttl";
923        parse_time_t(&Config.authenticateIpTTL);
924        cfg_directive = NULL;
925        return 1;
926    };
927    if (!strcmp(token, "external_acl_type")) {
928        cfg_directive = "external_acl_type";
929        parse_externalAclHelper(&Config.externalAclHelperList);
930        cfg_directive = NULL;
931        return 1;
932    };
933    if (!strcmp(token, "acl")) {
934        cfg_directive = "acl";
935        parse_acl(&Config.aclList);
936        cfg_directive = NULL;
937        return 1;
938    };
939    if (!strcmp(token, "proxy_protocol_access")) {
940        cfg_directive = "proxy_protocol_access";
941        parse_acl_access(&Config.accessList.proxyProtocol);
942        cfg_directive = NULL;
943        return 1;
944    };
945    if (!strcmp(token, "follow_x_forwarded_for")) {
946#if FOLLOW_X_FORWARDED_FOR
947        cfg_directive = "follow_x_forwarded_for";
948        parse_acl_access(&Config.accessList.followXFF);
949        cfg_directive = NULL;
950#else
951    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'follow_x_forwarded_for' requires --enable-follow-x-forwarded-for");
952#endif
953        return 1;
954    };
955    if (!strcmp(token, "acl_uses_indirect_client")) {
956#if FOLLOW_X_FORWARDED_FOR
957        cfg_directive = "acl_uses_indirect_client";
958        parse_onoff(&Config.onoff.acl_uses_indirect_client);
959        cfg_directive = NULL;
960#else
961    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'acl_uses_indirect_client' requires --enable-follow-x-forwarded-for");
962#endif
963        return 1;
964    };
965    if (!strcmp(token, "delay_pool_uses_indirect_client")) {
966#if FOLLOW_X_FORWARDED_FOR&&USE_DELAY_POOLS
967        cfg_directive = "delay_pool_uses_indirect_client";
968        parse_onoff(&Config.onoff.delay_pool_uses_indirect_client);
969        cfg_directive = NULL;
970#else
971    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'delay_pool_uses_indirect_client' requires --enable-follow-x-forwarded-for and --enable-delay-pools");
972#endif
973        return 1;
974    };
975    if (!strcmp(token, "log_uses_indirect_client")) {
976#if FOLLOW_X_FORWARDED_FOR
977        cfg_directive = "log_uses_indirect_client";
978        parse_onoff(&Config.onoff.log_uses_indirect_client);
979        cfg_directive = NULL;
980#else
981    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'log_uses_indirect_client' requires --enable-follow-x-forwarded-for");
982#endif
983        return 1;
984    };
985    if (!strcmp(token, "tproxy_uses_indirect_client")) {
986#if FOLLOW_X_FORWARDED_FOR&&LINUX_NETFILTER
987        cfg_directive = "tproxy_uses_indirect_client";
988        parse_onoff(&Config.onoff.tproxy_uses_indirect_client);
989        cfg_directive = NULL;
990#else
991    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'tproxy_uses_indirect_client' requires --enable-follow-x-forwarded-for and --enable-linux-netfilter");
992#endif
993        return 1;
994    };
995    if (!strcmp(token, "spoof_client_ip")) {
996        cfg_directive = "spoof_client_ip";
997        parse_acl_access(&Config.accessList.spoof_client_ip);
998        cfg_directive = NULL;
999        return 1;
1000    };
1001    if (!strcmp(token, "http_access")) {
1002        cfg_directive = "http_access";
1003        parse_acl_access(&Config.accessList.http);
1004        cfg_directive = NULL;
1005        return 1;
1006    };
1007    if (!strcmp(token, "adapted_http_access")) {
1008        cfg_directive = "adapted_http_access";
1009        parse_acl_access(&Config.accessList.adapted_http);
1010        cfg_directive = NULL;
1011        return 1;
1012    };
1013    if (!strcmp(token, "http_access2")) {
1014        cfg_directive = "http_access2";
1015        parse_acl_access(&Config.accessList.adapted_http);
1016        cfg_directive = NULL;
1017        return 1;
1018    };
1019    if (!strcmp(token, "http_reply_access")) {
1020        cfg_directive = "http_reply_access";
1021        parse_acl_access(&Config.accessList.reply);
1022        cfg_directive = NULL;
1023        return 1;
1024    };
1025    if (!strcmp(token, "icp_access")) {
1026        cfg_directive = "icp_access";
1027        parse_acl_access(&Config.accessList.icp);
1028        cfg_directive = NULL;
1029        return 1;
1030    };
1031    if (!strcmp(token, "htcp_access")) {
1032#if USE_HTCP
1033        cfg_directive = "htcp_access";
1034        parse_acl_access(&Config.accessList.htcp);
1035        cfg_directive = NULL;
1036#else
1037    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'htcp_access' requires --enable-htcp");
1038#endif
1039        return 1;
1040    };
1041    if (!strcmp(token, "htcp_clr_access")) {
1042#if USE_HTCP
1043        cfg_directive = "htcp_clr_access";
1044        parse_acl_access(&Config.accessList.htcp_clr);
1045        cfg_directive = NULL;
1046#else
1047    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'htcp_clr_access' requires --enable-htcp");
1048#endif
1049        return 1;
1050    };
1051    if (!strcmp(token, "miss_access")) {
1052        cfg_directive = "miss_access";
1053        parse_acl_access(&Config.accessList.miss);
1054        cfg_directive = NULL;
1055        return 1;
1056    };
1057    if (!strcmp(token, "ident_lookup_access")) {
1058#if USE_IDENT
1059        cfg_directive = "ident_lookup_access";
1060        parse_acl_access(&Ident::TheConfig.identLookup);
1061        cfg_directive = NULL;
1062#else
1063    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'ident_lookup_access' requires --enable-ident-lookups");
1064#endif
1065        return 1;
1066    };
1067    if (!strcmp(token, "reply_body_max_size")) {
1068        cfg_directive = "reply_body_max_size";
1069        parse_acl_b_size_t(&Config.ReplyBodySize);
1070        cfg_directive = NULL;
1071        return 1;
1072    };
1073    if (!strcmp(token, "http_port")) {
1074        cfg_directive = "http_port";
1075        parse_PortCfg(&HttpPortList);
1076        cfg_directive = NULL;
1077        return 1;
1078    };
1079    if (!strcmp(token, "ascii_port")) {
1080        cfg_directive = "ascii_port";
1081        parse_PortCfg(&HttpPortList);
1082        cfg_directive = NULL;
1083        return 1;
1084    };
1085    if (!strcmp(token, "https_port")) {
1086#if USE_OPENSSL
1087        cfg_directive = "https_port";
1088        parse_PortCfg(&HttpsPortList);
1089        cfg_directive = NULL;
1090#else
1091    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'https_port' requires --with-openssl");
1092#endif
1093        return 1;
1094    };
1095    if (!strcmp(token, "ftp_port")) {
1096        cfg_directive = "ftp_port";
1097        parse_PortCfg(&FtpPortList);
1098        cfg_directive = NULL;
1099        return 1;
1100    };
1101    if (!strcmp(token, "tcp_outgoing_tos")) {
1102        cfg_directive = "tcp_outgoing_tos";
1103        parse_acl_tos(&Ip::Qos::TheConfig.tosToServer);
1104        cfg_directive = NULL;
1105        return 1;
1106    };
1107    if (!strcmp(token, "tcp_outgoing_dscp")) {
1108        cfg_directive = "tcp_outgoing_dscp";
1109        parse_acl_tos(&Ip::Qos::TheConfig.tosToServer);
1110        cfg_directive = NULL;
1111        return 1;
1112    };
1113    if (!strcmp(token, "tcp_outgoing_ds")) {
1114        cfg_directive = "tcp_outgoing_ds";
1115        parse_acl_tos(&Ip::Qos::TheConfig.tosToServer);
1116        cfg_directive = NULL;
1117        return 1;
1118    };
1119    if (!strcmp(token, "clientside_tos")) {
1120        cfg_directive = "clientside_tos";
1121        parse_acl_tos(&Ip::Qos::TheConfig.tosToClient);
1122        cfg_directive = NULL;
1123        return 1;
1124    };
1125    if (!strcmp(token, "tcp_outgoing_mark")) {
1126#if SO_MARK&&USE_LIBCAP
1127        cfg_directive = "tcp_outgoing_mark";
1128        parse_acl_nfmark(&Ip::Qos::TheConfig.nfmarkToServer);
1129        cfg_directive = NULL;
1130#else
1131    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'tcp_outgoing_mark' requires Packet MARK (Linux)");
1132#endif
1133        return 1;
1134    };
1135    if (!strcmp(token, "clientside_mark")) {
1136#if SO_MARK&&USE_LIBCAP
1137        cfg_directive = "clientside_mark";
1138        parse_acl_nfmark(&Ip::Qos::TheConfig.nfmarkToClient);
1139        cfg_directive = NULL;
1140#else
1141    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'clientside_mark' requires Packet MARK (Linux)");
1142#endif
1143        return 1;
1144    };
1145    if (!strcmp(token, "qos_flows")) {
1146#if USE_QOS_TOS
1147        cfg_directive = "qos_flows";
1148        parse_QosConfig(&Ip::Qos::TheConfig);
1149        cfg_directive = NULL;
1150#else
1151    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'qos_flows' requires --enable-zph-qos");
1152#endif
1153        return 1;
1154    };
1155    if (!strcmp(token, "tcp_outgoing_address")) {
1156        cfg_directive = "tcp_outgoing_address";
1157        parse_acl_address(&Config.accessList.outgoing_address);
1158        cfg_directive = NULL;
1159        return 1;
1160    };
1161    if (!strcmp(token, "host_verify_strict")) {
1162        cfg_directive = "host_verify_strict";
1163        parse_onoff(&Config.onoff.hostStrictVerify);
1164        cfg_directive = NULL;
1165        return 1;
1166    };
1167    if (!strcmp(token, "client_dst_passthru")) {
1168        cfg_directive = "client_dst_passthru";
1169        parse_onoff(&Config.onoff.client_dst_passthru);
1170        cfg_directive = NULL;
1171        return 1;
1172    };
1173    if (!strcmp(token, "ssl_unclean_shutdown")) {
1174#if USE_OPENSSL
1175        cfg_directive = "ssl_unclean_shutdown";
1176        parse_onoff(&Config.SSL.unclean_shutdown);
1177        cfg_directive = NULL;
1178#else
1179    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'ssl_unclean_shutdown' requires --with-openssl");
1180#endif
1181        return 1;
1182    };
1183    if (!strcmp(token, "ssl_engine")) {
1184#if USE_OPENSSL
1185        cfg_directive = "ssl_engine";
1186        parse_string(&Config.SSL.ssl_engine);
1187        cfg_directive = NULL;
1188#else
1189    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'ssl_engine' requires --with-openssl");
1190#endif
1191        return 1;
1192    };
1193    if (!strcmp(token, "sslproxy_client_certificate")) {
1194#if USE_OPENSSL
1195        cfg_directive = "sslproxy_client_certificate";
1196        parse_string(&Config.ssl_client.cert);
1197        cfg_directive = NULL;
1198#else
1199    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'sslproxy_client_certificate' requires --with-openssl");
1200#endif
1201        return 1;
1202    };
1203    if (!strcmp(token, "sslproxy_client_key")) {
1204#if USE_OPENSSL
1205        cfg_directive = "sslproxy_client_key";
1206        parse_string(&Config.ssl_client.key);
1207        cfg_directive = NULL;
1208#else
1209    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'sslproxy_client_key' requires --with-openssl");
1210#endif
1211        return 1;
1212    };
1213    if (!strcmp(token, "sslproxy_version")) {
1214#if USE_OPENSSL
1215        cfg_directive = "sslproxy_version";
1216        parse_int(&Config.ssl_client.version);
1217        cfg_directive = NULL;
1218#else
1219    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'sslproxy_version' requires --with-openssl");
1220#endif
1221        return 1;
1222    };
1223    if (!strcmp(token, "sslproxy_options")) {
1224#if USE_OPENSSL
1225        cfg_directive = "sslproxy_options";
1226        parse_string(&Config.ssl_client.options);
1227        cfg_directive = NULL;
1228#else
1229    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'sslproxy_options' requires --with-openssl");
1230#endif
1231        return 1;
1232    };
1233    if (!strcmp(token, "sslproxy_cipher")) {
1234#if USE_OPENSSL
1235        cfg_directive = "sslproxy_cipher";
1236        parse_string(&Config.ssl_client.cipher);
1237        cfg_directive = NULL;
1238#else
1239    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'sslproxy_cipher' requires --with-openssl");
1240#endif
1241        return 1;
1242    };
1243    if (!strcmp(token, "sslproxy_cafile")) {
1244#if USE_OPENSSL
1245        cfg_directive = "sslproxy_cafile";
1246        parse_string(&Config.ssl_client.cafile);
1247        cfg_directive = NULL;
1248#else
1249    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'sslproxy_cafile' requires --with-openssl");
1250#endif
1251        return 1;
1252    };
1253    if (!strcmp(token, "sslproxy_capath")) {
1254#if USE_OPENSSL
1255        cfg_directive = "sslproxy_capath";
1256        parse_string(&Config.ssl_client.capath);
1257        cfg_directive = NULL;
1258#else
1259    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'sslproxy_capath' requires --with-openssl");
1260#endif
1261        return 1;
1262    };
1263    if (!strcmp(token, "sslproxy_session_ttl")) {
1264#if USE_OPENSSL
1265        cfg_directive = "sslproxy_session_ttl";
1266        parse_int(&Config.SSL.session_ttl);
1267        cfg_directive = NULL;
1268#else
1269    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'sslproxy_session_ttl' requires --with-openssl");
1270#endif
1271        return 1;
1272    };
1273    if (!strcmp(token, "sslproxy_session_cache_size")) {
1274#if USE_OPENSSL
1275        cfg_directive = "sslproxy_session_cache_size";
1276        parse_b_size_t(&Config.SSL.sessionCacheSize);
1277        cfg_directive = NULL;
1278#else
1279    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'sslproxy_session_cache_size' requires --with-openssl");
1280#endif
1281        return 1;
1282    };
1283    if (!strcmp(token, "sslproxy_cert_sign_hash")) {
1284#if USE_OPENSSL
1285        cfg_directive = "sslproxy_cert_sign_hash";
1286        parse_string(&Config.SSL.certSignHash);
1287        cfg_directive = NULL;
1288#else
1289    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'sslproxy_cert_sign_hash' requires --with-openssl");
1290#endif
1291        return 1;
1292    };
1293    if (!strcmp(token, "ssl_bump")) {
1294#if USE_OPENSSL
1295        cfg_directive = "ssl_bump";
1296        parse_sslproxy_ssl_bump(&Config.accessList.ssl_bump);
1297        cfg_directive = NULL;
1298#else
1299    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'ssl_bump' requires --with-openssl");
1300#endif
1301        return 1;
1302    };
1303    if (!strcmp(token, "sslproxy_flags")) {
1304#if USE_OPENSSL
1305        cfg_directive = "sslproxy_flags";
1306        parse_string(&Config.ssl_client.flags);
1307        cfg_directive = NULL;
1308#else
1309    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'sslproxy_flags' requires --with-openssl");
1310#endif
1311        return 1;
1312    };
1313    if (!strcmp(token, "sslproxy_cert_error")) {
1314#if USE_OPENSSL
1315        cfg_directive = "sslproxy_cert_error";
1316        parse_acl_access(&Config.ssl_client.cert_error);
1317        cfg_directive = NULL;
1318#else
1319    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'sslproxy_cert_error' requires --with-openssl");
1320#endif
1321        return 1;
1322    };
1323    if (!strcmp(token, "sslproxy_cert_sign")) {
1324#if USE_OPENSSL
1325        cfg_directive = "sslproxy_cert_sign";
1326        parse_sslproxy_cert_sign(&Config.ssl_client.cert_sign);
1327        cfg_directive = NULL;
1328#else
1329    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'sslproxy_cert_sign' requires --with-openssl");
1330#endif
1331        return 1;
1332    };
1333    if (!strcmp(token, "sslproxy_cert_adapt")) {
1334#if USE_OPENSSL
1335        cfg_directive = "sslproxy_cert_adapt";
1336        parse_sslproxy_cert_adapt(&Config.ssl_client.cert_adapt);
1337        cfg_directive = NULL;
1338#else
1339    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'sslproxy_cert_adapt' requires --with-openssl");
1340#endif
1341        return 1;
1342    };
1343    if (!strcmp(token, "sslpassword_program")) {
1344#if USE_OPENSSL
1345        cfg_directive = "sslpassword_program";
1346        parse_string(&Config.Program.ssl_password);
1347        cfg_directive = NULL;
1348#else
1349    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'sslpassword_program' requires --with-openssl");
1350#endif
1351        return 1;
1352    };
1353    if (!strcmp(token, "sslcrtd_program")) {
1354#if USE_SSL_CRTD
1355        cfg_directive = "sslcrtd_program";
1356        parse_eol(&Ssl::TheConfig.ssl_crtd);
1357        cfg_directive = NULL;
1358#else
1359    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'sslcrtd_program' requires --enable-ssl-crtd");
1360#endif
1361        return 1;
1362    };
1363    if (!strcmp(token, "sslcrtd_children")) {
1364#if USE_SSL_CRTD
1365        cfg_directive = "sslcrtd_children";
1366        parse_HelperChildConfig(&Ssl::TheConfig.ssl_crtdChildren);
1367        cfg_directive = NULL;
1368#else
1369    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'sslcrtd_children' requires --enable-ssl-crtd");
1370#endif
1371        return 1;
1372    };
1373    if (!strcmp(token, "sslcrtvalidator_program")) {
1374#if USE_OPENSSL
1375        cfg_directive = "sslcrtvalidator_program";
1376        parse_eol(&Ssl::TheConfig.ssl_crt_validator);
1377        cfg_directive = NULL;
1378#else
1379    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'sslcrtvalidator_program' requires --with-openssl");
1380#endif
1381        return 1;
1382    };
1383    if (!strcmp(token, "sslcrtvalidator_children")) {
1384#if USE_OPENSSL
1385        cfg_directive = "sslcrtvalidator_children";
1386        parse_HelperChildConfig(&Ssl::TheConfig.ssl_crt_validator_Children);
1387        cfg_directive = NULL;
1388#else
1389    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'sslcrtvalidator_children' requires --with-openssl");
1390#endif
1391        return 1;
1392    };
1393    if (!strcmp(token, "cache_peer")) {
1394        cfg_directive = "cache_peer";
1395        parse_peer(&Config.peers);
1396        cfg_directive = NULL;
1397        return 1;
1398    };
1399    if (!strcmp(token, "cache_peer_domain")) {
1400        cfg_directive = "cache_peer_domain";
1401        parse_hostdomain();
1402        cfg_directive = NULL;
1403        return 1;
1404    };
1405    if (!strcmp(token, "cache_host_domain")) {
1406        cfg_directive = "cache_host_domain";
1407        parse_hostdomain();
1408        cfg_directive = NULL;
1409        return 1;
1410    };
1411    if (!strcmp(token, "cache_peer_access")) {
1412        cfg_directive = "cache_peer_access";
1413        parse_peer_access();
1414        cfg_directive = NULL;
1415        return 1;
1416    };
1417    if (!strcmp(token, "neighbor_type_domain")) {
1418        cfg_directive = "neighbor_type_domain";
1419        parse_hostdomaintype();
1420        cfg_directive = NULL;
1421        return 1;
1422    };
1423    if (!strcmp(token, "dead_peer_timeout")) {
1424        cfg_directive = "dead_peer_timeout";
1425        parse_time_t(&Config.Timeout.deadPeer);
1426        cfg_directive = NULL;
1427        return 1;
1428    };
1429    if (!strcmp(token, "forward_max_tries")) {
1430        cfg_directive = "forward_max_tries";
1431        parse_int(&Config.forward_max_tries);
1432        cfg_directive = NULL;
1433        return 1;
1434    };
1435    if (!strcmp(token, "cache_mem")) {
1436        cfg_directive = "cache_mem";
1437        parse_b_size_t(&Config.memMaxSize);
1438        cfg_directive = NULL;
1439        return 1;
1440    };
1441    if (!strcmp(token, "maximum_object_size_in_memory")) {
1442        cfg_directive = "maximum_object_size_in_memory";
1443        parse_b_size_t(&Config.Store.maxInMemObjSize);
1444        cfg_directive = NULL;
1445        return 1;
1446    };
1447    if (!strcmp(token, "memory_cache_shared")) {
1448        cfg_directive = "memory_cache_shared";
1449        parse_YesNoNone(&Config.memShared);
1450        cfg_directive = NULL;
1451        return 1;
1452    };
1453    if (!strcmp(token, "memory_cache_mode")) {
1454        cfg_directive = "memory_cache_mode";
1455        parse_memcachemode(&Config);
1456        cfg_directive = NULL;
1457        return 1;
1458    };
1459    if (!strcmp(token, "memory_replacement_policy")) {
1460        cfg_directive = "memory_replacement_policy";
1461        parse_removalpolicy(&Config.memPolicy);
1462        cfg_directive = NULL;
1463        return 1;
1464    };
1465    if (!strcmp(token, "cache_replacement_policy")) {
1466        cfg_directive = "cache_replacement_policy";
1467        parse_removalpolicy(&Config.replPolicy);
1468        cfg_directive = NULL;
1469        return 1;
1470    };
1471    if (!strcmp(token, "minimum_object_size")) {
1472        cfg_directive = "minimum_object_size";
1473        parse_b_int64_t(&Config.Store.minObjectSize);
1474        cfg_directive = NULL;
1475        return 1;
1476    };
1477    if (!strcmp(token, "maximum_object_size")) {
1478        cfg_directive = "maximum_object_size";
1479        parse_b_int64_t(&Config.Store.maxObjectSize);
1480        cfg_directive = NULL;
1481        return 1;
1482    };
1483    if (!strcmp(token, "cache_dir")) {
1484        cfg_directive = "cache_dir";
1485        parse_cachedir(&Config.cacheSwap);
1486        cfg_directive = NULL;
1487        return 1;
1488    };
1489    if (!strcmp(token, "store_dir_select_algorithm")) {
1490        cfg_directive = "store_dir_select_algorithm";
1491        parse_string(&Config.store_dir_select_algorithm);
1492        cfg_directive = NULL;
1493        return 1;
1494    };
1495    if (!strcmp(token, "max_open_disk_fds")) {
1496        cfg_directive = "max_open_disk_fds";
1497        parse_int(&Config.max_open_disk_fds);
1498        cfg_directive = NULL;
1499        return 1;
1500    };
1501    if (!strcmp(token, "cache_swap_low")) {
1502        cfg_directive = "cache_swap_low";
1503        parse_int(&Config.Swap.lowWaterMark);
1504        cfg_directive = NULL;
1505        return 1;
1506    };
1507    if (!strcmp(token, "cache_swap_high")) {
1508        cfg_directive = "cache_swap_high";
1509        parse_int(&Config.Swap.highWaterMark);
1510        cfg_directive = NULL;
1511        return 1;
1512    };
1513    if (!strcmp(token, "logformat")) {
1514        cfg_directive = "logformat";
1515        parse_logformat(&Log::TheConfig);
1516        cfg_directive = NULL;
1517        return 1;
1518    };
1519    if (!strcmp(token, "access_log")) {
1520        cfg_directive = "access_log";
1521        parse_access_log(&Config.Log.accesslogs);
1522        cfg_directive = NULL;
1523        return 1;
1524    };
1525    if (!strcmp(token, "cache_access_log")) {
1526        cfg_directive = "cache_access_log";
1527        parse_access_log(&Config.Log.accesslogs);
1528        cfg_directive = NULL;
1529        return 1;
1530    };
1531    if (!strcmp(token, "icap_log")) {
1532#if ICAP_CLIENT
1533        cfg_directive = "icap_log";
1534        parse_access_log(&Config.Log.icaplogs);
1535        cfg_directive = NULL;
1536#else
1537    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'icap_log' requires --enable-icap-client");
1538#endif
1539        return 1;
1540    };
1541    if (!strcmp(token, "logfile_daemon")) {
1542        cfg_directive = "logfile_daemon";
1543        parse_string(&Log::TheConfig.logfile_daemon);
1544        cfg_directive = NULL;
1545        return 1;
1546    };
1547    if (!strcmp(token, "stats_collection")) {
1548        cfg_directive = "stats_collection";
1549        parse_acl_access(&Config.accessList.stats_collection);
1550        cfg_directive = NULL;
1551        return 1;
1552    };
1553    if (!strcmp(token, "cache_store_log")) {
1554        cfg_directive = "cache_store_log";
1555        parse_string(&Config.Log.store);
1556        cfg_directive = NULL;
1557        return 1;
1558    };
1559    if (!strcmp(token, "cache_swap_state")) {
1560        cfg_directive = "cache_swap_state";
1561        parse_string(&Config.Log.swap);
1562        cfg_directive = NULL;
1563        return 1;
1564    };
1565    if (!strcmp(token, "cache_swap_log")) {
1566        cfg_directive = "cache_swap_log";
1567        parse_string(&Config.Log.swap);
1568        cfg_directive = NULL;
1569        return 1;
1570    };
1571    if (!strcmp(token, "logfile_rotate")) {
1572        cfg_directive = "logfile_rotate";
1573        parse_int(&Config.Log.rotateNumber);
1574        cfg_directive = NULL;
1575        return 1;
1576    };
1577    if (!strcmp(token, "mime_table")) {
1578        cfg_directive = "mime_table";
1579        parse_string(&Config.mimeTablePathname);
1580        cfg_directive = NULL;
1581        return 1;
1582    };
1583    if (!strcmp(token, "log_mime_hdrs")) {
1584        cfg_directive = "log_mime_hdrs";
1585        parse_onoff(&Config.onoff.log_mime_hdrs);
1586        cfg_directive = NULL;
1587        return 1;
1588    };
1589    if (!strcmp(token, "pid_filename")) {
1590        cfg_directive = "pid_filename";
1591        parse_string(&Config.pidFilename);
1592        cfg_directive = NULL;
1593        return 1;
1594    };
1595    if (!strcmp(token, "client_netmask")) {
1596        cfg_directive = "client_netmask";
1597        parse_address(&Config.Addrs.client_netmask);
1598        cfg_directive = NULL;
1599        return 1;
1600    };
1601    if (!strcmp(token, "strip_query_terms")) {
1602        cfg_directive = "strip_query_terms";
1603        parse_onoff(&Config.onoff.strip_query_terms);
1604        cfg_directive = NULL;
1605        return 1;
1606    };
1607    if (!strcmp(token, "buffered_logs")) {
1608        cfg_directive = "buffered_logs";
1609        parse_onoff(&Config.onoff.buffered_logs);
1610        cfg_directive = NULL;
1611        return 1;
1612    };
1613    if (!strcmp(token, "netdb_filename")) {
1614#if USE_ICMP
1615        cfg_directive = "netdb_filename";
1616        parse_string(&Config.netdbFilename);
1617        cfg_directive = NULL;
1618#else
1619    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'netdb_filename' requires --enable-icmp");
1620#endif
1621        return 1;
1622    };
1623    if (!strcmp(token, "cache_log")) {
1624        cfg_directive = "cache_log";
1625        parse_string(&Debug::cache_log);
1626        cfg_directive = NULL;
1627        return 1;
1628    };
1629    if (!strcmp(token, "debug_options")) {
1630        cfg_directive = "debug_options";
1631        parse_eol(&Debug::debugOptions);
1632        cfg_directive = NULL;
1633        return 1;
1634    };
1635    if (!strcmp(token, "coredump_dir")) {
1636        cfg_directive = "coredump_dir";
1637        parse_string(&Config.coredump_dir);
1638        cfg_directive = NULL;
1639        return 1;
1640    };
1641    if (!strcmp(token, "ftp_user")) {
1642        cfg_directive = "ftp_user";
1643        parse_string(&Config.Ftp.anon_user);
1644        cfg_directive = NULL;
1645        return 1;
1646    };
1647    if (!strcmp(token, "ftp_passive")) {
1648        cfg_directive = "ftp_passive";
1649        parse_onoff(&Config.Ftp.passive);
1650        cfg_directive = NULL;
1651        return 1;
1652    };
1653    if (!strcmp(token, "ftp_epsv_all")) {
1654        cfg_directive = "ftp_epsv_all";
1655        parse_onoff(&Config.Ftp.epsv_all);
1656        cfg_directive = NULL;
1657        return 1;
1658    };
1659    if (!strcmp(token, "ftp_epsv")) {
1660        cfg_directive = "ftp_epsv";
1661        parse_ftp_epsv(&Config.accessList.ftp_epsv);
1662        cfg_directive = NULL;
1663        return 1;
1664    };
1665    if (!strcmp(token, "ftp_eprt")) {
1666        cfg_directive = "ftp_eprt";
1667        parse_onoff(&Config.Ftp.eprt);
1668        cfg_directive = NULL;
1669        return 1;
1670    };
1671    if (!strcmp(token, "ftp_sanitycheck")) {
1672        cfg_directive = "ftp_sanitycheck";
1673        parse_onoff(&Config.Ftp.sanitycheck);
1674        cfg_directive = NULL;
1675        return 1;
1676    };
1677    if (!strcmp(token, "ftp_telnet_protocol")) {
1678        cfg_directive = "ftp_telnet_protocol";
1679        parse_onoff(&Config.Ftp.telnet);
1680        cfg_directive = NULL;
1681        return 1;
1682    };
1683    if (!strcmp(token, "diskd_program")) {
1684        cfg_directive = "diskd_program";
1685        parse_string(&Config.Program.diskd);
1686        cfg_directive = NULL;
1687        return 1;
1688    };
1689    if (!strcmp(token, "unlinkd_program")) {
1690#if USE_UNLINKD
1691        cfg_directive = "unlinkd_program";
1692        parse_string(&Config.Program.unlinkd);
1693        cfg_directive = NULL;
1694#else
1695    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'unlinkd_program' requires --enable-unlinkd");
1696#endif
1697        return 1;
1698    };
1699    if (!strcmp(token, "pinger_program")) {
1700#if USE_ICMP
1701        cfg_directive = "pinger_program";
1702        parse_string(&Config.pinger.program);
1703        cfg_directive = NULL;
1704#else
1705    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'pinger_program' requires --enable-icmp");
1706#endif
1707        return 1;
1708    };
1709    if (!strcmp(token, "pinger_enable")) {
1710#if USE_ICMP
1711        cfg_directive = "pinger_enable";
1712        parse_onoff(&Config.pinger.enable);
1713        cfg_directive = NULL;
1714#else
1715    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'pinger_enable' requires --enable-icmp");
1716#endif
1717        return 1;
1718    };
1719    if (!strcmp(token, "url_rewrite_program")) {
1720        cfg_directive = "url_rewrite_program";
1721        parse_wordlist(&Config.Program.redirect);
1722        cfg_directive = NULL;
1723        return 1;
1724    };
1725    if (!strcmp(token, "redirect_program")) {
1726        cfg_directive = "redirect_program";
1727        parse_wordlist(&Config.Program.redirect);
1728        cfg_directive = NULL;
1729        return 1;
1730    };
1731    if (!strcmp(token, "url_rewrite_children")) {
1732        cfg_directive = "url_rewrite_children";
1733        parse_HelperChildConfig(&Config.redirectChildren);
1734        cfg_directive = NULL;
1735        return 1;
1736    };
1737    if (!strcmp(token, "redirect_children")) {
1738        cfg_directive = "redirect_children";
1739        parse_HelperChildConfig(&Config.redirectChildren);
1740        cfg_directive = NULL;
1741        return 1;
1742    };
1743    if (!strcmp(token, "url_rewrite_host_header")) {
1744        cfg_directive = "url_rewrite_host_header";
1745        parse_onoff(&Config.onoff.redir_rewrites_host);
1746        cfg_directive = NULL;
1747        return 1;
1748    };
1749    if (!strcmp(token, "redirect_rewrites_host_header")) {
1750        cfg_directive = "redirect_rewrites_host_header";
1751        parse_onoff(&Config.onoff.redir_rewrites_host);
1752        cfg_directive = NULL;
1753        return 1;
1754    };
1755    if (!strcmp(token, "url_rewrite_access")) {
1756        cfg_directive = "url_rewrite_access";
1757        parse_acl_access(&Config.accessList.redirector);
1758        cfg_directive = NULL;
1759        return 1;
1760    };
1761    if (!strcmp(token, "redirector_access")) {
1762        cfg_directive = "redirector_access";
1763        parse_acl_access(&Config.accessList.redirector);
1764        cfg_directive = NULL;
1765        return 1;
1766    };
1767    if (!strcmp(token, "url_rewrite_bypass")) {
1768        cfg_directive = "url_rewrite_bypass";
1769        parse_onoff(&Config.onoff.redirector_bypass);
1770        cfg_directive = NULL;
1771        return 1;
1772    };
1773    if (!strcmp(token, "redirector_bypass")) {
1774        cfg_directive = "redirector_bypass";
1775        parse_onoff(&Config.onoff.redirector_bypass);
1776        cfg_directive = NULL;
1777        return 1;
1778    };
1779    if (!strcmp(token, "url_rewrite_extras")) {
1780        cfg_directive = "url_rewrite_extras";
1781        parse_TokenOrQuotedString(&Config.redirector_extras);
1782        cfg_directive = NULL;
1783        return 1;
1784    };
1785    if (!strcmp(token, "store_id_program")) {
1786        cfg_directive = "store_id_program";
1787        parse_wordlist(&Config.Program.store_id);
1788        cfg_directive = NULL;
1789        return 1;
1790    };
1791    if (!strcmp(token, "storeurl_rewrite_program")) {
1792        cfg_directive = "storeurl_rewrite_program";
1793        parse_wordlist(&Config.Program.store_id);
1794        cfg_directive = NULL;
1795        return 1;
1796    };
1797    if (!strcmp(token, "store_id_extras")) {
1798        cfg_directive = "store_id_extras";
1799        parse_TokenOrQuotedString(&Config.storeId_extras);
1800        cfg_directive = NULL;
1801        return 1;
1802    };
1803    if (!strcmp(token, "store_id_children")) {
1804        cfg_directive = "store_id_children";
1805        parse_HelperChildConfig(&Config.storeIdChildren);
1806        cfg_directive = NULL;
1807        return 1;
1808    };
1809    if (!strcmp(token, "storeurl_rewrite_children")) {
1810        cfg_directive = "storeurl_rewrite_children";
1811        parse_HelperChildConfig(&Config.storeIdChildren);
1812        cfg_directive = NULL;
1813        return 1;
1814    };
1815    if (!strcmp(token, "store_id_access")) {
1816        cfg_directive = "store_id_access";
1817        parse_acl_access(&Config.accessList.store_id);
1818        cfg_directive = NULL;
1819        return 1;
1820    };
1821    if (!strcmp(token, "storeurl_rewrite_access")) {
1822        cfg_directive = "storeurl_rewrite_access";
1823        parse_acl_access(&Config.accessList.store_id);
1824        cfg_directive = NULL;
1825        return 1;
1826    };
1827    if (!strcmp(token, "store_id_bypass")) {
1828        cfg_directive = "store_id_bypass";
1829        parse_onoff(&Config.onoff.store_id_bypass);
1830        cfg_directive = NULL;
1831        return 1;
1832    };
1833    if (!strcmp(token, "storeurl_rewrite_bypass")) {
1834        cfg_directive = "storeurl_rewrite_bypass";
1835        parse_onoff(&Config.onoff.store_id_bypass);
1836        cfg_directive = NULL;
1837        return 1;
1838    };
1839    if (!strcmp(token, "cache")) {
1840        cfg_directive = "cache";
1841        parse_acl_access(&Config.accessList.noCache);
1842        cfg_directive = NULL;
1843        return 1;
1844    };
1845    if (!strcmp(token, "no_cache")) {
1846        cfg_directive = "no_cache";
1847        parse_acl_access(&Config.accessList.noCache);
1848        cfg_directive = NULL;
1849        return 1;
1850    };
1851    if (!strcmp(token, "send_hit")) {
1852        cfg_directive = "send_hit";
1853        parse_acl_access(&Config.accessList.sendHit);
1854        cfg_directive = NULL;
1855        return 1;
1856    };
1857    if (!strcmp(token, "store_miss")) {
1858        cfg_directive = "store_miss";
1859        parse_acl_access(&Config.accessList.storeMiss);
1860        cfg_directive = NULL;
1861        return 1;
1862    };
1863    if (!strcmp(token, "max_stale")) {
1864        cfg_directive = "max_stale";
1865        parse_time_t(&Config.maxStale);
1866        cfg_directive = NULL;
1867        return 1;
1868    };
1869    if (!strcmp(token, "refresh_pattern")) {
1870        cfg_directive = "refresh_pattern";
1871        parse_refreshpattern(&Config.Refresh);
1872        cfg_directive = NULL;
1873        return 1;
1874    };
1875    if (!strcmp(token, "quick_abort_min")) {
1876        cfg_directive = "quick_abort_min";
1877        parse_kb_int64_t(&Config.quickAbort.min);
1878        cfg_directive = NULL;
1879        return 1;
1880    };
1881    if (!strcmp(token, "quick_abort_max")) {
1882        cfg_directive = "quick_abort_max";
1883        parse_kb_int64_t(&Config.quickAbort.max);
1884        cfg_directive = NULL;
1885        return 1;
1886    };
1887    if (!strcmp(token, "quick_abort_pct")) {
1888        cfg_directive = "quick_abort_pct";
1889        parse_int(&Config.quickAbort.pct);
1890        cfg_directive = NULL;
1891        return 1;
1892    };
1893    if (!strcmp(token, "read_ahead_gap")) {
1894        cfg_directive = "read_ahead_gap";
1895        parse_b_int64_t(&Config.readAheadGap);
1896        cfg_directive = NULL;
1897        return 1;
1898    };
1899    if (!strcmp(token, "negative_ttl")) {
1900#if USE_HTTP_VIOLATIONS
1901        cfg_directive = "negative_ttl";
1902        parse_time_t(&Config.negativeTtl);
1903        cfg_directive = NULL;
1904#else
1905    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'negative_ttl' requires --enable-http-violations");
1906#endif
1907        return 1;
1908    };
1909    if (!strcmp(token, "positive_dns_ttl")) {
1910        cfg_directive = "positive_dns_ttl";
1911        parse_time_t(&Config.positiveDnsTtl);
1912        cfg_directive = NULL;
1913        return 1;
1914    };
1915    if (!strcmp(token, "negative_dns_ttl")) {
1916        cfg_directive = "negative_dns_ttl";
1917        parse_time_t(&Config.negativeDnsTtl);
1918        cfg_directive = NULL;
1919        return 1;
1920    };
1921    if (!strcmp(token, "range_offset_limit")) {
1922        cfg_directive = "range_offset_limit";
1923        parse_acl_b_size_t(&Config.rangeOffsetLimit);
1924        cfg_directive = NULL;
1925        return 1;
1926    };
1927    if (!strcmp(token, "minimum_expiry_time")) {
1928        cfg_directive = "minimum_expiry_time";
1929        parse_time_t(&Config.minimum_expiry_time);
1930        cfg_directive = NULL;
1931        return 1;
1932    };
1933    if (!strcmp(token, "store_avg_object_size")) {
1934        cfg_directive = "store_avg_object_size";
1935        parse_b_int64_t(&Config.Store.avgObjectSize);
1936        cfg_directive = NULL;
1937        return 1;
1938    };
1939    if (!strcmp(token, "store_objects_per_bucket")) {
1940        cfg_directive = "store_objects_per_bucket";
1941        parse_int(&Config.Store.objectsPerBucket);
1942        cfg_directive = NULL;
1943        return 1;
1944    };
1945    if (!strcmp(token, "request_header_max_size")) {
1946        cfg_directive = "request_header_max_size";
1947        parse_b_size_t(&Config.maxRequestHeaderSize);
1948        cfg_directive = NULL;
1949        return 1;
1950    };
1951    if (!strcmp(token, "reply_header_max_size")) {
1952        cfg_directive = "reply_header_max_size";
1953        parse_b_size_t(&Config.maxReplyHeaderSize);
1954        cfg_directive = NULL;
1955        return 1;
1956    };
1957    if (!strcmp(token, "request_body_max_size")) {
1958        cfg_directive = "request_body_max_size";
1959        parse_b_int64_t(&Config.maxRequestBodySize);
1960        cfg_directive = NULL;
1961        return 1;
1962    };
1963    if (!strcmp(token, "client_request_buffer_max_size")) {
1964        cfg_directive = "client_request_buffer_max_size";
1965        parse_b_size_t(&Config.maxRequestBufferSize);
1966        cfg_directive = NULL;
1967        return 1;
1968    };
1969    if (!strcmp(token, "broken_posts")) {
1970#if USE_HTTP_VIOLATIONS
1971        cfg_directive = "broken_posts";
1972        parse_acl_access(&Config.accessList.brokenPosts);
1973        cfg_directive = NULL;
1974#else
1975    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'broken_posts' requires --enable-http-violations");
1976#endif
1977        return 1;
1978    };
1979    if (!strcmp(token, "adaptation_uses_indirect_client")) {
1980#if FOLLOW_X_FORWARDED_FOR&&USE_ADAPTATION
1981        cfg_directive = "adaptation_uses_indirect_client";
1982        parse_onoff(&Adaptation::Config::use_indirect_client);
1983        cfg_directive = NULL;
1984#else
1985    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'adaptation_uses_indirect_client' requires --enable-follow-x-forwarded-for and (--enable-icap-client and/or --enable-ecap)");
1986#endif
1987        return 1;
1988    };
1989    if (!strcmp(token, "icap_uses_indirect_client")) {
1990#if FOLLOW_X_FORWARDED_FOR&&USE_ADAPTATION
1991        cfg_directive = "icap_uses_indirect_client";
1992        parse_onoff(&Adaptation::Config::use_indirect_client);
1993        cfg_directive = NULL;
1994#else
1995    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'adaptation_uses_indirect_client' requires --enable-follow-x-forwarded-for and (--enable-icap-client and/or --enable-ecap)");
1996#endif
1997        return 1;
1998    };
1999    if (!strcmp(token, "via")) {
2000#if USE_HTTP_VIOLATIONS
2001        cfg_directive = "via";
2002        parse_onoff(&Config.onoff.via);
2003        cfg_directive = NULL;
2004#else
2005    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'via' requires --enable-http-violations");
2006#endif
2007        return 1;
2008    };
2009    if (!strcmp(token, "ie_refresh")) {
2010        cfg_directive = "ie_refresh";
2011        parse_onoff(&Config.onoff.ie_refresh);
2012        cfg_directive = NULL;
2013        return 1;
2014    };
2015    if (!strcmp(token, "vary_ignore_expire")) {
2016        cfg_directive = "vary_ignore_expire";
2017        parse_onoff(&Config.onoff.vary_ignore_expire);
2018        cfg_directive = NULL;
2019        return 1;
2020    };
2021    if (!strcmp(token, "request_entities")) {
2022        cfg_directive = "request_entities";
2023        parse_onoff(&Config.onoff.request_entities);
2024        cfg_directive = NULL;
2025        return 1;
2026    };
2027    if (!strcmp(token, "request_header_access")) {
2028#if USE_HTTP_VIOLATIONS
2029        cfg_directive = "request_header_access";
2030        parse_http_header_access(&Config.request_header_access);
2031        cfg_directive = NULL;
2032#else
2033    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'request_header_access' requires --enable-http-violations");
2034#endif
2035        return 1;
2036    };
2037    if (!strcmp(token, "reply_header_access")) {
2038#if USE_HTTP_VIOLATIONS
2039        cfg_directive = "reply_header_access";
2040        parse_http_header_access(&Config.reply_header_access);
2041        cfg_directive = NULL;
2042#else
2043    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'reply_header_access' requires --enable-http-violations");
2044#endif
2045        return 1;
2046    };
2047    if (!strcmp(token, "request_header_replace")) {
2048#if USE_HTTP_VIOLATIONS
2049        cfg_directive = "request_header_replace";
2050        parse_http_header_replace(&Config.request_header_access);
2051        cfg_directive = NULL;
2052#else
2053    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'request_header_replace' requires --enable-http-violations");
2054#endif
2055        return 1;
2056    };
2057    if (!strcmp(token, "header_replace")) {
2058#if USE_HTTP_VIOLATIONS
2059        cfg_directive = "header_replace";
2060        parse_http_header_replace(&Config.request_header_access);
2061        cfg_directive = NULL;
2062#else
2063    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'request_header_replace' requires --enable-http-violations");
2064#endif
2065        return 1;
2066    };
2067    if (!strcmp(token, "reply_header_replace")) {
2068#if USE_HTTP_VIOLATIONS
2069        cfg_directive = "reply_header_replace";
2070        parse_http_header_replace(&Config.reply_header_access);
2071        cfg_directive = NULL;
2072#else
2073    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'reply_header_replace' requires --enable-http-violations");
2074#endif
2075        return 1;
2076    };
2077    if (!strcmp(token, "request_header_add")) {
2078        cfg_directive = "request_header_add";
2079        parse_HeaderWithAclList(&Config.request_header_add);
2080        cfg_directive = NULL;
2081        return 1;
2082    };
2083    if (!strcmp(token, "note")) {
2084        cfg_directive = "note";
2085        parse_note(&Config.notes);
2086        cfg_directive = NULL;
2087        return 1;
2088    };
2089    if (!strcmp(token, "relaxed_header_parser")) {
2090        cfg_directive = "relaxed_header_parser";
2091        parse_tristate(&Config.onoff.relaxed_header_parser);
2092        cfg_directive = NULL;
2093        return 1;
2094    };
2095    if (!strcmp(token, "collapsed_forwarding")) {
2096        cfg_directive = "collapsed_forwarding";
2097        parse_onoff(&Config.onoff.collapsed_forwarding);
2098        cfg_directive = NULL;
2099        return 1;
2100    };
2101    if (!strcmp(token, "forward_timeout")) {
2102        cfg_directive = "forward_timeout";
2103        parse_time_t(&Config.Timeout.forward);
2104        cfg_directive = NULL;
2105        return 1;
2106    };
2107    if (!strcmp(token, "connect_timeout")) {
2108        cfg_directive = "connect_timeout";
2109        parse_time_t(&Config.Timeout.connect);
2110        cfg_directive = NULL;
2111        return 1;
2112    };
2113    if (!strcmp(token, "peer_connect_timeout")) {
2114        cfg_directive = "peer_connect_timeout";
2115        parse_time_t(&Config.Timeout.peer_connect);
2116        cfg_directive = NULL;
2117        return 1;
2118    };
2119    if (!strcmp(token, "read_timeout")) {
2120        cfg_directive = "read_timeout";
2121        parse_time_t(&Config.Timeout.read);
2122        cfg_directive = NULL;
2123        return 1;
2124    };
2125    if (!strcmp(token, "write_timeout")) {
2126        cfg_directive = "write_timeout";
2127        parse_time_t(&Config.Timeout.write);
2128        cfg_directive = NULL;
2129        return 1;
2130    };
2131    if (!strcmp(token, "request_timeout")) {
2132        cfg_directive = "request_timeout";
2133        parse_time_t(&Config.Timeout.request);
2134        cfg_directive = NULL;
2135        return 1;
2136    };
2137    if (!strcmp(token, "client_idle_pconn_timeout")) {
2138        cfg_directive = "client_idle_pconn_timeout";
2139        parse_time_t(&Config.Timeout.clientIdlePconn);
2140        cfg_directive = NULL;
2141        return 1;
2142    };
2143    if (!strcmp(token, "persistent_request_timeout")) {
2144        cfg_directive = "persistent_request_timeout";
2145        parse_time_t(&Config.Timeout.clientIdlePconn);
2146        cfg_directive = NULL;
2147        return 1;
2148    };
2149    if (!strcmp(token, "ftp_client_idle_timeout")) {
2150        cfg_directive = "ftp_client_idle_timeout";
2151        parse_time_t(&Config.Timeout.ftpClientIdle);
2152        cfg_directive = NULL;
2153        return 1;
2154    };
2155    if (!strcmp(token, "client_lifetime")) {
2156        cfg_directive = "client_lifetime";
2157        parse_time_t(&Config.Timeout.lifetime);
2158        cfg_directive = NULL;
2159        return 1;
2160    };
2161    if (!strcmp(token, "half_closed_clients")) {
2162        cfg_directive = "half_closed_clients";
2163        parse_onoff(&Config.onoff.half_closed_clients);
2164        cfg_directive = NULL;
2165        return 1;
2166    };
2167    if (!strcmp(token, "server_idle_pconn_timeout")) {
2168        cfg_directive = "server_idle_pconn_timeout";
2169        parse_time_t(&Config.Timeout.serverIdlePconn);
2170        cfg_directive = NULL;
2171        return 1;
2172    };
2173    if (!strcmp(token, "pconn_timeout")) {
2174        cfg_directive = "pconn_timeout";
2175        parse_time_t(&Config.Timeout.serverIdlePconn);
2176        cfg_directive = NULL;
2177        return 1;
2178    };
2179    if (!strcmp(token, "ident_timeout")) {
2180#if USE_IDENT
2181        cfg_directive = "ident_timeout";
2182        parse_time_t(&Ident::TheConfig.timeout);
2183        cfg_directive = NULL;
2184#else
2185    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'ident_timeout' requires --enable-ident-lookups");
2186#endif
2187        return 1;
2188    };
2189    if (!strcmp(token, "shutdown_lifetime")) {
2190        cfg_directive = "shutdown_lifetime";
2191        parse_time_t(&Config.shutdownLifetime);
2192        cfg_directive = NULL;
2193        return 1;
2194    };
2195    if (!strcmp(token, "cache_mgr")) {
2196        cfg_directive = "cache_mgr";
2197        parse_string(&Config.adminEmail);
2198        cfg_directive = NULL;
2199        return 1;
2200    };
2201    if (!strcmp(token, "mail_from")) {
2202        cfg_directive = "mail_from";
2203        parse_string(&Config.EmailFrom);
2204        cfg_directive = NULL;
2205        return 1;
2206    };
2207    if (!strcmp(token, "mail_program")) {
2208        cfg_directive = "mail_program";
2209        parse_eol(&Config.EmailProgram);
2210        cfg_directive = NULL;
2211        return 1;
2212    };
2213    if (!strcmp(token, "cache_effective_user")) {
2214        cfg_directive = "cache_effective_user";
2215        parse_string(&Config.effectiveUser);
2216        cfg_directive = NULL;
2217        return 1;
2218    };
2219    if (!strcmp(token, "cache_effective_group")) {
2220        cfg_directive = "cache_effective_group";
2221        parse_string(&Config.effectiveGroup);
2222        cfg_directive = NULL;
2223        return 1;
2224    };
2225    if (!strcmp(token, "httpd_suppress_version_string")) {
2226        cfg_directive = "httpd_suppress_version_string";
2227        parse_onoff(&Config.onoff.httpd_suppress_version_string);
2228        cfg_directive = NULL;
2229        return 1;
2230    };
2231    if (!strcmp(token, "visible_hostname")) {
2232        cfg_directive = "visible_hostname";
2233        parse_string(&Config.visibleHostname);
2234        cfg_directive = NULL;
2235        return 1;
2236    };
2237    if (!strcmp(token, "unique_hostname")) {
2238        cfg_directive = "unique_hostname";
2239        parse_string(&Config.uniqueHostname);
2240        cfg_directive = NULL;
2241        return 1;
2242    };
2243    if (!strcmp(token, "hostname_aliases")) {
2244        cfg_directive = "hostname_aliases";
2245        parse_wordlist(&Config.hostnameAliases);
2246        cfg_directive = NULL;
2247        return 1;
2248    };
2249    if (!strcmp(token, "umask")) {
2250        cfg_directive = "umask";
2251        parse_int(&Config.umask);
2252        cfg_directive = NULL;
2253        return 1;
2254    };
2255    if (!strcmp(token, "announce_period")) {
2256        cfg_directive = "announce_period";
2257        parse_time_t(&Config.Announce.period);
2258        cfg_directive = NULL;
2259        return 1;
2260    };
2261    if (!strcmp(token, "announce_host")) {
2262        cfg_directive = "announce_host";
2263        parse_string(&Config.Announce.host);
2264        cfg_directive = NULL;
2265        return 1;
2266    };
2267    if (!strcmp(token, "announce_file")) {
2268        cfg_directive = "announce_file";
2269        parse_string(&Config.Announce.file);
2270        cfg_directive = NULL;
2271        return 1;
2272    };
2273    if (!strcmp(token, "announce_port")) {
2274        cfg_directive = "announce_port";
2275        parse_u_short(&Config.Announce.port);
2276        cfg_directive = NULL;
2277        return 1;
2278    };
2279    if (!strcmp(token, "httpd_accel_surrogate_id")) {
2280        cfg_directive = "httpd_accel_surrogate_id";
2281        parse_string(&Config.Accel.surrogate_id);
2282        cfg_directive = NULL;
2283        return 1;
2284    };
2285    if (!strcmp(token, "http_accel_surrogate_remote")) {
2286        cfg_directive = "http_accel_surrogate_remote";
2287        parse_onoff(&Config.onoff.surrogate_is_remote);
2288        cfg_directive = NULL;
2289        return 1;
2290    };
2291    if (!strcmp(token, "esi_parser")) {
2292#if USE_SQUID_ESI
2293        cfg_directive = "esi_parser";
2294        parse_string(&ESIParser::Type);
2295        cfg_directive = NULL;
2296#else
2297    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'esi_parser' requires --enable-esi");
2298#endif
2299        return 1;
2300    };
2301    if (!strcmp(token, "delay_pools")) {
2302#if USE_DELAY_POOLS
2303        cfg_directive = "delay_pools";
2304        parse_delay_pool_count(&Config.Delay);
2305        cfg_directive = NULL;
2306#else
2307    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'delay_pools' requires --enable-delay-pools");
2308#endif
2309        return 1;
2310    };
2311    if (!strcmp(token, "delay_class")) {
2312#if USE_DELAY_POOLS
2313        cfg_directive = "delay_class";
2314        parse_delay_pool_class(&Config.Delay);
2315        cfg_directive = NULL;
2316#else
2317    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'delay_class' requires --enable-delay-pools");
2318#endif
2319        return 1;
2320    };
2321    if (!strcmp(token, "delay_access")) {
2322#if USE_DELAY_POOLS
2323        cfg_directive = "delay_access";
2324        parse_delay_pool_access(&Config.Delay);
2325        cfg_directive = NULL;
2326#else
2327    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'delay_access' requires --enable-delay-pools");
2328#endif
2329        return 1;
2330    };
2331    if (!strcmp(token, "delay_parameters")) {
2332#if USE_DELAY_POOLS
2333        cfg_directive = "delay_parameters";
2334        parse_delay_pool_rates(&Config.Delay);
2335        cfg_directive = NULL;
2336#else
2337    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'delay_parameters' requires --enable-delay-pools");
2338#endif
2339        return 1;
2340    };
2341    if (!strcmp(token, "delay_initial_bucket_level")) {
2342#if USE_DELAY_POOLS
2343        cfg_directive = "delay_initial_bucket_level";
2344        parse_u_short(&Config.Delay.initial);
2345        cfg_directive = NULL;
2346#else
2347    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'delay_initial_bucket_level' requires --enable-delay-pools");
2348#endif
2349        return 1;
2350    };
2351    if (!strcmp(token, "client_delay_pools")) {
2352#if USE_DELAY_POOLS
2353        cfg_directive = "client_delay_pools";
2354        parse_client_delay_pool_count(&Config.ClientDelay);
2355        cfg_directive = NULL;
2356#else
2357    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'client_delay_pools' requires --enable-delay-pools");
2358#endif
2359        return 1;
2360    };
2361    if (!strcmp(token, "client_delay_initial_bucket_level")) {
2362#if USE_DELAY_POOLS
2363        cfg_directive = "client_delay_initial_bucket_level";
2364        parse_u_short(&Config.ClientDelay.initial);
2365        cfg_directive = NULL;
2366#else
2367    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'client_delay_initial_bucket_level' requires --enable-delay-pools");
2368#endif
2369        return 1;
2370    };
2371    if (!strcmp(token, "client_delay_parameters")) {
2372#if USE_DELAY_POOLS
2373        cfg_directive = "client_delay_parameters";
2374        parse_client_delay_pool_rates(&Config.ClientDelay);
2375        cfg_directive = NULL;
2376#else
2377    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'client_delay_parameters' requires --enable-delay-pools");
2378#endif
2379        return 1;
2380    };
2381    if (!strcmp(token, "client_delay_access")) {
2382#if USE_DELAY_POOLS
2383        cfg_directive = "client_delay_access";
2384        parse_client_delay_pool_access(&Config.ClientDelay);
2385        cfg_directive = NULL;
2386#else
2387    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'client_delay_access' requires --enable-delay-pools");
2388#endif
2389        return 1;
2390    };
2391    if (!strcmp(token, "wccp_router")) {
2392#if USE_WCCP
2393        cfg_directive = "wccp_router";
2394        parse_address(&Config.Wccp.router);
2395        cfg_directive = NULL;
2396#else
2397    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'wccp_router' requires --enable-wccp");
2398#endif
2399        return 1;
2400    };
2401    if (!strcmp(token, "wccp2_router")) {
2402#if USE_WCCPv2
2403        cfg_directive = "wccp2_router";
2404        parse_IpAddress_list(&Config.Wccp2.router);
2405        cfg_directive = NULL;
2406#else
2407    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'wccp2_router' requires --enable-wccpv2");
2408#endif
2409        return 1;
2410    };
2411    if (!strcmp(token, "wccp_version")) {
2412#if USE_WCCP
2413        cfg_directive = "wccp_version";
2414        parse_int(&Config.Wccp.version);
2415        cfg_directive = NULL;
2416#else
2417    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'wccp_version' requires --enable-wccp");
2418#endif
2419        return 1;
2420    };
2421    if (!strcmp(token, "wccp2_rebuild_wait")) {
2422#if USE_WCCPv2
2423        cfg_directive = "wccp2_rebuild_wait";
2424        parse_onoff(&Config.Wccp2.rebuildwait);
2425        cfg_directive = NULL;
2426#else
2427    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'wccp2_rebuild_wait' requires --enable-wccpv2");
2428#endif
2429        return 1;
2430    };
2431    if (!strcmp(token, "wccp2_forwarding_method")) {
2432#if USE_WCCPv2
2433        cfg_directive = "wccp2_forwarding_method";
2434        parse_wccp2_method(&Config.Wccp2.forwarding_method);
2435        cfg_directive = NULL;
2436#else
2437    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'wccp2_forwarding_method' requires --enable-wccpv2");
2438#endif
2439        return 1;
2440    };
2441    if (!strcmp(token, "wccp2_return_method")) {
2442#if USE_WCCPv2
2443        cfg_directive = "wccp2_return_method";
2444        parse_wccp2_method(&Config.Wccp2.return_method);
2445        cfg_directive = NULL;
2446#else
2447    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'wccp2_return_method' requires --enable-wccpv2");
2448#endif
2449        return 1;
2450    };
2451    if (!strcmp(token, "wccp2_assignment_method")) {
2452#if USE_WCCPv2
2453        cfg_directive = "wccp2_assignment_method";
2454        parse_wccp2_amethod(&Config.Wccp2.assignment_method);
2455        cfg_directive = NULL;
2456#else
2457    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'wccp2_assignment_method' requires --enable-wccpv2");
2458#endif
2459        return 1;
2460    };
2461    if (!strcmp(token, "wccp2_service")) {
2462#if USE_WCCPv2
2463        cfg_directive = "wccp2_service";
2464        parse_wccp2_service(&Config.Wccp2.info);
2465        cfg_directive = NULL;
2466#else
2467    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'wccp2_service' requires --enable-wccpv2");
2468#endif
2469        return 1;
2470    };
2471    if (!strcmp(token, "wccp2_service_info")) {
2472#if USE_WCCPv2
2473        cfg_directive = "wccp2_service_info";
2474        parse_wccp2_service_info(&Config.Wccp2.info);
2475        cfg_directive = NULL;
2476#else
2477    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'wccp2_service_info' requires --enable-wccpv2");
2478#endif
2479        return 1;
2480    };
2481    if (!strcmp(token, "wccp2_weight")) {
2482#if USE_WCCPv2
2483        cfg_directive = "wccp2_weight";
2484        parse_int(&Config.Wccp2.weight);
2485        cfg_directive = NULL;
2486#else
2487    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'wccp2_weight' requires --enable-wccpv2");
2488#endif
2489        return 1;
2490    };
2491    if (!strcmp(token, "wccp_address")) {
2492#if USE_WCCP
2493        cfg_directive = "wccp_address";
2494        parse_address(&Config.Wccp.address);
2495        cfg_directive = NULL;
2496#else
2497    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'wccp_address' requires --enable-wccp");
2498#endif
2499        return 1;
2500    };
2501    if (!strcmp(token, "wccp2_address")) {
2502#if USE_WCCPv2
2503        cfg_directive = "wccp2_address";
2504        parse_address(&Config.Wccp2.address);
2505        cfg_directive = NULL;
2506#else
2507    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'wccp2_address' requires --enable-wccpv2");
2508#endif
2509        return 1;
2510    };
2511    if (!strcmp(token, "client_persistent_connections")) {
2512        cfg_directive = "client_persistent_connections";
2513        parse_onoff(&Config.onoff.client_pconns);
2514        cfg_directive = NULL;
2515        return 1;
2516    };
2517    if (!strcmp(token, "server_persistent_connections")) {
2518        cfg_directive = "server_persistent_connections";
2519        parse_onoff(&Config.onoff.server_pconns);
2520        cfg_directive = NULL;
2521        return 1;
2522    };
2523    if (!strcmp(token, "persistent_connection_after_error")) {
2524        cfg_directive = "persistent_connection_after_error";
2525        parse_onoff(&Config.onoff.error_pconns);
2526        cfg_directive = NULL;
2527        return 1;
2528    };
2529    if (!strcmp(token, "detect_broken_pconn")) {
2530        cfg_directive = "detect_broken_pconn";
2531        parse_onoff(&Config.onoff.detect_broken_server_pconns);
2532        cfg_directive = NULL;
2533        return 1;
2534    };
2535    if (!strcmp(token, "digest_generation")) {
2536#if USE_CACHE_DIGESTS
2537        cfg_directive = "digest_generation";
2538        parse_onoff(&Config.onoff.digest_generation);
2539        cfg_directive = NULL;
2540#else
2541    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'digest_generation' requires --enable-cache-digests");
2542#endif
2543        return 1;
2544    };
2545    if (!strcmp(token, "digest_bits_per_entry")) {
2546#if USE_CACHE_DIGESTS
2547        cfg_directive = "digest_bits_per_entry";
2548        parse_int(&Config.digest.bits_per_entry);
2549        cfg_directive = NULL;
2550#else
2551    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'digest_bits_per_entry' requires --enable-cache-digests");
2552#endif
2553        return 1;
2554    };
2555    if (!strcmp(token, "digest_rebuild_period")) {
2556#if USE_CACHE_DIGESTS
2557        cfg_directive = "digest_rebuild_period";
2558        parse_time_t(&Config.digest.rebuild_period);
2559        cfg_directive = NULL;
2560#else
2561    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'digest_rebuild_period' requires --enable-cache-digests");
2562#endif
2563        return 1;
2564    };
2565    if (!strcmp(token, "digest_rewrite_period")) {
2566#if USE_CACHE_DIGESTS
2567        cfg_directive = "digest_rewrite_period";
2568        parse_time_t(&Config.digest.rewrite_period);
2569        cfg_directive = NULL;
2570#else
2571    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'digest_rewrite_period' requires --enable-cache-digests");
2572#endif
2573        return 1;
2574    };
2575    if (!strcmp(token, "digest_swapout_chunk_size")) {
2576#if USE_CACHE_DIGESTS
2577        cfg_directive = "digest_swapout_chunk_size";
2578        parse_b_size_t(&Config.digest.swapout_chunk_size);
2579        cfg_directive = NULL;
2580#else
2581    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'digest_swapout_chunk_size' requires --enable-cache-digests");
2582#endif
2583        return 1;
2584    };
2585    if (!strcmp(token, "digest_rebuild_chunk_percentage")) {
2586#if USE_CACHE_DIGESTS
2587        cfg_directive = "digest_rebuild_chunk_percentage";
2588        parse_int(&Config.digest.rebuild_chunk_percentage);
2589        cfg_directive = NULL;
2590#else
2591    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'digest_rebuild_chunk_percentage' requires --enable-cache-digests");
2592#endif
2593        return 1;
2594    };
2595    if (!strcmp(token, "snmp_port")) {
2596#if SQUID_SNMP
2597        cfg_directive = "snmp_port";
2598        parse_u_short(&Config.Port.snmp);
2599        cfg_directive = NULL;
2600#else
2601    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'snmp_port' requires --enable-snmp");
2602#endif
2603        return 1;
2604    };
2605    if (!strcmp(token, "snmp_access")) {
2606#if SQUID_SNMP
2607        cfg_directive = "snmp_access";
2608        parse_acl_access(&Config.accessList.snmp);
2609        cfg_directive = NULL;
2610#else
2611    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'snmp_access' requires --enable-snmp");
2612#endif
2613        return 1;
2614    };
2615    if (!strcmp(token, "snmp_incoming_address")) {
2616#if SQUID_SNMP
2617        cfg_directive = "snmp_incoming_address";
2618        parse_address(&Config.Addrs.snmp_incoming);
2619        cfg_directive = NULL;
2620#else
2621    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'snmp_incoming_address' requires --enable-snmp");
2622#endif
2623        return 1;
2624    };
2625    if (!strcmp(token, "snmp_outgoing_address")) {
2626#if SQUID_SNMP
2627        cfg_directive = "snmp_outgoing_address";
2628        parse_address(&Config.Addrs.snmp_outgoing);
2629        cfg_directive = NULL;
2630#else
2631    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'snmp_outgoing_address' requires --enable-snmp");
2632#endif
2633        return 1;
2634    };
2635    if (!strcmp(token, "icp_port")) {
2636        cfg_directive = "icp_port";
2637        parse_u_short(&Config.Port.icp);
2638        cfg_directive = NULL;
2639        return 1;
2640    };
2641    if (!strcmp(token, "udp_port")) {
2642        cfg_directive = "udp_port";
2643        parse_u_short(&Config.Port.icp);
2644        cfg_directive = NULL;
2645        return 1;
2646    };
2647    if (!strcmp(token, "htcp_port")) {
2648#if USE_HTCP
2649        cfg_directive = "htcp_port";
2650        parse_u_short(&Config.Port.htcp);
2651        cfg_directive = NULL;
2652#else
2653    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'htcp_port' requires --enable-htcp");
2654#endif
2655        return 1;
2656    };
2657    if (!strcmp(token, "log_icp_queries")) {
2658        cfg_directive = "log_icp_queries";
2659        parse_onoff(&Config.onoff.log_udp);
2660        cfg_directive = NULL;
2661        return 1;
2662    };
2663    if (!strcmp(token, "udp_incoming_address")) {
2664        cfg_directive = "udp_incoming_address";
2665        parse_address(&Config.Addrs.udp_incoming);
2666        cfg_directive = NULL;
2667        return 1;
2668    };
2669    if (!strcmp(token, "udp_outgoing_address")) {
2670        cfg_directive = "udp_outgoing_address";
2671        parse_address(&Config.Addrs.udp_outgoing);
2672        cfg_directive = NULL;
2673        return 1;
2674    };
2675    if (!strcmp(token, "icp_hit_stale")) {
2676        cfg_directive = "icp_hit_stale";
2677        parse_onoff(&Config.onoff.icp_hit_stale);
2678        cfg_directive = NULL;
2679        return 1;
2680    };
2681    if (!strcmp(token, "minimum_direct_hops")) {
2682        cfg_directive = "minimum_direct_hops";
2683        parse_int(&Config.minDirectHops);
2684        cfg_directive = NULL;
2685        return 1;
2686    };
2687    if (!strcmp(token, "minimum_direct_rtt")) {
2688        cfg_directive = "minimum_direct_rtt";
2689        parse_int(&Config.minDirectRtt);
2690        cfg_directive = NULL;
2691        return 1;
2692    };
2693    if (!strcmp(token, "netdb_low")) {
2694        cfg_directive = "netdb_low";
2695        parse_int(&Config.Netdb.low);
2696        cfg_directive = NULL;
2697        return 1;
2698    };
2699    if (!strcmp(token, "netdb_high")) {
2700        cfg_directive = "netdb_high";
2701        parse_int(&Config.Netdb.high);
2702        cfg_directive = NULL;
2703        return 1;
2704    };
2705    if (!strcmp(token, "netdb_ping_period")) {
2706        cfg_directive = "netdb_ping_period";
2707        parse_time_t(&Config.Netdb.period);
2708        cfg_directive = NULL;
2709        return 1;
2710    };
2711    if (!strcmp(token, "query_icmp")) {
2712        cfg_directive = "query_icmp";
2713        parse_onoff(&Config.onoff.query_icmp);
2714        cfg_directive = NULL;
2715        return 1;
2716    };
2717    if (!strcmp(token, "test_reachability")) {
2718        cfg_directive = "test_reachability";
2719        parse_onoff(&Config.onoff.test_reachability);
2720        cfg_directive = NULL;
2721        return 1;
2722    };
2723    if (!strcmp(token, "icp_query_timeout")) {
2724        cfg_directive = "icp_query_timeout";
2725        parse_int(&Config.Timeout.icp_query);
2726        cfg_directive = NULL;
2727        return 1;
2728    };
2729    if (!strcmp(token, "maximum_icp_query_timeout")) {
2730        cfg_directive = "maximum_icp_query_timeout";
2731        parse_int(&Config.Timeout.icp_query_max);
2732        cfg_directive = NULL;
2733        return 1;
2734    };
2735    if (!strcmp(token, "minimum_icp_query_timeout")) {
2736        cfg_directive = "minimum_icp_query_timeout";
2737        parse_int(&Config.Timeout.icp_query_min);
2738        cfg_directive = NULL;
2739        return 1;
2740    };
2741    if (!strcmp(token, "background_ping_rate")) {
2742        cfg_directive = "background_ping_rate";
2743        parse_time_t(&Config.backgroundPingRate);
2744        cfg_directive = NULL;
2745        return 1;
2746    };
2747    if (!strcmp(token, "mcast_groups")) {
2748        cfg_directive = "mcast_groups";
2749        parse_wordlist(&Config.mcast_group_list);
2750        cfg_directive = NULL;
2751        return 1;
2752    };
2753    if (!strcmp(token, "mcast_miss_addr")) {
2754#if MULTICAST_MISS_STREAM
2755        cfg_directive = "mcast_miss_addr";
2756        parse_address(&Config.mcast_miss.addr);
2757        cfg_directive = NULL;
2758#else
2759    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'mcast_miss_addr' requires -DMULTICAST_MISS_STREAM define");
2760#endif
2761        return 1;
2762    };
2763    if (!strcmp(token, "mcast_miss_ttl")) {
2764#if MULTICAST_MISS_STREAM
2765        cfg_directive = "mcast_miss_ttl";
2766        parse_u_short(&Config.mcast_miss.ttl);
2767        cfg_directive = NULL;
2768#else
2769    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'mcast_miss_ttl' requires -DMULTICAST_MISS_STREAM define");
2770#endif
2771        return 1;
2772    };
2773    if (!strcmp(token, "mcast_miss_port")) {
2774#if MULTICAST_MISS_STREAM
2775        cfg_directive = "mcast_miss_port";
2776        parse_u_short(&Config.mcast_miss.port);
2777        cfg_directive = NULL;
2778#else
2779    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'mcast_miss_port' requires -DMULTICAST_MISS_STREAM define");
2780#endif
2781        return 1;
2782    };
2783    if (!strcmp(token, "mcast_miss_encode_key")) {
2784#if MULTICAST_MISS_STREAM
2785        cfg_directive = "mcast_miss_encode_key";
2786        parse_string(&Config.mcast_miss.encode_key);
2787        cfg_directive = NULL;
2788#else
2789    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'mcast_miss_encode_key' requires -DMULTICAST_MISS_STREAM define");
2790#endif
2791        return 1;
2792    };
2793    if (!strcmp(token, "mcast_icp_query_timeout")) {
2794        cfg_directive = "mcast_icp_query_timeout";
2795        parse_int(&Config.Timeout.mcast_icp_query);
2796        cfg_directive = NULL;
2797        return 1;
2798    };
2799    if (!strcmp(token, "icon_directory")) {
2800        cfg_directive = "icon_directory";
2801        parse_string(&Config.icons.directory);
2802        cfg_directive = NULL;
2803        return 1;
2804    };
2805    if (!strcmp(token, "global_internal_static")) {
2806        cfg_directive = "global_internal_static";
2807        parse_onoff(&Config.onoff.global_internal_static);
2808        cfg_directive = NULL;
2809        return 1;
2810    };
2811    if (!strcmp(token, "short_icon_urls")) {
2812        cfg_directive = "short_icon_urls";
2813        parse_onoff(&Config.icons.use_short_names);
2814        cfg_directive = NULL;
2815        return 1;
2816    };
2817    if (!strcmp(token, "error_directory")) {
2818        cfg_directive = "error_directory";
2819        parse_string(&Config.errorDirectory);
2820        cfg_directive = NULL;
2821        return 1;
2822    };
2823    if (!strcmp(token, "error_default_language")) {
2824#if USE_ERR_LOCALES
2825        cfg_directive = "error_default_language";
2826        parse_string(&Config.errorDefaultLanguage);
2827        cfg_directive = NULL;
2828#else
2829    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'error_default_language' requires --enable-auto-locale");
2830#endif
2831        return 1;
2832    };
2833    if (!strcmp(token, "error_log_languages")) {
2834#if USE_ERR_LOCALES
2835        cfg_directive = "error_log_languages";
2836        parse_onoff(&Config.errorLogMissingLanguages);
2837        cfg_directive = NULL;
2838#else
2839    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'error_log_languages' requires --enable-auto-locale");
2840#endif
2841        return 1;
2842    };
2843    if (!strcmp(token, "err_page_stylesheet")) {
2844        cfg_directive = "err_page_stylesheet";
2845        parse_string(&Config.errorStylesheet);
2846        cfg_directive = NULL;
2847        return 1;
2848    };
2849    if (!strcmp(token, "err_html_text")) {
2850        cfg_directive = "err_html_text";
2851        parse_eol(&Config.errHtmlText);
2852        cfg_directive = NULL;
2853        return 1;
2854    };
2855    if (!strcmp(token, "email_err_data")) {
2856        cfg_directive = "email_err_data";
2857        parse_onoff(&Config.onoff.emailErrData);
2858        cfg_directive = NULL;
2859        return 1;
2860    };
2861    if (!strcmp(token, "deny_info")) {
2862        cfg_directive = "deny_info";
2863        parse_denyinfo(&Config.denyInfoList);
2864        cfg_directive = NULL;
2865        return 1;
2866    };
2867    if (!strcmp(token, "nonhierarchical_direct")) {
2868        cfg_directive = "nonhierarchical_direct";
2869        parse_onoff(&Config.onoff.nonhierarchical_direct);
2870        cfg_directive = NULL;
2871        return 1;
2872    };
2873    if (!strcmp(token, "prefer_direct")) {
2874        cfg_directive = "prefer_direct";
2875        parse_onoff(&Config.onoff.prefer_direct);
2876        cfg_directive = NULL;
2877        return 1;
2878    };
2879    if (!strcmp(token, "cache_miss_revalidate")) {
2880        cfg_directive = "cache_miss_revalidate";
2881        parse_onoff(&Config.onoff.cache_miss_revalidate);
2882        cfg_directive = NULL;
2883        return 1;
2884    };
2885    if (!strcmp(token, "always_direct")) {
2886        cfg_directive = "always_direct";
2887        parse_acl_access(&Config.accessList.AlwaysDirect);
2888        cfg_directive = NULL;
2889        return 1;
2890    };
2891    if (!strcmp(token, "never_direct")) {
2892        cfg_directive = "never_direct";
2893        parse_acl_access(&Config.accessList.NeverDirect);
2894        cfg_directive = NULL;
2895        return 1;
2896    };
2897    if (!strcmp(token, "incoming_udp_average")) {
2898        cfg_directive = "incoming_udp_average";
2899        parse_int(&Config.comm_incoming.udp.average);
2900        cfg_directive = NULL;
2901        return 1;
2902    };
2903    if (!strcmp(token, "incoming_icp_average")) {
2904        cfg_directive = "incoming_icp_average";
2905        parse_int(&Config.comm_incoming.udp.average);
2906        cfg_directive = NULL;
2907        return 1;
2908    };
2909    if (!strcmp(token, "incoming_tcp_average")) {
2910        cfg_directive = "incoming_tcp_average";
2911        parse_int(&Config.comm_incoming.tcp.average);
2912        cfg_directive = NULL;
2913        return 1;
2914    };
2915    if (!strcmp(token, "incoming_http_average")) {
2916        cfg_directive = "incoming_http_average";
2917        parse_int(&Config.comm_incoming.tcp.average);
2918        cfg_directive = NULL;
2919        return 1;
2920    };
2921    if (!strcmp(token, "incoming_dns_average")) {
2922        cfg_directive = "incoming_dns_average";
2923        parse_int(&Config.comm_incoming.dns.average);
2924        cfg_directive = NULL;
2925        return 1;
2926    };
2927    if (!strcmp(token, "min_udp_poll_cnt")) {
2928        cfg_directive = "min_udp_poll_cnt";
2929        parse_int(&Config.comm_incoming.udp.min_poll);
2930        cfg_directive = NULL;
2931        return 1;
2932    };
2933    if (!strcmp(token, "min_icp_poll_cnt")) {
2934        cfg_directive = "min_icp_poll_cnt";
2935        parse_int(&Config.comm_incoming.udp.min_poll);
2936        cfg_directive = NULL;
2937        return 1;
2938    };
2939    if (!strcmp(token, "min_dns_poll_cnt")) {
2940        cfg_directive = "min_dns_poll_cnt";
2941        parse_int(&Config.comm_incoming.dns.min_poll);
2942        cfg_directive = NULL;
2943        return 1;
2944    };
2945    if (!strcmp(token, "min_tcp_poll_cnt")) {
2946        cfg_directive = "min_tcp_poll_cnt";
2947        parse_int(&Config.comm_incoming.tcp.min_poll);
2948        cfg_directive = NULL;
2949        return 1;
2950    };
2951    if (!strcmp(token, "min_http_poll_cnt")) {
2952        cfg_directive = "min_http_poll_cnt";
2953        parse_int(&Config.comm_incoming.tcp.min_poll);
2954        cfg_directive = NULL;
2955        return 1;
2956    };
2957    if (!strcmp(token, "accept_filter")) {
2958        cfg_directive = "accept_filter";
2959        parse_string(&Config.accept_filter);
2960        cfg_directive = NULL;
2961        return 1;
2962    };
2963    if (!strcmp(token, "client_ip_max_connections")) {
2964        cfg_directive = "client_ip_max_connections";
2965        parse_int(&Config.client_ip_max_connections);
2966        cfg_directive = NULL;
2967        return 1;
2968    };
2969    if (!strcmp(token, "tcp_recv_bufsize")) {
2970        cfg_directive = "tcp_recv_bufsize";
2971        parse_b_size_t(&Config.tcpRcvBufsz);
2972        cfg_directive = NULL;
2973        return 1;
2974    };
2975    if (!strcmp(token, "icap_enable")) {
2976#if ICAP_CLIENT
2977        cfg_directive = "icap_enable";
2978        parse_onoff(&Adaptation::Icap::TheConfig.onoff);
2979        cfg_directive = NULL;
2980#else
2981    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'icap_enable' requires --enable-icap-client");
2982#endif
2983        return 1;
2984    };
2985    if (!strcmp(token, "icap_connect_timeout")) {
2986#if ICAP_CLIENT
2987        cfg_directive = "icap_connect_timeout";
2988        parse_time_t(&Adaptation::Icap::TheConfig.connect_timeout_raw);
2989        cfg_directive = NULL;
2990#else
2991    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'icap_connect_timeout' requires --enable-icap-client");
2992#endif
2993        return 1;
2994    };
2995    if (!strcmp(token, "icap_io_timeout")) {
2996#if ICAP_CLIENT
2997        cfg_directive = "icap_io_timeout";
2998        parse_time_t(&Adaptation::Icap::TheConfig.io_timeout_raw);
2999        cfg_directive = NULL;
3000#else
3001    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'icap_io_timeout' requires --enable-icap-client");
3002#endif
3003        return 1;
3004    };
3005    if (!strcmp(token, "icap_service_failure_limit")) {
3006#if ICAP_CLIENT
3007        cfg_directive = "icap_service_failure_limit";
3008        parse_icap_service_failure_limit(&Adaptation::Icap::TheConfig);
3009        cfg_directive = NULL;
3010#else
3011    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'icap_service_failure_limit' requires --enable-icap-client");
3012#endif
3013        return 1;
3014    };
3015    if (!strcmp(token, "icap_service_revival_delay")) {
3016#if ICAP_CLIENT
3017        cfg_directive = "icap_service_revival_delay";
3018        parse_int(&Adaptation::Icap::TheConfig.service_revival_delay);
3019        cfg_directive = NULL;
3020#else
3021    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'icap_service_revival_delay' requires --enable-icap-client");
3022#endif
3023        return 1;
3024    };
3025    if (!strcmp(token, "icap_preview_enable")) {
3026#if ICAP_CLIENT
3027        cfg_directive = "icap_preview_enable";
3028        parse_onoff(&Adaptation::Icap::TheConfig.preview_enable);
3029        cfg_directive = NULL;
3030#else
3031    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'icap_preview_enable' requires --enable-icap-client");
3032#endif
3033        return 1;
3034    };
3035    if (!strcmp(token, "icap_preview_size")) {
3036#if ICAP_CLIENT
3037        cfg_directive = "icap_preview_size";
3038        parse_int(&Adaptation::Icap::TheConfig.preview_size);
3039        cfg_directive = NULL;
3040#else
3041    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'icap_preview_size' requires --enable-icap-client");
3042#endif
3043        return 1;
3044    };
3045    if (!strcmp(token, "icap_206_enable")) {
3046#if ICAP_CLIENT
3047        cfg_directive = "icap_206_enable";
3048        parse_onoff(&Adaptation::Icap::TheConfig.allow206_enable);
3049        cfg_directive = NULL;
3050#else
3051    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'icap_206_enable' requires --enable-icap-client");
3052#endif
3053        return 1;
3054    };
3055    if (!strcmp(token, "icap_default_options_ttl")) {
3056#if ICAP_CLIENT
3057        cfg_directive = "icap_default_options_ttl";
3058        parse_int(&Adaptation::Icap::TheConfig.default_options_ttl);
3059        cfg_directive = NULL;
3060#else
3061    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'icap_default_options_ttl' requires --enable-icap-client");
3062#endif
3063        return 1;
3064    };
3065    if (!strcmp(token, "icap_persistent_connections")) {
3066#if ICAP_CLIENT
3067        cfg_directive = "icap_persistent_connections";
3068        parse_onoff(&Adaptation::Icap::TheConfig.reuse_connections);
3069        cfg_directive = NULL;
3070#else
3071    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'icap_persistent_connections' requires --enable-icap-client");
3072#endif
3073        return 1;
3074    };
3075    if (!strcmp(token, "adaptation_send_client_ip")) {
3076#if USE_ADAPTATION
3077        cfg_directive = "adaptation_send_client_ip";
3078        parse_onoff(&Adaptation::Config::send_client_ip);
3079        cfg_directive = NULL;
3080#else
3081    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'adaptation_send_client_ip' requires --enable-ecap or --enable-icap-client");
3082#endif
3083        return 1;
3084    };
3085    if (!strcmp(token, "icap_send_client_ip")) {
3086#if USE_ADAPTATION
3087        cfg_directive = "icap_send_client_ip";
3088        parse_onoff(&Adaptation::Config::send_client_ip);
3089        cfg_directive = NULL;
3090#else
3091    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'adaptation_send_client_ip' requires --enable-ecap or --enable-icap-client");
3092#endif
3093        return 1;
3094    };
3095    if (!strcmp(token, "adaptation_send_username")) {
3096#if USE_ADAPTATION
3097        cfg_directive = "adaptation_send_username";
3098        parse_onoff(&Adaptation::Config::send_username);
3099        cfg_directive = NULL;
3100#else
3101    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'adaptation_send_username' requires --enable-ecap or --enable-icap-client");
3102#endif
3103        return 1;
3104    };
3105    if (!strcmp(token, "icap_send_client_username")) {
3106#if USE_ADAPTATION
3107        cfg_directive = "icap_send_client_username";
3108        parse_onoff(&Adaptation::Config::send_username);
3109        cfg_directive = NULL;
3110#else
3111    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'adaptation_send_username' requires --enable-ecap or --enable-icap-client");
3112#endif
3113        return 1;
3114    };
3115    if (!strcmp(token, "icap_client_username_header")) {
3116#if ICAP_CLIENT
3117        cfg_directive = "icap_client_username_header";
3118        parse_string(&Adaptation::Icap::TheConfig.client_username_header);
3119        cfg_directive = NULL;
3120#else
3121    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'icap_client_username_header' requires --enable-icap-client");
3122#endif
3123        return 1;
3124    };
3125    if (!strcmp(token, "icap_client_username_encode")) {
3126#if ICAP_CLIENT
3127        cfg_directive = "icap_client_username_encode";
3128        parse_onoff(&Adaptation::Icap::TheConfig.client_username_encode);
3129        cfg_directive = NULL;
3130#else
3131    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'icap_client_username_encode' requires --enable-icap-client");
3132#endif
3133        return 1;
3134    };
3135    if (!strcmp(token, "icap_service")) {
3136#if ICAP_CLIENT
3137        cfg_directive = "icap_service";
3138        parse_icap_service_type(&Adaptation::Icap::TheConfig);
3139        cfg_directive = NULL;
3140#else
3141    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'icap_service' requires --enable-icap-client");
3142#endif
3143        return 1;
3144    };
3145    if (!strcmp(token, "icap_class")) {
3146#if ICAP_CLIENT
3147        cfg_directive = "icap_class";
3148        parse_icap_class_type();
3149        cfg_directive = NULL;
3150#else
3151    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'icap_class' requires --enable-icap-client");
3152#endif
3153        return 1;
3154    };
3155    if (!strcmp(token, "icap_access")) {
3156#if ICAP_CLIENT
3157        cfg_directive = "icap_access";
3158        parse_icap_access_type();
3159        cfg_directive = NULL;
3160#else
3161    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'icap_access' requires --enable-icap-client");
3162#endif
3163        return 1;
3164    };
3165    if (!strcmp(token, "ecap_enable")) {
3166#if USE_ECAP
3167        cfg_directive = "ecap_enable";
3168        parse_onoff(&Adaptation::Ecap::TheConfig.onoff);
3169        cfg_directive = NULL;
3170#else
3171    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'ecap_enable' requires --enable-ecap");
3172#endif
3173        return 1;
3174    };
3175    if (!strcmp(token, "ecap_service")) {
3176#if USE_ECAP
3177        cfg_directive = "ecap_service";
3178        parse_ecap_service_type(&Adaptation::Ecap::TheConfig);
3179        cfg_directive = NULL;
3180#else
3181    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'ecap_service' requires --enable-ecap");
3182#endif
3183        return 1;
3184    };
3185    if (!strcmp(token, "loadable_modules")) {
3186#if USE_LOADABLE_MODULES
3187        cfg_directive = "loadable_modules";
3188        parse_wordlist(&Config.loadable_module_names);
3189        cfg_directive = NULL;
3190#else
3191    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'loadable_modules' requires --enable-loadable-modules");
3192#endif
3193        return 1;
3194    };
3195    if (!strcmp(token, "adaptation_service_set")) {
3196#if USE_ADAPTATION
3197        cfg_directive = "adaptation_service_set";
3198        parse_adaptation_service_set_type();
3199        cfg_directive = NULL;
3200#else
3201    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'adaptation_service_set' requires --enable-ecap or --enable-icap-client");
3202#endif
3203        return 1;
3204    };
3205    if (!strcmp(token, "adaptation_service_chain")) {
3206#if USE_ADAPTATION
3207        cfg_directive = "adaptation_service_chain";
3208        parse_adaptation_service_chain_type();
3209        cfg_directive = NULL;
3210#else
3211    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'adaptation_service_chain' requires --enable-ecap or --enable-icap-client");
3212#endif
3213        return 1;
3214    };
3215    if (!strcmp(token, "adaptation_access")) {
3216#if USE_ADAPTATION
3217        cfg_directive = "adaptation_access";
3218        parse_adaptation_access_type();
3219        cfg_directive = NULL;
3220#else
3221    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'adaptation_access' requires --enable-ecap or --enable-icap-client");
3222#endif
3223        return 1;
3224    };
3225    if (!strcmp(token, "adaptation_service_iteration_limit")) {
3226#if USE_ADAPTATION
3227        cfg_directive = "adaptation_service_iteration_limit";
3228        parse_int(&Adaptation::Config::service_iteration_limit);
3229        cfg_directive = NULL;
3230#else
3231    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'adaptation_service_iteration_limit' requires --enable-ecap or --enable-icap-client");
3232#endif
3233        return 1;
3234    };
3235    if (!strcmp(token, "adaptation_masterx_shared_names")) {
3236#if USE_ADAPTATION
3237        cfg_directive = "adaptation_masterx_shared_names";
3238        parse_string(&Adaptation::Config::masterx_shared_name);
3239        cfg_directive = NULL;
3240#else
3241    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'adaptation_masterx_shared_names' requires --enable-ecap or --enable-icap-client");
3242#endif
3243        return 1;
3244    };
3245    if (!strcmp(token, "adaptation_meta")) {
3246#if USE_ADAPTATION
3247        cfg_directive = "adaptation_meta";
3248        parse_note(&Adaptation::Config::metaHeaders);
3249        cfg_directive = NULL;
3250#else
3251    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'adaptation_meta' requires --enable-ecap or --enable-icap-client");
3252#endif
3253        return 1;
3254    };
3255    if (!strcmp(token, "icap_retry")) {
3256#if ICAP_CLIENT
3257        cfg_directive = "icap_retry";
3258        parse_acl_access(&Adaptation::Icap::TheConfig.repeat);
3259        cfg_directive = NULL;
3260#else
3261    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'icap_retry' requires --enable-icap-client");
3262#endif
3263        return 1;
3264    };
3265    if (!strcmp(token, "icap_retry_limit")) {
3266#if ICAP_CLIENT
3267        cfg_directive = "icap_retry_limit";
3268        parse_int(&Adaptation::Icap::TheConfig.repeat_limit);
3269        cfg_directive = NULL;
3270#else
3271    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'icap_retry_limit' requires --enable-icap-client");
3272#endif
3273        return 1;
3274    };
3275    if (!strcmp(token, "check_hostnames")) {
3276        cfg_directive = "check_hostnames";
3277        parse_onoff(&Config.onoff.check_hostnames);
3278        cfg_directive = NULL;
3279        return 1;
3280    };
3281    if (!strcmp(token, "allow_underscore")) {
3282        cfg_directive = "allow_underscore";
3283        parse_onoff(&Config.onoff.allow_underscore);
3284        cfg_directive = NULL;
3285        return 1;
3286    };
3287    if (!strcmp(token, "dns_retransmit_interval")) {
3288        cfg_directive = "dns_retransmit_interval";
3289        parse_time_msec(&Config.Timeout.idns_retransmit);
3290        cfg_directive = NULL;
3291        return 1;
3292    };
3293    if (!strcmp(token, "dns_timeout")) {
3294        cfg_directive = "dns_timeout";
3295        parse_time_msec(&Config.Timeout.idns_query);
3296        cfg_directive = NULL;
3297        return 1;
3298    };
3299    if (!strcmp(token, "dns_packet_max")) {
3300        cfg_directive = "dns_packet_max";
3301        parse_b_ssize_t(&Config.dns.packet_max);
3302        cfg_directive = NULL;
3303        return 1;
3304    };
3305    if (!strcmp(token, "dns_defnames")) {
3306        cfg_directive = "dns_defnames";
3307        parse_onoff(&Config.onoff.res_defnames);
3308        cfg_directive = NULL;
3309        return 1;
3310    };
3311    if (!strcmp(token, "dns_multicast_local")) {
3312        cfg_directive = "dns_multicast_local";
3313        parse_onoff(&Config.onoff.dns_mdns);
3314        cfg_directive = NULL;
3315        return 1;
3316    };
3317    if (!strcmp(token, "dns_nameservers")) {
3318        cfg_directive = "dns_nameservers";
3319        parse_wordlist(&Config.dns_nameservers);
3320        cfg_directive = NULL;
3321        return 1;
3322    };
3323    if (!strcmp(token, "hosts_file")) {
3324        cfg_directive = "hosts_file";
3325        parse_string(&Config.etcHostsPath);
3326        cfg_directive = NULL;
3327        return 1;
3328    };
3329    if (!strcmp(token, "append_domain")) {
3330        cfg_directive = "append_domain";
3331        parse_string(&Config.appendDomain);
3332        cfg_directive = NULL;
3333        return 1;
3334    };
3335    if (!strcmp(token, "ignore_unknown_nameservers")) {
3336        cfg_directive = "ignore_unknown_nameservers";
3337        parse_onoff(&Config.onoff.ignore_unknown_nameservers);
3338        cfg_directive = NULL;
3339        return 1;
3340    };
3341    if (!strcmp(token, "dns_v4_first")) {
3342        cfg_directive = "dns_v4_first";
3343        parse_onoff(&Config.dns.v4_first);
3344        cfg_directive = NULL;
3345        return 1;
3346    };
3347    if (!strcmp(token, "ipcache_size")) {
3348        cfg_directive = "ipcache_size";
3349        parse_int(&Config.ipcache.size);
3350        cfg_directive = NULL;
3351        return 1;
3352    };
3353    if (!strcmp(token, "ipcache_low")) {
3354        cfg_directive = "ipcache_low";
3355        parse_int(&Config.ipcache.low);
3356        cfg_directive = NULL;
3357        return 1;
3358    };
3359    if (!strcmp(token, "ipcache_high")) {
3360        cfg_directive = "ipcache_high";
3361        parse_int(&Config.ipcache.high);
3362        cfg_directive = NULL;
3363        return 1;
3364    };
3365    if (!strcmp(token, "fqdncache_size")) {
3366        cfg_directive = "fqdncache_size";
3367        parse_int(&Config.fqdncache.size);
3368        cfg_directive = NULL;
3369        return 1;
3370    };
3371    if (!strcmp(token, "configuration_includes_quoted_values")) {
3372        cfg_directive = "configuration_includes_quoted_values";
3373        parse_configuration_includes_quoted_values(&ConfigParser::RecognizeQuotedValues);
3374        cfg_directive = NULL;
3375        return 1;
3376    };
3377    if (!strcmp(token, "memory_pools")) {
3378        cfg_directive = "memory_pools";
3379        parse_onoff(&Config.onoff.mem_pools);
3380        cfg_directive = NULL;
3381        return 1;
3382    };
3383    if (!strcmp(token, "memory_pools_limit")) {
3384        cfg_directive = "memory_pools_limit";
3385        parse_b_int64_t(&Config.MemPools.limit);
3386        cfg_directive = NULL;
3387        return 1;
3388    };
3389    if (!strcmp(token, "forwarded_for")) {
3390        cfg_directive = "forwarded_for";
3391        parse_string(&opt_forwarded_for);
3392        cfg_directive = NULL;
3393        return 1;
3394    };
3395    if (!strcmp(token, "cachemgr_passwd")) {
3396        cfg_directive = "cachemgr_passwd";
3397        parse_cachemgrpasswd(&Config.passwd_list);
3398        cfg_directive = NULL;
3399        return 1;
3400    };
3401    if (!strcmp(token, "client_db")) {
3402        cfg_directive = "client_db";
3403        parse_onoff(&Config.onoff.client_db);
3404        cfg_directive = NULL;
3405        return 1;
3406    };
3407    if (!strcmp(token, "refresh_all_ims")) {
3408        cfg_directive = "refresh_all_ims";
3409        parse_onoff(&Config.onoff.refresh_all_ims);
3410        cfg_directive = NULL;
3411        return 1;
3412    };
3413    if (!strcmp(token, "reload_into_ims")) {
3414#if USE_HTTP_VIOLATIONS
3415        cfg_directive = "reload_into_ims";
3416        parse_onoff(&Config.onoff.reload_into_ims);
3417        cfg_directive = NULL;
3418#else
3419    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'reload_into_ims' requires --enable-http-violations");
3420#endif
3421        return 1;
3422    };
3423    if (!strcmp(token, "connect_retries")) {
3424        cfg_directive = "connect_retries";
3425        parse_int(&Config.connect_retries);
3426        cfg_directive = NULL;
3427        return 1;
3428    };
3429    if (!strcmp(token, "retry_on_error")) {
3430        cfg_directive = "retry_on_error";
3431        parse_onoff(&Config.retry.onerror);
3432        cfg_directive = NULL;
3433        return 1;
3434    };
3435    if (!strcmp(token, "as_whois_server")) {
3436        cfg_directive = "as_whois_server";
3437        parse_string(&Config.as_whois_server);
3438        cfg_directive = NULL;
3439        return 1;
3440    };
3441    if (!strcmp(token, "offline_mode")) {
3442        cfg_directive = "offline_mode";
3443        parse_onoff(&Config.onoff.offline);
3444        cfg_directive = NULL;
3445        return 1;
3446    };
3447    if (!strcmp(token, "uri_whitespace")) {
3448        cfg_directive = "uri_whitespace";
3449        parse_uri_whitespace(&Config.uri_whitespace);
3450        cfg_directive = NULL;
3451        return 1;
3452    };
3453    if (!strcmp(token, "chroot")) {
3454        cfg_directive = "chroot";
3455        parse_string(&Config.chroot_dir);
3456        cfg_directive = NULL;
3457        return 1;
3458    };
3459    if (!strcmp(token, "balance_on_multiple_ip")) {
3460        cfg_directive = "balance_on_multiple_ip";
3461        parse_onoff(&Config.onoff.balance_on_multiple_ip);
3462        cfg_directive = NULL;
3463        return 1;
3464    };
3465    if (!strcmp(token, "pipeline_prefetch")) {
3466        cfg_directive = "pipeline_prefetch";
3467        parse_pipelinePrefetch(&Config.pipeline_max_prefetch);
3468        cfg_directive = NULL;
3469        return 1;
3470    };
3471    if (!strcmp(token, "high_response_time_warning")) {
3472        cfg_directive = "high_response_time_warning";
3473        parse_int(&Config.warnings.high_rptm);
3474        cfg_directive = NULL;
3475        return 1;
3476    };
3477    if (!strcmp(token, "high_page_fault_warning")) {
3478        cfg_directive = "high_page_fault_warning";
3479        parse_int(&Config.warnings.high_pf);
3480        cfg_directive = NULL;
3481        return 1;
3482    };
3483    if (!strcmp(token, "high_memory_warning")) {
3484#if HAVE_MSTATS&&HAVE_GNUMALLOC_H
3485        cfg_directive = "high_memory_warning";
3486        parse_b_size_t(&Config.warnings.high_memory);
3487        cfg_directive = NULL;
3488#else
3489    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'high_memory_warning' requires GNU Malloc with mstats()");
3490#endif
3491        return 1;
3492    };
3493    if (!strcmp(token, "sleep_after_fork")) {
3494        cfg_directive = "sleep_after_fork";
3495        parse_int(&Config.sleep_after_fork);
3496        cfg_directive = NULL;
3497        return 1;
3498    };
3499    if (!strcmp(token, "windows_ipaddrchangemonitor")) {
3500#if _SQUID_WINDOWS_
3501        cfg_directive = "windows_ipaddrchangemonitor";
3502        parse_onoff(&Config.onoff.WIN32_IpAddrChangeMonitor);
3503        cfg_directive = NULL;
3504#else
3505    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'windows_ipaddrchangemonitor' requires MS Windows");
3506#endif
3507        return 1;
3508    };
3509    if (!strcmp(token, "eui_lookup")) {
3510#if USE_SQUID_EUI
3511        cfg_directive = "eui_lookup";
3512        parse_onoff(&Eui::TheConfig.euiLookup);
3513        cfg_directive = NULL;
3514#else
3515    debugs(0, DBG_PARSE_NOTE(DBG_IMPORTANT), "ERROR: 'eui_lookup' requires --enable-eui");
3516#endif
3517        return 1;
3518    };
3519    if (!strcmp(token, "max_filedescriptors")) {
3520        cfg_directive = "max_filedescriptors";
3521        parse_int(&Config.max_filedescriptors);
3522        cfg_directive = NULL;
3523        return 1;
3524    };
3525    if (!strcmp(token, "max_filedesc")) {
3526        cfg_directive = "max_filedesc";
3527        parse_int(&Config.max_filedescriptors);
3528        cfg_directive = NULL;
3529        return 1;
3530    };
3531        return 0; /* failure */
3532}
3533
3534static void
3535dump_config(StoreEntry *entry)
3536{
3537    debugs(5, 4, HERE);
3538    dump_int(entry, "workers", Config.workers);
3539    dump_CpuAffinityMap(entry, "cpu_affinity_map", Config.cpuAffinityMap);
3540#if USE_AUTH
3541    dump_authparam(entry, "auth_param", Auth::TheConfig);
3542#endif
3543    dump_time_t(entry, "authenticate_cache_garbage_interval", Config.authenticateGCInterval);
3544    dump_time_t(entry, "authenticate_ttl", Config.authenticateTTL);
3545    dump_time_t(entry, "authenticate_ip_ttl", Config.authenticateIpTTL);
3546    dump_externalAclHelper(entry, "external_acl_type", Config.externalAclHelperList);
3547    dump_acl(entry, "acl", Config.aclList);
3548    dump_acl_access(entry, "proxy_protocol_access", Config.accessList.proxyProtocol);
3549#if FOLLOW_X_FORWARDED_FOR
3550    dump_acl_access(entry, "follow_x_forwarded_for", Config.accessList.followXFF);
3551#endif
3552#if FOLLOW_X_FORWARDED_FOR
3553    dump_onoff(entry, "acl_uses_indirect_client", Config.onoff.acl_uses_indirect_client);
3554#endif
3555#if FOLLOW_X_FORWARDED_FOR&&USE_DELAY_POOLS
3556    dump_onoff(entry, "delay_pool_uses_indirect_client", Config.onoff.delay_pool_uses_indirect_client);
3557#endif
3558#if FOLLOW_X_FORWARDED_FOR
3559    dump_onoff(entry, "log_uses_indirect_client", Config.onoff.log_uses_indirect_client);
3560#endif
3561#if FOLLOW_X_FORWARDED_FOR&&LINUX_NETFILTER
3562    dump_onoff(entry, "tproxy_uses_indirect_client", Config.onoff.tproxy_uses_indirect_client);
3563#endif
3564    dump_acl_access(entry, "spoof_client_ip", Config.accessList.spoof_client_ip);
3565    dump_acl_access(entry, "http_access", Config.accessList.http);
3566    dump_acl_access(entry, "adapted_http_access", Config.accessList.adapted_http);
3567    dump_acl_access(entry, "http_reply_access", Config.accessList.reply);
3568    dump_acl_access(entry, "icp_access", Config.accessList.icp);
3569#if USE_HTCP
3570    dump_acl_access(entry, "htcp_access", Config.accessList.htcp);
3571#endif
3572#if USE_HTCP
3573    dump_acl_access(entry, "htcp_clr_access", Config.accessList.htcp_clr);
3574#endif
3575    dump_acl_access(entry, "miss_access", Config.accessList.miss);
3576#if USE_IDENT
3577    dump_acl_access(entry, "ident_lookup_access", Ident::TheConfig.identLookup);
3578#endif
3579    dump_acl_b_size_t(entry, "reply_body_max_size", Config.ReplyBodySize);
3580    dump_PortCfg(entry, "http_port", HttpPortList);
3581#if USE_OPENSSL
3582    dump_PortCfg(entry, "https_port", HttpsPortList);
3583#endif
3584    dump_PortCfg(entry, "ftp_port", FtpPortList);
3585    dump_acl_tos(entry, "tcp_outgoing_tos", Ip::Qos::TheConfig.tosToServer);
3586    dump_acl_tos(entry, "clientside_tos", Ip::Qos::TheConfig.tosToClient);
3587#if SO_MARK&&USE_LIBCAP
3588    dump_acl_nfmark(entry, "tcp_outgoing_mark", Ip::Qos::TheConfig.nfmarkToServer);
3589#endif
3590#if SO_MARK&&USE_LIBCAP
3591    dump_acl_nfmark(entry, "clientside_mark", Ip::Qos::TheConfig.nfmarkToClient);
3592#endif
3593#if USE_QOS_TOS
3594    dump_QosConfig(entry, "qos_flows", Ip::Qos::TheConfig);
3595#endif
3596    dump_acl_address(entry, "tcp_outgoing_address", Config.accessList.outgoing_address);
3597    dump_onoff(entry, "host_verify_strict", Config.onoff.hostStrictVerify);
3598    dump_onoff(entry, "client_dst_passthru", Config.onoff.client_dst_passthru);
3599#if USE_OPENSSL
3600    dump_onoff(entry, "ssl_unclean_shutdown", Config.SSL.unclean_shutdown);
3601#endif
3602#if USE_OPENSSL
3603    dump_string(entry, "ssl_engine", Config.SSL.ssl_engine);
3604#endif
3605#if USE_OPENSSL
3606    dump_string(entry, "sslproxy_client_certificate", Config.ssl_client.cert);
3607#endif
3608#if USE_OPENSSL
3609    dump_string(entry, "sslproxy_client_key", Config.ssl_client.key);
3610#endif
3611#if USE_OPENSSL
3612    dump_int(entry, "sslproxy_version", Config.ssl_client.version);
3613#endif
3614#if USE_OPENSSL
3615    dump_string(entry, "sslproxy_options", Config.ssl_client.options);
3616#endif
3617#if USE_OPENSSL
3618    dump_string(entry, "sslproxy_cipher", Config.ssl_client.cipher);
3619#endif
3620#if USE_OPENSSL
3621    dump_string(entry, "sslproxy_cafile", Config.ssl_client.cafile);
3622#endif
3623#if USE_OPENSSL
3624    dump_string(entry, "sslproxy_capath", Config.ssl_client.capath);
3625#endif
3626#if USE_OPENSSL
3627    dump_int(entry, "sslproxy_session_ttl", Config.SSL.session_ttl);
3628#endif
3629#if USE_OPENSSL
3630    dump_b_size_t(entry, "sslproxy_session_cache_size", Config.SSL.sessionCacheSize);
3631#endif
3632#if USE_OPENSSL
3633    dump_string(entry, "sslproxy_cert_sign_hash", Config.SSL.certSignHash);
3634#endif
3635#if USE_OPENSSL
3636    dump_sslproxy_ssl_bump(entry, "ssl_bump", Config.accessList.ssl_bump);
3637#endif
3638#if USE_OPENSSL
3639    dump_string(entry, "sslproxy_flags", Config.ssl_client.flags);
3640#endif
3641#if USE_OPENSSL
3642    dump_acl_access(entry, "sslproxy_cert_error", Config.ssl_client.cert_error);
3643#endif
3644#if USE_OPENSSL
3645    dump_sslproxy_cert_sign(entry, "sslproxy_cert_sign", Config.ssl_client.cert_sign);
3646#endif
3647#if USE_OPENSSL
3648    dump_sslproxy_cert_adapt(entry, "sslproxy_cert_adapt", Config.ssl_client.cert_adapt);
3649#endif
3650#if USE_OPENSSL
3651    dump_string(entry, "sslpassword_program", Config.Program.ssl_password);
3652#endif
3653#if USE_SSL_CRTD
3654    dump_eol(entry, "sslcrtd_program", Ssl::TheConfig.ssl_crtd);
3655#endif
3656#if USE_SSL_CRTD
3657    dump_HelperChildConfig(entry, "sslcrtd_children", Ssl::TheConfig.ssl_crtdChildren);
3658#endif
3659#if USE_OPENSSL
3660    dump_eol(entry, "sslcrtvalidator_program", Ssl::TheConfig.ssl_crt_validator);
3661#endif
3662#if USE_OPENSSL
3663    dump_HelperChildConfig(entry, "sslcrtvalidator_children", Ssl::TheConfig.ssl_crt_validator_Children);
3664#endif
3665    dump_peer(entry, "cache_peer", Config.peers);
3666    dump_time_t(entry, "dead_peer_timeout", Config.Timeout.deadPeer);
3667    dump_int(entry, "forward_max_tries", Config.forward_max_tries);
3668    dump_b_size_t(entry, "cache_mem", Config.memMaxSize);
3669    dump_b_size_t(entry, "maximum_object_size_in_memory", Config.Store.maxInMemObjSize);
3670    dump_YesNoNone(entry, "memory_cache_shared", Config.memShared);
3671    dump_memcachemode(entry, "memory_cache_mode", Config);
3672    dump_removalpolicy(entry, "memory_replacement_policy", Config.memPolicy);
3673    dump_removalpolicy(entry, "cache_replacement_policy", Config.replPolicy);
3674    dump_b_int64_t(entry, "minimum_object_size", Config.Store.minObjectSize);
3675    dump_b_int64_t(entry, "maximum_object_size", Config.Store.maxObjectSize);
3676    dump_cachedir(entry, "cache_dir", Config.cacheSwap);
3677    dump_string(entry, "store_dir_select_algorithm", Config.store_dir_select_algorithm);
3678    dump_int(entry, "max_open_disk_fds", Config.max_open_disk_fds);
3679    dump_int(entry, "cache_swap_low", Config.Swap.lowWaterMark);
3680    dump_int(entry, "cache_swap_high", Config.Swap.highWaterMark);
3681    dump_logformat(entry, "logformat", Log::TheConfig);
3682    dump_access_log(entry, "access_log", Config.Log.accesslogs);
3683#if ICAP_CLIENT
3684    dump_access_log(entry, "icap_log", Config.Log.icaplogs);
3685#endif
3686    dump_string(entry, "logfile_daemon", Log::TheConfig.logfile_daemon);
3687    dump_acl_access(entry, "stats_collection", Config.accessList.stats_collection);
3688    dump_string(entry, "cache_store_log", Config.Log.store);
3689    dump_string(entry, "cache_swap_state", Config.Log.swap);
3690    dump_int(entry, "logfile_rotate", Config.Log.rotateNumber);
3691    dump_string(entry, "mime_table", Config.mimeTablePathname);
3692    dump_onoff(entry, "log_mime_hdrs", Config.onoff.log_mime_hdrs);
3693    dump_string(entry, "pid_filename", Config.pidFilename);
3694    dump_address(entry, "client_netmask", Config.Addrs.client_netmask);
3695    dump_onoff(entry, "strip_query_terms", Config.onoff.strip_query_terms);
3696    dump_onoff(entry, "buffered_logs", Config.onoff.buffered_logs);
3697#if USE_ICMP
3698    dump_string(entry, "netdb_filename", Config.netdbFilename);
3699#endif
3700    dump_string(entry, "cache_log", Debug::cache_log);
3701    dump_eol(entry, "debug_options", Debug::debugOptions);
3702    dump_string(entry, "coredump_dir", Config.coredump_dir);
3703    dump_string(entry, "ftp_user", Config.Ftp.anon_user);
3704    dump_onoff(entry, "ftp_passive", Config.Ftp.passive);
3705    dump_onoff(entry, "ftp_epsv_all", Config.Ftp.epsv_all);
3706    dump_ftp_epsv(entry, "ftp_epsv", Config.accessList.ftp_epsv);
3707    dump_onoff(entry, "ftp_eprt", Config.Ftp.eprt);
3708    dump_onoff(entry, "ftp_sanitycheck", Config.Ftp.sanitycheck);
3709    dump_onoff(entry, "ftp_telnet_protocol", Config.Ftp.telnet);
3710    dump_string(entry, "diskd_program", Config.Program.diskd);
3711#if USE_UNLINKD
3712    dump_string(entry, "unlinkd_program", Config.Program.unlinkd);
3713#endif
3714#if USE_ICMP
3715    dump_string(entry, "pinger_program", Config.pinger.program);
3716#endif
3717#if USE_ICMP
3718    dump_onoff(entry, "pinger_enable", Config.pinger.enable);
3719#endif
3720    dump_wordlist(entry, "url_rewrite_program", Config.Program.redirect);
3721    dump_HelperChildConfig(entry, "url_rewrite_children", Config.redirectChildren);
3722    dump_onoff(entry, "url_rewrite_host_header", Config.onoff.redir_rewrites_host);
3723    dump_acl_access(entry, "url_rewrite_access", Config.accessList.redirector);
3724    dump_onoff(entry, "url_rewrite_bypass", Config.onoff.redirector_bypass);
3725    dump_TokenOrQuotedString(entry, "url_rewrite_extras", Config.redirector_extras);
3726    dump_wordlist(entry, "store_id_program", Config.Program.store_id);
3727    dump_TokenOrQuotedString(entry, "store_id_extras", Config.storeId_extras);
3728    dump_HelperChildConfig(entry, "store_id_children", Config.storeIdChildren);
3729    dump_acl_access(entry, "store_id_access", Config.accessList.store_id);
3730    dump_onoff(entry, "store_id_bypass", Config.onoff.store_id_bypass);
3731    dump_acl_access(entry, "cache", Config.accessList.noCache);
3732    dump_acl_access(entry, "send_hit", Config.accessList.sendHit);
3733    dump_acl_access(entry, "store_miss", Config.accessList.storeMiss);
3734    dump_time_t(entry, "max_stale", Config.maxStale);
3735    dump_refreshpattern(entry, "refresh_pattern", Config.Refresh);
3736    dump_kb_int64_t(entry, "quick_abort_min", Config.quickAbort.min);
3737    dump_kb_int64_t(entry, "quick_abort_max", Config.quickAbort.max);
3738    dump_int(entry, "quick_abort_pct", Config.quickAbort.pct);
3739    dump_b_int64_t(entry, "read_ahead_gap", Config.readAheadGap);
3740#if USE_HTTP_VIOLATIONS
3741    dump_time_t(entry, "negative_ttl", Config.negativeTtl);
3742#endif
3743    dump_time_t(entry, "positive_dns_ttl", Config.positiveDnsTtl);
3744    dump_time_t(entry, "negative_dns_ttl", Config.negativeDnsTtl);
3745    dump_acl_b_size_t(entry, "range_offset_limit", Config.rangeOffsetLimit);
3746    dump_time_t(entry, "minimum_expiry_time", Config.minimum_expiry_time);
3747    dump_b_int64_t(entry, "store_avg_object_size", Config.Store.avgObjectSize);
3748    dump_int(entry, "store_objects_per_bucket", Config.Store.objectsPerBucket);
3749    dump_b_size_t(entry, "request_header_max_size", Config.maxRequestHeaderSize);
3750    dump_b_size_t(entry, "reply_header_max_size", Config.maxReplyHeaderSize);
3751    dump_b_int64_t(entry, "request_body_max_size", Config.maxRequestBodySize);
3752    dump_b_size_t(entry, "client_request_buffer_max_size", Config.maxRequestBufferSize);
3753#if USE_HTTP_VIOLATIONS
3754    dump_acl_access(entry, "broken_posts", Config.accessList.brokenPosts);
3755#endif
3756#if FOLLOW_X_FORWARDED_FOR&&USE_ADAPTATION
3757    dump_onoff(entry, "adaptation_uses_indirect_client", Adaptation::Config::use_indirect_client);
3758#endif
3759#if USE_HTTP_VIOLATIONS
3760    dump_onoff(entry, "via", Config.onoff.via);
3761#endif
3762    dump_onoff(entry, "ie_refresh", Config.onoff.ie_refresh);
3763    dump_onoff(entry, "vary_ignore_expire", Config.onoff.vary_ignore_expire);
3764    dump_onoff(entry, "request_entities", Config.onoff.request_entities);
3765#if USE_HTTP_VIOLATIONS
3766    dump_http_header_access(entry, "request_header_access", Config.request_header_access);
3767#endif
3768#if USE_HTTP_VIOLATIONS
3769    dump_http_header_access(entry, "reply_header_access", Config.reply_header_access);
3770#endif
3771#if USE_HTTP_VIOLATIONS
3772    dump_http_header_replace(entry, "request_header_replace", Config.request_header_access);
3773#endif
3774#if USE_HTTP_VIOLATIONS
3775    dump_http_header_replace(entry, "reply_header_replace", Config.reply_header_access);
3776#endif
3777    dump_HeaderWithAclList(entry, "request_header_add", Config.request_header_add);
3778    dump_note(entry, "note", Config.notes);
3779    dump_tristate(entry, "relaxed_header_parser", Config.onoff.relaxed_header_parser);
3780    dump_onoff(entry, "collapsed_forwarding", Config.onoff.collapsed_forwarding);
3781    dump_time_t(entry, "forward_timeout", Config.Timeout.forward);
3782    dump_time_t(entry, "connect_timeout", Config.Timeout.connect);
3783    dump_time_t(entry, "peer_connect_timeout", Config.Timeout.peer_connect);
3784    dump_time_t(entry, "read_timeout", Config.Timeout.read);
3785    dump_time_t(entry, "write_timeout", Config.Timeout.write);
3786    dump_time_t(entry, "request_timeout", Config.Timeout.request);
3787    dump_time_t(entry, "client_idle_pconn_timeout", Config.Timeout.clientIdlePconn);
3788    dump_time_t(entry, "ftp_client_idle_timeout", Config.Timeout.ftpClientIdle);
3789    dump_time_t(entry, "client_lifetime", Config.Timeout.lifetime);
3790    dump_onoff(entry, "half_closed_clients", Config.onoff.half_closed_clients);
3791    dump_time_t(entry, "server_idle_pconn_timeout", Config.Timeout.serverIdlePconn);
3792#if USE_IDENT
3793    dump_time_t(entry, "ident_timeout", Ident::TheConfig.timeout);
3794#endif
3795    dump_time_t(entry, "shutdown_lifetime", Config.shutdownLifetime);
3796    dump_string(entry, "cache_mgr", Config.adminEmail);
3797    dump_string(entry, "mail_from", Config.EmailFrom);
3798    dump_eol(entry, "mail_program", Config.EmailProgram);
3799    dump_string(entry, "cache_effective_user", Config.effectiveUser);
3800    dump_string(entry, "cache_effective_group", Config.effectiveGroup);
3801    dump_onoff(entry, "httpd_suppress_version_string", Config.onoff.httpd_suppress_version_string);
3802    dump_string(entry, "visible_hostname", Config.visibleHostname);
3803    dump_string(entry, "unique_hostname", Config.uniqueHostname);
3804    dump_wordlist(entry, "hostname_aliases", Config.hostnameAliases);
3805    dump_int(entry, "umask", Config.umask);
3806    dump_time_t(entry, "announce_period", Config.Announce.period);
3807    dump_string(entry, "announce_host", Config.Announce.host);
3808    dump_string(entry, "announce_file", Config.Announce.file);
3809    dump_u_short(entry, "announce_port", Config.Announce.port);
3810    dump_string(entry, "httpd_accel_surrogate_id", Config.Accel.surrogate_id);
3811    dump_onoff(entry, "http_accel_surrogate_remote", Config.onoff.surrogate_is_remote);
3812#if USE_SQUID_ESI
3813    dump_string(entry, "esi_parser", ESIParser::Type);
3814#endif
3815#if USE_DELAY_POOLS
3816    dump_delay_pool_count(entry, "delay_pools", Config.Delay);
3817#endif
3818#if USE_DELAY_POOLS
3819    dump_delay_pool_class(entry, "delay_class", Config.Delay);
3820#endif
3821#if USE_DELAY_POOLS
3822    dump_delay_pool_access(entry, "delay_access", Config.Delay);
3823#endif
3824#if USE_DELAY_POOLS
3825    dump_delay_pool_rates(entry, "delay_parameters", Config.Delay);
3826#endif
3827#if USE_DELAY_POOLS
3828    dump_u_short(entry, "delay_initial_bucket_level", Config.Delay.initial);
3829#endif
3830#if USE_DELAY_POOLS
3831    dump_client_delay_pool_count(entry, "client_delay_pools", Config.ClientDelay);
3832#endif
3833#if USE_DELAY_POOLS
3834    dump_u_short(entry, "client_delay_initial_bucket_level", Config.ClientDelay.initial);
3835#endif
3836#if USE_DELAY_POOLS
3837    dump_client_delay_pool_rates(entry, "client_delay_parameters", Config.ClientDelay);
3838#endif
3839#if USE_DELAY_POOLS
3840    dump_client_delay_pool_access(entry, "client_delay_access", Config.ClientDelay);
3841#endif
3842#if USE_WCCP
3843    dump_address(entry, "wccp_router", Config.Wccp.router);
3844#endif
3845#if USE_WCCPv2
3846    dump_IpAddress_list(entry, "wccp2_router", Config.Wccp2.router);
3847#endif
3848#if USE_WCCP
3849    dump_int(entry, "wccp_version", Config.Wccp.version);
3850#endif
3851#if USE_WCCPv2
3852    dump_onoff(entry, "wccp2_rebuild_wait", Config.Wccp2.rebuildwait);
3853#endif
3854#if USE_WCCPv2
3855    dump_wccp2_method(entry, "wccp2_forwarding_method", Config.Wccp2.forwarding_method);
3856#endif
3857#if USE_WCCPv2
3858    dump_wccp2_method(entry, "wccp2_return_method", Config.Wccp2.return_method);
3859#endif
3860#if USE_WCCPv2
3861    dump_wccp2_amethod(entry, "wccp2_assignment_method", Config.Wccp2.assignment_method);
3862#endif
3863#if USE_WCCPv2
3864    dump_wccp2_service(entry, "wccp2_service", Config.Wccp2.info);
3865#endif
3866#if USE_WCCPv2
3867    dump_wccp2_service_info(entry, "wccp2_service_info", Config.Wccp2.info);
3868#endif
3869#if USE_WCCPv2
3870    dump_int(entry, "wccp2_weight", Config.Wccp2.weight);
3871#endif
3872#if USE_WCCP
3873    dump_address(entry, "wccp_address", Config.Wccp.address);
3874#endif
3875#if USE_WCCPv2
3876    dump_address(entry, "wccp2_address", Config.Wccp2.address);
3877#endif
3878    dump_onoff(entry, "client_persistent_connections", Config.onoff.client_pconns);
3879    dump_onoff(entry, "server_persistent_connections", Config.onoff.server_pconns);
3880    dump_onoff(entry, "persistent_connection_after_error", Config.onoff.error_pconns);
3881    dump_onoff(entry, "detect_broken_pconn", Config.onoff.detect_broken_server_pconns);
3882#if USE_CACHE_DIGESTS
3883    dump_onoff(entry, "digest_generation", Config.onoff.digest_generation);
3884#endif
3885#if USE_CACHE_DIGESTS
3886    dump_int(entry, "digest_bits_per_entry", Config.digest.bits_per_entry);
3887#endif
3888#if USE_CACHE_DIGESTS
3889    dump_time_t(entry, "digest_rebuild_period", Config.digest.rebuild_period);
3890#endif
3891#if USE_CACHE_DIGESTS
3892    dump_time_t(entry, "digest_rewrite_period", Config.digest.rewrite_period);
3893#endif
3894#if USE_CACHE_DIGESTS
3895    dump_b_size_t(entry, "digest_swapout_chunk_size", Config.digest.swapout_chunk_size);
3896#endif
3897#if USE_CACHE_DIGESTS
3898    dump_int(entry, "digest_rebuild_chunk_percentage", Config.digest.rebuild_chunk_percentage);
3899#endif
3900#if SQUID_SNMP
3901    dump_u_short(entry, "snmp_port", Config.Port.snmp);
3902#endif
3903#if SQUID_SNMP
3904    dump_acl_access(entry, "snmp_access", Config.accessList.snmp);
3905#endif
3906#if SQUID_SNMP
3907    dump_address(entry, "snmp_incoming_address", Config.Addrs.snmp_incoming);
3908#endif
3909#if SQUID_SNMP
3910    dump_address(entry, "snmp_outgoing_address", Config.Addrs.snmp_outgoing);
3911#endif
3912    dump_u_short(entry, "icp_port", Config.Port.icp);
3913#if USE_HTCP
3914    dump_u_short(entry, "htcp_port", Config.Port.htcp);
3915#endif
3916    dump_onoff(entry, "log_icp_queries", Config.onoff.log_udp);
3917    dump_address(entry, "udp_incoming_address", Config.Addrs.udp_incoming);
3918    dump_address(entry, "udp_outgoing_address", Config.Addrs.udp_outgoing);
3919    dump_onoff(entry, "icp_hit_stale", Config.onoff.icp_hit_stale);
3920    dump_int(entry, "minimum_direct_hops", Config.minDirectHops);
3921    dump_int(entry, "minimum_direct_rtt", Config.minDirectRtt);
3922    dump_int(entry, "netdb_low", Config.Netdb.low);
3923    dump_int(entry, "netdb_high", Config.Netdb.high);
3924    dump_time_t(entry, "netdb_ping_period", Config.Netdb.period);
3925    dump_onoff(entry, "query_icmp", Config.onoff.query_icmp);
3926    dump_onoff(entry, "test_reachability", Config.onoff.test_reachability);
3927    dump_int(entry, "icp_query_timeout", Config.Timeout.icp_query);
3928    dump_int(entry, "maximum_icp_query_timeout", Config.Timeout.icp_query_max);
3929    dump_int(entry, "minimum_icp_query_timeout", Config.Timeout.icp_query_min);
3930    dump_time_t(entry, "background_ping_rate", Config.backgroundPingRate);
3931    dump_wordlist(entry, "mcast_groups", Config.mcast_group_list);
3932#if MULTICAST_MISS_STREAM
3933    dump_address(entry, "mcast_miss_addr", Config.mcast_miss.addr);
3934#endif
3935#if MULTICAST_MISS_STREAM
3936    dump_u_short(entry, "mcast_miss_ttl", Config.mcast_miss.ttl);
3937#endif
3938#if MULTICAST_MISS_STREAM
3939    dump_u_short(entry, "mcast_miss_port", Config.mcast_miss.port);
3940#endif
3941#if MULTICAST_MISS_STREAM
3942    dump_string(entry, "mcast_miss_encode_key", Config.mcast_miss.encode_key);
3943#endif
3944    dump_int(entry, "mcast_icp_query_timeout", Config.Timeout.mcast_icp_query);
3945    dump_string(entry, "icon_directory", Config.icons.directory);
3946    dump_onoff(entry, "global_internal_static", Config.onoff.global_internal_static);
3947    dump_onoff(entry, "short_icon_urls", Config.icons.use_short_names);
3948    dump_string(entry, "error_directory", Config.errorDirectory);
3949#if USE_ERR_LOCALES
3950    dump_string(entry, "error_default_language", Config.errorDefaultLanguage);
3951#endif
3952#if USE_ERR_LOCALES
3953    dump_onoff(entry, "error_log_languages", Config.errorLogMissingLanguages);
3954#endif
3955    dump_string(entry, "err_page_stylesheet", Config.errorStylesheet);
3956    dump_eol(entry, "err_html_text", Config.errHtmlText);
3957    dump_onoff(entry, "email_err_data", Config.onoff.emailErrData);
3958    dump_denyinfo(entry, "deny_info", Config.denyInfoList);
3959    dump_onoff(entry, "nonhierarchical_direct", Config.onoff.nonhierarchical_direct);
3960    dump_onoff(entry, "prefer_direct", Config.onoff.prefer_direct);
3961    dump_onoff(entry, "cache_miss_revalidate", Config.onoff.cache_miss_revalidate);
3962    dump_acl_access(entry, "always_direct", Config.accessList.AlwaysDirect);
3963    dump_acl_access(entry, "never_direct", Config.accessList.NeverDirect);
3964    dump_int(entry, "incoming_udp_average", Config.comm_incoming.udp.average);
3965    dump_int(entry, "incoming_tcp_average", Config.comm_incoming.tcp.average);
3966    dump_int(entry, "incoming_dns_average", Config.comm_incoming.dns.average);
3967    dump_int(entry, "min_udp_poll_cnt", Config.comm_incoming.udp.min_poll);
3968    dump_int(entry, "min_dns_poll_cnt", Config.comm_incoming.dns.min_poll);
3969    dump_int(entry, "min_tcp_poll_cnt", Config.comm_incoming.tcp.min_poll);
3970    dump_string(entry, "accept_filter", Config.accept_filter);
3971    dump_int(entry, "client_ip_max_connections", Config.client_ip_max_connections);
3972    dump_b_size_t(entry, "tcp_recv_bufsize", Config.tcpRcvBufsz);
3973#if ICAP_CLIENT
3974    dump_onoff(entry, "icap_enable", Adaptation::Icap::TheConfig.onoff);
3975#endif
3976#if ICAP_CLIENT
3977    dump_time_t(entry, "icap_connect_timeout", Adaptation::Icap::TheConfig.connect_timeout_raw);
3978#endif
3979#if ICAP_CLIENT
3980    dump_time_t(entry, "icap_io_timeout", Adaptation::Icap::TheConfig.io_timeout_raw);
3981#endif
3982#if ICAP_CLIENT
3983    dump_icap_service_failure_limit(entry, "icap_service_failure_limit", Adaptation::Icap::TheConfig);
3984#endif
3985#if ICAP_CLIENT
3986    dump_int(entry, "icap_service_revival_delay", Adaptation::Icap::TheConfig.service_revival_delay);
3987#endif
3988#if ICAP_CLIENT
3989    dump_onoff(entry, "icap_preview_enable", Adaptation::Icap::TheConfig.preview_enable);
3990#endif
3991#if ICAP_CLIENT
3992    dump_int(entry, "icap_preview_size", Adaptation::Icap::TheConfig.preview_size);
3993#endif
3994#if ICAP_CLIENT
3995    dump_onoff(entry, "icap_206_enable", Adaptation::Icap::TheConfig.allow206_enable);
3996#endif
3997#if ICAP_CLIENT
3998    dump_int(entry, "icap_default_options_ttl", Adaptation::Icap::TheConfig.default_options_ttl);
3999#endif
4000#if ICAP_CLIENT
4001    dump_onoff(entry, "icap_persistent_connections", Adaptation::Icap::TheConfig.reuse_connections);
4002#endif
4003#if USE_ADAPTATION
4004    dump_onoff(entry, "adaptation_send_client_ip", Adaptation::Config::send_client_ip);
4005#endif
4006#if USE_ADAPTATION
4007    dump_onoff(entry, "adaptation_send_username", Adaptation::Config::send_username);
4008#endif
4009#if ICAP_CLIENT
4010    dump_string(entry, "icap_client_username_header", Adaptation::Icap::TheConfig.client_username_header);
4011#endif
4012#if ICAP_CLIENT
4013    dump_onoff(entry, "icap_client_username_encode", Adaptation::Icap::TheConfig.client_username_encode);
4014#endif
4015#if ICAP_CLIENT
4016    dump_icap_service_type(entry, "icap_service", Adaptation::Icap::TheConfig);
4017#endif
4018#if USE_ECAP
4019    dump_onoff(entry, "ecap_enable", Adaptation::Ecap::TheConfig.onoff);
4020#endif
4021#if USE_ECAP
4022    dump_ecap_service_type(entry, "ecap_service", Adaptation::Ecap::TheConfig);
4023#endif
4024#if USE_LOADABLE_MODULES
4025    dump_wordlist(entry, "loadable_modules", Config.loadable_module_names);
4026#endif
4027#if USE_ADAPTATION
4028    dump_int(entry, "adaptation_service_iteration_limit", Adaptation::Config::service_iteration_limit);
4029#endif
4030#if USE_ADAPTATION
4031    dump_string(entry, "adaptation_masterx_shared_names", Adaptation::Config::masterx_shared_name);
4032#endif
4033#if USE_ADAPTATION
4034    dump_note(entry, "adaptation_meta", Adaptation::Config::metaHeaders);
4035#endif
4036#if ICAP_CLIENT
4037    dump_acl_access(entry, "icap_retry", Adaptation::Icap::TheConfig.repeat);
4038#endif
4039#if ICAP_CLIENT
4040    dump_int(entry, "icap_retry_limit", Adaptation::Icap::TheConfig.repeat_limit);
4041#endif
4042    dump_onoff(entry, "check_hostnames", Config.onoff.check_hostnames);
4043    dump_onoff(entry, "allow_underscore", Config.onoff.allow_underscore);
4044    dump_time_msec(entry, "dns_retransmit_interval", Config.Timeout.idns_retransmit);
4045    dump_time_msec(entry, "dns_timeout", Config.Timeout.idns_query);
4046    dump_b_ssize_t(entry, "dns_packet_max", Config.dns.packet_max);
4047    dump_onoff(entry, "dns_defnames", Config.onoff.res_defnames);
4048    dump_onoff(entry, "dns_multicast_local", Config.onoff.dns_mdns);
4049    dump_wordlist(entry, "dns_nameservers", Config.dns_nameservers);
4050    dump_string(entry, "hosts_file", Config.etcHostsPath);
4051    dump_string(entry, "append_domain", Config.appendDomain);
4052    dump_onoff(entry, "ignore_unknown_nameservers", Config.onoff.ignore_unknown_nameservers);
4053    dump_onoff(entry, "dns_v4_first", Config.dns.v4_first);
4054    dump_int(entry, "ipcache_size", Config.ipcache.size);
4055    dump_int(entry, "ipcache_low", Config.ipcache.low);
4056    dump_int(entry, "ipcache_high", Config.ipcache.high);
4057    dump_int(entry, "fqdncache_size", Config.fqdncache.size);
4058    dump_configuration_includes_quoted_values(entry, "configuration_includes_quoted_values", ConfigParser::RecognizeQuotedValues);
4059    dump_onoff(entry, "memory_pools", Config.onoff.mem_pools);
4060    dump_b_int64_t(entry, "memory_pools_limit", Config.MemPools.limit);
4061    dump_string(entry, "forwarded_for", opt_forwarded_for);
4062    dump_cachemgrpasswd(entry, "cachemgr_passwd", Config.passwd_list);
4063    dump_onoff(entry, "client_db", Config.onoff.client_db);
4064    dump_onoff(entry, "refresh_all_ims", Config.onoff.refresh_all_ims);
4065#if USE_HTTP_VIOLATIONS
4066    dump_onoff(entry, "reload_into_ims", Config.onoff.reload_into_ims);
4067#endif
4068    dump_int(entry, "connect_retries", Config.connect_retries);
4069    dump_onoff(entry, "retry_on_error", Config.retry.onerror);
4070    dump_string(entry, "as_whois_server", Config.as_whois_server);
4071    dump_onoff(entry, "offline_mode", Config.onoff.offline);
4072    dump_uri_whitespace(entry, "uri_whitespace", Config.uri_whitespace);
4073    dump_string(entry, "chroot", Config.chroot_dir);
4074    dump_onoff(entry, "balance_on_multiple_ip", Config.onoff.balance_on_multiple_ip);
4075    dump_pipelinePrefetch(entry, "pipeline_prefetch", Config.pipeline_max_prefetch);
4076    dump_int(entry, "high_response_time_warning", Config.warnings.high_rptm);
4077    dump_int(entry, "high_page_fault_warning", Config.warnings.high_pf);
4078#if HAVE_MSTATS&&HAVE_GNUMALLOC_H
4079    dump_b_size_t(entry, "high_memory_warning", Config.warnings.high_memory);
4080#endif
4081    dump_int(entry, "sleep_after_fork", Config.sleep_after_fork);
4082#if _SQUID_WINDOWS_
4083    dump_onoff(entry, "windows_ipaddrchangemonitor", Config.onoff.WIN32_IpAddrChangeMonitor);
4084#endif
4085#if USE_SQUID_EUI
4086    dump_onoff(entry, "eui_lookup", Eui::TheConfig.euiLookup);
4087#endif
4088    dump_int(entry, "max_filedescriptors", Config.max_filedescriptors);
4089}
4090
4091static void
4092free_all(void)
4093{
4094    debugs(5, 4, HERE);
4095    free_int(&Config.workers);
4096    free_CpuAffinityMap(&Config.cpuAffinityMap);
4097#if USE_AUTH
4098    free_authparam(&Auth::TheConfig);
4099#endif
4100    free_time_t(&Config.authenticateGCInterval);
4101    free_time_t(&Config.authenticateTTL);
4102    free_time_t(&Config.authenticateIpTTL);
4103    free_externalAclHelper(&Config.externalAclHelperList);
4104    free_acl(&Config.aclList);
4105    free_acl_access(&Config.accessList.proxyProtocol);
4106#if FOLLOW_X_FORWARDED_FOR
4107    free_acl_access(&Config.accessList.followXFF);
4108#endif
4109#if FOLLOW_X_FORWARDED_FOR
4110    free_onoff(&Config.onoff.acl_uses_indirect_client);
4111#endif
4112#if FOLLOW_X_FORWARDED_FOR&&USE_DELAY_POOLS
4113    free_onoff(&Config.onoff.delay_pool_uses_indirect_client);
4114#endif
4115#if FOLLOW_X_FORWARDED_FOR
4116    free_onoff(&Config.onoff.log_uses_indirect_client);
4117#endif
4118#if FOLLOW_X_FORWARDED_FOR&&LINUX_NETFILTER
4119    free_onoff(&Config.onoff.tproxy_uses_indirect_client);
4120#endif
4121    free_acl_access(&Config.accessList.spoof_client_ip);
4122    free_acl_access(&Config.accessList.http);
4123    free_acl_access(&Config.accessList.adapted_http);
4124    free_acl_access(&Config.accessList.reply);
4125    free_acl_access(&Config.accessList.icp);
4126#if USE_HTCP
4127    free_acl_access(&Config.accessList.htcp);
4128#endif
4129#if USE_HTCP
4130    free_acl_access(&Config.accessList.htcp_clr);
4131#endif
4132    free_acl_access(&Config.accessList.miss);
4133#if USE_IDENT
4134    free_acl_access(&Ident::TheConfig.identLookup);
4135#endif
4136    free_acl_b_size_t(&Config.ReplyBodySize);
4137    free_PortCfg(&HttpPortList);
4138#if USE_OPENSSL
4139    free_PortCfg(&HttpsPortList);
4140#endif
4141    free_PortCfg(&FtpPortList);
4142    free_acl_tos(&Ip::Qos::TheConfig.tosToServer);
4143    free_acl_tos(&Ip::Qos::TheConfig.tosToClient);
4144#if SO_MARK&&USE_LIBCAP
4145    free_acl_nfmark(&Ip::Qos::TheConfig.nfmarkToServer);
4146#endif
4147#if SO_MARK&&USE_LIBCAP
4148    free_acl_nfmark(&Ip::Qos::TheConfig.nfmarkToClient);
4149#endif
4150#if USE_QOS_TOS
4151    free_QosConfig(&Ip::Qos::TheConfig);
4152#endif
4153    free_acl_address(&Config.accessList.outgoing_address);
4154    free_onoff(&Config.onoff.hostStrictVerify);
4155    free_onoff(&Config.onoff.client_dst_passthru);
4156#if USE_OPENSSL
4157    free_onoff(&Config.SSL.unclean_shutdown);
4158#endif
4159#if USE_OPENSSL
4160    free_string(&Config.SSL.ssl_engine);
4161#endif
4162#if USE_OPENSSL
4163    free_string(&Config.ssl_client.cert);
4164#endif
4165#if USE_OPENSSL
4166    free_string(&Config.ssl_client.key);
4167#endif
4168#if USE_OPENSSL
4169    free_int(&Config.ssl_client.version);
4170#endif
4171#if USE_OPENSSL
4172    free_string(&Config.ssl_client.options);
4173#endif
4174#if USE_OPENSSL
4175    free_string(&Config.ssl_client.cipher);
4176#endif
4177#if USE_OPENSSL
4178    free_string(&Config.ssl_client.cafile);
4179#endif
4180#if USE_OPENSSL
4181    free_string(&Config.ssl_client.capath);
4182#endif
4183#if USE_OPENSSL
4184    free_int(&Config.SSL.session_ttl);
4185#endif
4186#if USE_OPENSSL
4187    free_b_size_t(&Config.SSL.sessionCacheSize);
4188#endif
4189#if USE_OPENSSL
4190    free_string(&Config.SSL.certSignHash);
4191#endif
4192#if USE_OPENSSL
4193    free_sslproxy_ssl_bump(&Config.accessList.ssl_bump);
4194#endif
4195#if USE_OPENSSL
4196    free_string(&Config.ssl_client.flags);
4197#endif
4198#if USE_OPENSSL
4199    free_acl_access(&Config.ssl_client.cert_error);
4200#endif
4201#if USE_OPENSSL
4202    free_sslproxy_cert_sign(&Config.ssl_client.cert_sign);
4203#endif
4204#if USE_OPENSSL
4205    free_sslproxy_cert_adapt(&Config.ssl_client.cert_adapt);
4206#endif
4207#if USE_OPENSSL
4208    free_string(&Config.Program.ssl_password);
4209#endif
4210#if USE_SSL_CRTD
4211    free_eol(&Ssl::TheConfig.ssl_crtd);
4212#endif
4213#if USE_SSL_CRTD
4214    free_HelperChildConfig(&Ssl::TheConfig.ssl_crtdChildren);
4215#endif
4216#if USE_OPENSSL
4217    free_eol(&Ssl::TheConfig.ssl_crt_validator);
4218#endif
4219#if USE_OPENSSL
4220    free_HelperChildConfig(&Ssl::TheConfig.ssl_crt_validator_Children);
4221#endif
4222    free_peer(&Config.peers);
4223    free_time_t(&Config.Timeout.deadPeer);
4224    free_int(&Config.forward_max_tries);
4225    free_b_size_t(&Config.memMaxSize);
4226    free_b_size_t(&Config.Store.maxInMemObjSize);
4227    free_YesNoNone(&Config.memShared);
4228    free_memcachemode(&Config);
4229    free_removalpolicy(&Config.memPolicy);
4230    free_removalpolicy(&Config.replPolicy);
4231    free_b_int64_t(&Config.Store.minObjectSize);
4232    free_b_int64_t(&Config.Store.maxObjectSize);
4233    free_cachedir(&Config.cacheSwap);
4234    free_string(&Config.store_dir_select_algorithm);
4235    free_int(&Config.max_open_disk_fds);
4236    free_int(&Config.Swap.lowWaterMark);
4237    free_int(&Config.Swap.highWaterMark);
4238    free_logformat(&Log::TheConfig);
4239    free_access_log(&Config.Log.accesslogs);
4240#if ICAP_CLIENT
4241    free_access_log(&Config.Log.icaplogs);
4242#endif
4243    free_string(&Log::TheConfig.logfile_daemon);
4244    free_acl_access(&Config.accessList.stats_collection);
4245    free_string(&Config.Log.store);
4246    free_string(&Config.Log.swap);
4247    free_int(&Config.Log.rotateNumber);
4248    free_string(&Config.mimeTablePathname);
4249    free_onoff(&Config.onoff.log_mime_hdrs);
4250    free_string(&Config.pidFilename);
4251    free_address(&Config.Addrs.client_netmask);
4252    free_onoff(&Config.onoff.strip_query_terms);
4253    free_onoff(&Config.onoff.buffered_logs);
4254#if USE_ICMP
4255    free_string(&Config.netdbFilename);
4256#endif
4257    free_string(&Debug::cache_log);
4258    free_eol(&Debug::debugOptions);
4259    free_string(&Config.coredump_dir);
4260    free_string(&Config.Ftp.anon_user);
4261    free_onoff(&Config.Ftp.passive);
4262    free_onoff(&Config.Ftp.epsv_all);
4263    free_ftp_epsv(&Config.accessList.ftp_epsv);
4264    free_onoff(&Config.Ftp.eprt);
4265    free_onoff(&Config.Ftp.sanitycheck);
4266    free_onoff(&Config.Ftp.telnet);
4267    free_string(&Config.Program.diskd);
4268#if USE_UNLINKD
4269    free_string(&Config.Program.unlinkd);
4270#endif
4271#if USE_ICMP
4272    free_string(&Config.pinger.program);
4273#endif
4274#if USE_ICMP
4275    free_onoff(&Config.pinger.enable);
4276#endif
4277    free_wordlist(&Config.Program.redirect);
4278    free_HelperChildConfig(&Config.redirectChildren);
4279    free_onoff(&Config.onoff.redir_rewrites_host);
4280    free_acl_access(&Config.accessList.redirector);
4281    free_onoff(&Config.onoff.redirector_bypass);
4282    free_TokenOrQuotedString(&Config.redirector_extras);
4283    free_wordlist(&Config.Program.store_id);
4284    free_TokenOrQuotedString(&Config.storeId_extras);
4285    free_HelperChildConfig(&Config.storeIdChildren);
4286    free_acl_access(&Config.accessList.store_id);
4287    free_onoff(&Config.onoff.store_id_bypass);
4288    free_acl_access(&Config.accessList.noCache);
4289    free_acl_access(&Config.accessList.sendHit);
4290    free_acl_access(&Config.accessList.storeMiss);
4291    free_time_t(&Config.maxStale);
4292    free_refreshpattern(&Config.Refresh);
4293    free_kb_int64_t(&Config.quickAbort.min);
4294    free_kb_int64_t(&Config.quickAbort.max);
4295    free_int(&Config.quickAbort.pct);
4296    free_b_int64_t(&Config.readAheadGap);
4297#if USE_HTTP_VIOLATIONS
4298    free_time_t(&Config.negativeTtl);
4299#endif
4300    free_time_t(&Config.positiveDnsTtl);
4301    free_time_t(&Config.negativeDnsTtl);
4302    free_acl_b_size_t(&Config.rangeOffsetLimit);
4303    free_time_t(&Config.minimum_expiry_time);
4304    free_b_int64_t(&Config.Store.avgObjectSize);
4305    free_int(&Config.Store.objectsPerBucket);
4306    free_b_size_t(&Config.maxRequestHeaderSize);
4307    free_b_size_t(&Config.maxReplyHeaderSize);
4308    free_b_int64_t(&Config.maxRequestBodySize);
4309    free_b_size_t(&Config.maxRequestBufferSize);
4310#if USE_HTTP_VIOLATIONS
4311    free_acl_access(&Config.accessList.brokenPosts);
4312#endif
4313#if FOLLOW_X_FORWARDED_FOR&&USE_ADAPTATION
4314    free_onoff(&Adaptation::Config::use_indirect_client);
4315#endif
4316#if USE_HTTP_VIOLATIONS
4317    free_onoff(&Config.onoff.via);
4318#endif
4319    free_onoff(&Config.onoff.ie_refresh);
4320    free_onoff(&Config.onoff.vary_ignore_expire);
4321    free_onoff(&Config.onoff.request_entities);
4322#if USE_HTTP_VIOLATIONS
4323    free_http_header_access(&Config.request_header_access);
4324#endif
4325#if USE_HTTP_VIOLATIONS
4326    free_http_header_access(&Config.reply_header_access);
4327#endif
4328#if USE_HTTP_VIOLATIONS
4329    free_http_header_replace(&Config.request_header_access);
4330#endif
4331#if USE_HTTP_VIOLATIONS
4332    free_http_header_replace(&Config.reply_header_access);
4333#endif
4334    free_HeaderWithAclList(&Config.request_header_add);
4335    free_note(&Config.notes);
4336    free_tristate(&Config.onoff.relaxed_header_parser);
4337    free_onoff(&Config.onoff.collapsed_forwarding);
4338    free_time_t(&Config.Timeout.forward);
4339    free_time_t(&Config.Timeout.connect);
4340    free_time_t(&Config.Timeout.peer_connect);
4341    free_time_t(&Config.Timeout.read);
4342    free_time_t(&Config.Timeout.write);
4343    free_time_t(&Config.Timeout.request);
4344    free_time_t(&Config.Timeout.clientIdlePconn);
4345    free_time_t(&Config.Timeout.ftpClientIdle);
4346    free_time_t(&Config.Timeout.lifetime);
4347    free_onoff(&Config.onoff.half_closed_clients);
4348    free_time_t(&Config.Timeout.serverIdlePconn);
4349#if USE_IDENT
4350    free_time_t(&Ident::TheConfig.timeout);
4351#endif
4352    free_time_t(&Config.shutdownLifetime);
4353    free_string(&Config.adminEmail);
4354    free_string(&Config.EmailFrom);
4355    free_eol(&Config.EmailProgram);
4356    free_string(&Config.effectiveUser);
4357    free_string(&Config.effectiveGroup);
4358    free_onoff(&Config.onoff.httpd_suppress_version_string);
4359    free_string(&Config.visibleHostname);
4360    free_string(&Config.uniqueHostname);
4361    free_wordlist(&Config.hostnameAliases);
4362    free_int(&Config.umask);
4363    free_time_t(&Config.Announce.period);
4364    free_string(&Config.Announce.host);
4365    free_string(&Config.Announce.file);
4366    free_u_short(&Config.Announce.port);
4367    free_string(&Config.Accel.surrogate_id);
4368    free_onoff(&Config.onoff.surrogate_is_remote);
4369#if USE_SQUID_ESI
4370    free_string(&ESIParser::Type);
4371#endif
4372#if USE_DELAY_POOLS
4373    free_delay_pool_count(&Config.Delay);
4374#endif
4375#if USE_DELAY_POOLS
4376    free_delay_pool_class(&Config.Delay);
4377#endif
4378#if USE_DELAY_POOLS
4379    free_delay_pool_access(&Config.Delay);
4380#endif
4381#if USE_DELAY_POOLS
4382    free_delay_pool_rates(&Config.Delay);
4383#endif
4384#if USE_DELAY_POOLS
4385    free_u_short(&Config.Delay.initial);
4386#endif
4387#if USE_DELAY_POOLS
4388    free_client_delay_pool_count(&Config.ClientDelay);
4389#endif
4390#if USE_DELAY_POOLS
4391    free_u_short(&Config.ClientDelay.initial);
4392#endif
4393#if USE_DELAY_POOLS
4394    free_client_delay_pool_rates(&Config.ClientDelay);
4395#endif
4396#if USE_DELAY_POOLS
4397    free_client_delay_pool_access(&Config.ClientDelay);
4398#endif
4399#if USE_WCCP
4400    free_address(&Config.Wccp.router);
4401#endif
4402#if USE_WCCPv2
4403    free_IpAddress_list(&Config.Wccp2.router);
4404#endif
4405#if USE_WCCP
4406    free_int(&Config.Wccp.version);
4407#endif
4408#if USE_WCCPv2
4409    free_onoff(&Config.Wccp2.rebuildwait);
4410#endif
4411#if USE_WCCPv2
4412    free_wccp2_method(&Config.Wccp2.forwarding_method);
4413#endif
4414#if USE_WCCPv2
4415    free_wccp2_method(&Config.Wccp2.return_method);
4416#endif
4417#if USE_WCCPv2
4418    free_wccp2_amethod(&Config.Wccp2.assignment_method);
4419#endif
4420#if USE_WCCPv2
4421    free_wccp2_service(&Config.Wccp2.info);
4422#endif
4423#if USE_WCCPv2
4424    free_wccp2_service_info(&Config.Wccp2.info);
4425#endif
4426#if USE_WCCPv2
4427    free_int(&Config.Wccp2.weight);
4428#endif
4429#if USE_WCCP
4430    free_address(&Config.Wccp.address);
4431#endif
4432#if USE_WCCPv2
4433    free_address(&Config.Wccp2.address);
4434#endif
4435    free_onoff(&Config.onoff.client_pconns);
4436    free_onoff(&Config.onoff.server_pconns);
4437    free_onoff(&Config.onoff.error_pconns);
4438    free_onoff(&Config.onoff.detect_broken_server_pconns);
4439#if USE_CACHE_DIGESTS
4440    free_onoff(&Config.onoff.digest_generation);
4441#endif
4442#if USE_CACHE_DIGESTS
4443    free_int(&Config.digest.bits_per_entry);
4444#endif
4445#if USE_CACHE_DIGESTS
4446    free_time_t(&Config.digest.rebuild_period);
4447#endif
4448#if USE_CACHE_DIGESTS
4449    free_time_t(&Config.digest.rewrite_period);
4450#endif
4451#if USE_CACHE_DIGESTS
4452    free_b_size_t(&Config.digest.swapout_chunk_size);
4453#endif
4454#if USE_CACHE_DIGESTS
4455    free_int(&Config.digest.rebuild_chunk_percentage);
4456#endif
4457#if SQUID_SNMP
4458    free_u_short(&Config.Port.snmp);
4459#endif
4460#if SQUID_SNMP
4461    free_acl_access(&Config.accessList.snmp);
4462#endif
4463#if SQUID_SNMP
4464    free_address(&Config.Addrs.snmp_incoming);
4465#endif
4466#if SQUID_SNMP
4467    free_address(&Config.Addrs.snmp_outgoing);
4468#endif
4469    free_u_short(&Config.Port.icp);
4470#if USE_HTCP
4471    free_u_short(&Config.Port.htcp);
4472#endif
4473    free_onoff(&Config.onoff.log_udp);
4474    free_address(&Config.Addrs.udp_incoming);
4475    free_address(&Config.Addrs.udp_outgoing);
4476    free_onoff(&Config.onoff.icp_hit_stale);
4477    free_int(&Config.minDirectHops);
4478    free_int(&Config.minDirectRtt);
4479    free_int(&Config.Netdb.low);
4480    free_int(&Config.Netdb.high);
4481    free_time_t(&Config.Netdb.period);
4482    free_onoff(&Config.onoff.query_icmp);
4483    free_onoff(&Config.onoff.test_reachability);
4484    free_int(&Config.Timeout.icp_query);
4485    free_int(&Config.Timeout.icp_query_max);
4486    free_int(&Config.Timeout.icp_query_min);
4487    free_time_t(&Config.backgroundPingRate);
4488    free_wordlist(&Config.mcast_group_list);
4489#if MULTICAST_MISS_STREAM
4490    free_address(&Config.mcast_miss.addr);
4491#endif
4492#if MULTICAST_MISS_STREAM
4493    free_u_short(&Config.mcast_miss.ttl);
4494#endif
4495#if MULTICAST_MISS_STREAM
4496    free_u_short(&Config.mcast_miss.port);
4497#endif
4498#if MULTICAST_MISS_STREAM
4499    free_string(&Config.mcast_miss.encode_key);
4500#endif
4501    free_int(&Config.Timeout.mcast_icp_query);
4502    free_string(&Config.icons.directory);
4503    free_onoff(&Config.onoff.global_internal_static);
4504    free_onoff(&Config.icons.use_short_names);
4505    free_string(&Config.errorDirectory);
4506#if USE_ERR_LOCALES
4507    free_string(&Config.errorDefaultLanguage);
4508#endif
4509#if USE_ERR_LOCALES
4510    free_onoff(&Config.errorLogMissingLanguages);
4511#endif
4512    free_string(&Config.errorStylesheet);
4513    free_eol(&Config.errHtmlText);
4514    free_onoff(&Config.onoff.emailErrData);
4515    free_denyinfo(&Config.denyInfoList);
4516    free_onoff(&Config.onoff.nonhierarchical_direct);
4517    free_onoff(&Config.onoff.prefer_direct);
4518    free_onoff(&Config.onoff.cache_miss_revalidate);
4519    free_acl_access(&Config.accessList.AlwaysDirect);
4520    free_acl_access(&Config.accessList.NeverDirect);
4521    free_int(&Config.comm_incoming.udp.average);
4522    free_int(&Config.comm_incoming.tcp.average);
4523    free_int(&Config.comm_incoming.dns.average);
4524    free_int(&Config.comm_incoming.udp.min_poll);
4525    free_int(&Config.comm_incoming.dns.min_poll);
4526    free_int(&Config.comm_incoming.tcp.min_poll);
4527    free_string(&Config.accept_filter);
4528    free_int(&Config.client_ip_max_connections);
4529    free_b_size_t(&Config.tcpRcvBufsz);
4530#if ICAP_CLIENT
4531    free_onoff(&Adaptation::Icap::TheConfig.onoff);
4532#endif
4533#if ICAP_CLIENT
4534    free_time_t(&Adaptation::Icap::TheConfig.connect_timeout_raw);
4535#endif
4536#if ICAP_CLIENT
4537    free_time_t(&Adaptation::Icap::TheConfig.io_timeout_raw);
4538#endif
4539#if ICAP_CLIENT
4540    free_icap_service_failure_limit(&Adaptation::Icap::TheConfig);
4541#endif
4542#if ICAP_CLIENT
4543    free_int(&Adaptation::Icap::TheConfig.service_revival_delay);
4544#endif
4545#if ICAP_CLIENT
4546    free_onoff(&Adaptation::Icap::TheConfig.preview_enable);
4547#endif
4548#if ICAP_CLIENT
4549    free_int(&Adaptation::Icap::TheConfig.preview_size);
4550#endif
4551#if ICAP_CLIENT
4552    free_onoff(&Adaptation::Icap::TheConfig.allow206_enable);
4553#endif
4554#if ICAP_CLIENT
4555    free_int(&Adaptation::Icap::TheConfig.default_options_ttl);
4556#endif
4557#if ICAP_CLIENT
4558    free_onoff(&Adaptation::Icap::TheConfig.reuse_connections);
4559#endif
4560#if USE_ADAPTATION
4561    free_onoff(&Adaptation::Config::send_client_ip);
4562#endif
4563#if USE_ADAPTATION
4564    free_onoff(&Adaptation::Config::send_username);
4565#endif
4566#if ICAP_CLIENT
4567    free_string(&Adaptation::Icap::TheConfig.client_username_header);
4568#endif
4569#if ICAP_CLIENT
4570    free_onoff(&Adaptation::Icap::TheConfig.client_username_encode);
4571#endif
4572#if ICAP_CLIENT
4573    free_icap_service_type(&Adaptation::Icap::TheConfig);
4574#endif
4575#if USE_ECAP
4576    free_onoff(&Adaptation::Ecap::TheConfig.onoff);
4577#endif
4578#if USE_ECAP
4579    free_ecap_service_type(&Adaptation::Ecap::TheConfig);
4580#endif
4581#if USE_LOADABLE_MODULES
4582    free_wordlist(&Config.loadable_module_names);
4583#endif
4584#if USE_ADAPTATION
4585    free_int(&Adaptation::Config::service_iteration_limit);
4586#endif
4587#if USE_ADAPTATION
4588    free_string(&Adaptation::Config::masterx_shared_name);
4589#endif
4590#if USE_ADAPTATION
4591    free_note(&Adaptation::Config::metaHeaders);
4592#endif
4593#if ICAP_CLIENT
4594    free_acl_access(&Adaptation::Icap::TheConfig.repeat);
4595#endif
4596#if ICAP_CLIENT
4597    free_int(&Adaptation::Icap::TheConfig.repeat_limit);
4598#endif
4599    free_onoff(&Config.onoff.check_hostnames);
4600    free_onoff(&Config.onoff.allow_underscore);
4601    free_time_msec(&Config.Timeout.idns_retransmit);
4602    free_time_msec(&Config.Timeout.idns_query);
4603    free_b_ssize_t(&Config.dns.packet_max);
4604    free_onoff(&Config.onoff.res_defnames);
4605    free_onoff(&Config.onoff.dns_mdns);
4606    free_wordlist(&Config.dns_nameservers);
4607    free_string(&Config.etcHostsPath);
4608    free_string(&Config.appendDomain);
4609    free_onoff(&Config.onoff.ignore_unknown_nameservers);
4610    free_onoff(&Config.dns.v4_first);
4611    free_int(&Config.ipcache.size);
4612    free_int(&Config.ipcache.low);
4613    free_int(&Config.ipcache.high);
4614    free_int(&Config.fqdncache.size);
4615    free_configuration_includes_quoted_values(&ConfigParser::RecognizeQuotedValues);
4616    free_onoff(&Config.onoff.mem_pools);
4617    free_b_int64_t(&Config.MemPools.limit);
4618    free_string(&opt_forwarded_for);
4619    free_cachemgrpasswd(&Config.passwd_list);
4620    free_onoff(&Config.onoff.client_db);
4621    free_onoff(&Config.onoff.refresh_all_ims);
4622#if USE_HTTP_VIOLATIONS
4623    free_onoff(&Config.onoff.reload_into_ims);
4624#endif
4625    free_int(&Config.connect_retries);
4626    free_onoff(&Config.retry.onerror);
4627    free_string(&Config.as_whois_server);
4628    free_onoff(&Config.onoff.offline);
4629    free_uri_whitespace(&Config.uri_whitespace);
4630    free_string(&Config.chroot_dir);
4631    free_onoff(&Config.onoff.balance_on_multiple_ip);
4632    free_pipelinePrefetch(&Config.pipeline_max_prefetch);
4633    free_int(&Config.warnings.high_rptm);
4634    free_int(&Config.warnings.high_pf);
4635#if HAVE_MSTATS&&HAVE_GNUMALLOC_H
4636    free_b_size_t(&Config.warnings.high_memory);
4637#endif
4638    free_int(&Config.sleep_after_fork);
4639#if _SQUID_WINDOWS_
4640    free_onoff(&Config.onoff.WIN32_IpAddrChangeMonitor);
4641#endif
4642#if USE_SQUID_EUI
4643    free_onoff(&Eui::TheConfig.euiLookup);
4644#endif
4645    free_int(&Config.max_filedescriptors);
4646}
4647
Note: See TracBrowser for help on using the repository browser.