1 (* Squid module for Augeas
2 Author: Free Ekanayaka <free@64studio.com>
4 Reference: the self-documented default squid.conf file
11 (************************************************************************
13 *************************************************************************)
16 let spc = Util.del_ws_spc
17 let indent = Util.indent
19 let word = /[A-Za-z0-9!_.-]+(\[[0-9]+\])?/
20 let sto_to_spc = store /[^# \t\n]+/
22 let comment = Util.comment
23 let comment_or_eol = Util.comment_or_eol
25 = [ spc . label kw . sto_to_spc ]
26 let parameters = [ label "parameters"
27 . counter "parameters"
28 . [ spc . seq "parameters" . sto_to_spc ]+ ]
30 (************************************************************************
32 *************************************************************************)
34 let entry_re = "accept_filter"
36 | "acl_uses_indirect_client"
38 | "adaptation_service_set"
47 | "authenticate_cache_garbage_interval"
48 | "authenticate_ip_shortcircuit_access"
49 | "authenticate_ip_shortcircuit_ttl"
50 | "authenticate_ip_ttl"
52 | "background_ping_rate"
53 | "balance_on_multiple_ip"
59 | "cache_effective_group"
60 | "cache_effective_user"
68 | "cache_replacement_policy"
79 | "client_persistent_connections"
81 | "collapsed_forwarding"
88 | "delay_initial_bucket_level"
91 | "delay_pool_uses_indirect_client"
93 | "detect_broken_pconn"
94 | "digest_bits_per_entry"
96 | "digest_rebuild_chunk_percentage"
97 | "digest_rebuild_period"
98 | "digest_rewrite_period"
99 | "digest_swapout_chunk_size"
104 | "dns_retransmit_interval"
111 | "emulate_httpd_log"
113 | "error_default_language"
115 | "error_log_languages"
117 | "err_page_stylesheet"
119 | "external_acl_type"
120 | "external_refresh_check"
121 | "follow_x_forwarded_for"
130 | "ftp_telnet_protocol"
132 | "global_internal_static"
133 | "half_closed_clients"
136 | "hierarchy_stoplist"
137 | "high_memory_warning"
138 | "high_page_fault_warning"
139 | "high_response_time_warning"
145 | "http_accel_surrogate_remote"
147 | "httpd_accel_no_pmtu_disc"
148 | "httpd_accel_surrogate_id"
149 | "httpd_suppress_version_string"
151 | "http_reply_access"
155 | "icap_client_username_encode"
156 | "icap_client_username_header"
157 | "icap_connect_timeout"
158 | "icap_default_options_ttl"
161 | "icap_persistent_connections"
162 | "icap_preview_enable"
163 | "icap_preview_size"
164 | "icap_send_client_ip"
165 | "icap_send_client_username"
167 | "icap_service_failure_limit"
168 | "icap_service_revival_delay"
173 | "icp_query_timeout"
174 | "ident_lookup_access"
177 | "ignore_expect_100"
178 | "ignore_ims_on_miss"
179 | "ignore_unknown_nameservers"
180 | "incoming_dns_average"
181 | "incoming_http_average"
182 | "incoming_icp_average"
188 | "location_rewrite_access"
189 | "location_rewrite_children"
190 | "location_rewrite_concurrency"
191 | "location_rewrite_program"
200 | "log_uses_indirect_client"
203 | "max_filedescriptors"
204 | "maximum_icp_query_timeout"
205 | "maximum_object_size"
206 | "maximum_object_size_in_memory"
207 | "maximum_single_addr_tries"
208 | "max_open_disk_fds"
211 | "mcast_icp_query_timeout"
213 | "mcast_miss_encode_key"
217 | "memory_pools_limit"
218 | "memory_replacement_policy"
221 | "min_http_poll_cnt"
223 | "minimum_direct_hops"
224 | "minimum_direct_rtt"
225 | "minimum_expiry_time"
226 | "minimum_icp_query_timeout"
227 | "minimum_object_size"
231 | "neighbor_type_domain"
235 | "netdb_ping_period"
237 | "nonhierarchical_direct"
240 | "peer_connect_timeout"
241 | "persistent_connection_after_error"
242 | "persistent_request_timeout"
246 | "pipeline_prefetch"
254 | "range_offset_limit"
257 | "redirector_bypass"
260 | "refresh_stale_hit"
261 | "relaxed_header_parser"
263 | "reply_body_max_size"
264 | "reply_header_access"
265 | "reply_header_max_size"
266 | "request_body_max_size"
268 | "request_header_access"
269 | "request_header_max_size"
273 | "server_persistent_connections"
275 | "shutdown_lifetime"
278 | "snmp_incoming_address"
279 | "snmp_outgoing_address"
283 | "sslpassword_program"
286 | "sslproxy_cert_error"
288 | "sslproxy_client_certificate"
289 | "sslproxy_client_key"
293 | "ssl_unclean_shutdown"
294 | "store_avg_object_size"
295 | "store_dir_select_algorithm"
296 | "store_objects_per_bucket"
298 | "storeurl_rewrite_children"
299 | "storeurl_rewrite_concurrency"
300 | "storeurl_rewrite_program"
301 | "strip_query_terms"
302 | "tcp_outgoing_address"
305 | "test_reachability"
306 | "udp_incoming_address"
307 | "udp_outgoing_address"
313 | "url_rewrite_access"
314 | "url_rewrite_bypass"
315 | "url_rewrite_children"
316 | "url_rewrite_concurrency"
317 | "url_rewrite_host_header"
318 | "url_rewrite_program"
320 | "vary_ignore_expire"
324 | "wccp2_assignment_method"
325 | "wccp2_forwarding_method"
326 | "wccp2_rebuild_wait"
327 | "wccp2_return_method"
330 | "wccp2_service_info"
335 | "windows_ipaddrchangemonitor"
342 let entry = indent . Spacevars.entry entry_re
344 (************************************************************************
346 *************************************************************************)
348 let auth_re = "auth_param"
353 . (value "setting") ?
356 (************************************************************************
358 *************************************************************************)
369 (************************************************************************
371 *************************************************************************)
376 | "broken_vary_encoding"
380 . [ key http_access_re
388 (************************************************************************
390 *************************************************************************)
392 let refresh_pattern_option_re = "override-expire"
398 | "ignore-must-revalidate"
404 let refresh_pattern = indent . [ key "refresh_pattern" . spc
405 . [ label "case_insensitive" . Util.del_str "-i" . spc ]?
406 . store /[^ \t\n]+/ . spc
407 . [ label "min" . store Rx.integer ] . spc
408 . [ label "percent" . store Rx.integer . Util.del_str "%" ] . spc
409 . [ label "max" . store Rx.integer ]
410 . (spc . Build.opt_list [ label "option" . store refresh_pattern_option_re ] spc)?
413 (************************************************************************
415 *************************************************************************)
417 let extension_methods = indent . [ key "extension_methods" . spc
418 . Build.opt_list [ seq "extension_method" . store Rx.word ] spc
421 (************************************************************************
423 *************************************************************************)
425 let lns = Spacevars.lns (entry|auth|acl|http_access|refresh_pattern|extension_methods)
427 let filter = Util.stdexcl
428 . incl "/etc/squid/squid.conf"
430 let xfm = transform lns filter