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]+/
21 let sto_to_eol = store /([^# \t\n][^#\n]*[^# \t\n])|[^# \t\n]/
23 let comment = Util.comment
24 let empty = Util.empty
25 let comment_or_eol = Util.comment_or_eol
27 = [ spc . label kw . sto_to_spc ]
29 let value_space_in (kw:string)
30 = [ spc . label kw . sto_to_eol ]
32 let parameters = [ label "parameters"
33 . counter "parameters"
34 . [ spc . seq "parameters" . sto_to_spc ]+ ]
36 (************************************************************************
38 *************************************************************************)
40 let entry_re = "accept_filter"
42 | "acl_uses_indirect_client"
44 | "adaptation_service_set"
53 | "authenticate_cache_garbage_interval"
54 | "authenticate_ip_shortcircuit_access"
55 | "authenticate_ip_shortcircuit_ttl"
56 | "authenticate_ip_ttl"
58 | "background_ping_rate"
59 | "balance_on_multiple_ip"
65 | "cache_effective_group"
66 | "cache_effective_user"
74 | "cache_replacement_policy"
85 | "client_persistent_connections"
87 | "collapsed_forwarding"
94 | "delay_initial_bucket_level"
97 | "delay_pool_uses_indirect_client"
99 | "detect_broken_pconn"
100 | "digest_bits_per_entry"
101 | "digest_generation"
102 | "digest_rebuild_chunk_percentage"
103 | "digest_rebuild_period"
104 | "digest_rewrite_period"
105 | "digest_swapout_chunk_size"
110 | "dns_retransmit_interval"
117 | "emulate_httpd_log"
119 | "error_default_language"
121 | "error_log_languages"
123 | "err_page_stylesheet"
125 | "external_acl_type"
126 | "external_refresh_check"
127 | "follow_x_forwarded_for"
136 | "ftp_telnet_protocol"
138 | "global_internal_static"
139 | "half_closed_clients"
142 | "hierarchy_stoplist"
143 | "high_memory_warning"
144 | "high_page_fault_warning"
145 | "high_response_time_warning"
151 | "http_accel_surrogate_remote"
153 | "httpd_accel_no_pmtu_disc"
154 | "httpd_accel_surrogate_id"
155 | "httpd_suppress_version_string"
157 | "http_reply_access"
161 | "icap_client_username_encode"
162 | "icap_client_username_header"
163 | "icap_connect_timeout"
164 | "icap_default_options_ttl"
167 | "icap_persistent_connections"
168 | "icap_preview_enable"
169 | "icap_preview_size"
170 | "icap_send_client_ip"
171 | "icap_send_client_username"
173 | "icap_service_failure_limit"
174 | "icap_service_revival_delay"
179 | "icp_query_timeout"
180 | "ident_lookup_access"
183 | "ignore_expect_100"
184 | "ignore_ims_on_miss"
185 | "ignore_unknown_nameservers"
186 | "incoming_dns_average"
187 | "incoming_http_average"
188 | "incoming_icp_average"
194 | "location_rewrite_access"
195 | "location_rewrite_children"
196 | "location_rewrite_concurrency"
197 | "location_rewrite_program"
206 | "log_uses_indirect_client"
209 | "max_filedescriptors"
210 | "maximum_icp_query_timeout"
211 | "maximum_object_size"
212 | "maximum_object_size_in_memory"
213 | "maximum_single_addr_tries"
214 | "max_open_disk_fds"
217 | "mcast_icp_query_timeout"
219 | "mcast_miss_encode_key"
223 | "memory_pools_limit"
224 | "memory_replacement_policy"
227 | "min_http_poll_cnt"
229 | "minimum_direct_hops"
230 | "minimum_direct_rtt"
231 | "minimum_expiry_time"
232 | "minimum_icp_query_timeout"
233 | "minimum_object_size"
237 | "neighbor_type_domain"
241 | "netdb_ping_period"
244 | "nonhierarchical_direct"
247 | "peer_connect_timeout"
248 | "persistent_connection_after_error"
249 | "persistent_request_timeout"
253 | "pipeline_prefetch"
261 | "range_offset_limit"
264 | "redirector_bypass"
267 | "refresh_stale_hit"
268 | "relaxed_header_parser"
270 | "reply_body_max_size"
271 | "reply_header_access"
272 | "reply_header_max_size"
273 | "request_body_max_size"
275 | "request_header_access"
276 | "request_header_max_size"
280 | "server_persistent_connections"
282 | "shutdown_lifetime"
285 | "snmp_incoming_address"
286 | "snmp_outgoing_address"
290 | "sslpassword_program"
293 | "sslproxy_cert_error"
295 | "sslproxy_client_certificate"
296 | "sslproxy_client_key"
300 | "ssl_unclean_shutdown"
301 | "store_avg_object_size"
302 | "store_dir_select_algorithm"
303 | "store_objects_per_bucket"
305 | "storeurl_rewrite_children"
306 | "storeurl_rewrite_concurrency"
307 | "storeurl_rewrite_program"
308 | "strip_query_terms"
309 | "tcp_outgoing_address"
312 | "test_reachability"
313 | "udp_incoming_address"
314 | "udp_outgoing_address"
320 | "url_rewrite_access"
321 | "url_rewrite_bypass"
322 | "url_rewrite_children"
323 | "url_rewrite_concurrency"
324 | "url_rewrite_host_header"
325 | "url_rewrite_program"
327 | "vary_ignore_expire"
331 | "wccp2_assignment_method"
332 | "wccp2_forwarding_method"
333 | "wccp2_rebuild_wait"
334 | "wccp2_return_method"
337 | "wccp2_service_info"
342 | "windows_ipaddrchangemonitor"
350 let entry = indent . (Build.key_ws_value entry_re)
352 (************************************************************************
354 *************************************************************************)
356 let auth_re = "auth_param"
361 . (value_space_in "setting") ?
364 (************************************************************************
366 *************************************************************************)
377 (************************************************************************
379 *************************************************************************)
384 | "broken_vary_encoding"
388 . [ key http_access_re
396 (************************************************************************
398 *************************************************************************)
400 let refresh_pattern_option_re = "override-expire"
406 | "ignore-must-revalidate"
412 let refresh_pattern = indent . [ key "refresh_pattern" . spc
413 . [ label "case_insensitive" . Util.del_str "-i" . spc ]?
414 . store /[^ \t\n]+/ . spc
415 . [ label "min" . store Rx.integer ] . spc
416 . [ label "percent" . store Rx.integer . Util.del_str "%" ] . spc
417 . [ label "max" . store Rx.integer ]
418 . (spc . Build.opt_list [ label "option" . store refresh_pattern_option_re ] spc)?
421 (************************************************************************
423 *************************************************************************)
425 let extension_methods = indent . [ key "extension_methods" . spc
426 . Build.opt_list [ seq "extension_method" . store Rx.word ] spc
429 (************************************************************************
431 *************************************************************************)
433 let lns = (comment|empty|entry|auth|acl|http_access|refresh_pattern|extension_methods)*
435 let filter = incl "/etc/squid/squid.conf"
436 . incl "/etc/squid3/squid.conf"
438 let xfm = transform lns filter