439 lines
16 KiB
Plaintext
439 lines
16 KiB
Plaintext
(* Squid module for Augeas
|
|
Author: Free Ekanayaka <free@64studio.com>
|
|
|
|
Reference: the self-documented default squid.conf file
|
|
|
|
*)
|
|
|
|
module Squid =
|
|
autoload xfm
|
|
|
|
(************************************************************************
|
|
* USEFUL PRIMITIVES
|
|
*************************************************************************)
|
|
|
|
let eol = Util.eol
|
|
let spc = Util.del_ws_spc
|
|
let indent = Util.indent
|
|
|
|
let word = /[A-Za-z0-9!_.-]+(\[[0-9]+\])?/
|
|
let sto_to_spc = store /[^# \t\n]+/
|
|
let sto_to_eol = store /([^# \t\n][^#\n]*[^# \t\n])|[^# \t\n]/
|
|
|
|
let comment = Util.comment
|
|
let empty = Util.empty
|
|
let comment_or_eol = Util.comment_or_eol
|
|
let value (kw:string)
|
|
= [ spc . label kw . sto_to_spc ]
|
|
|
|
let value_space_in (kw:string)
|
|
= [ spc . label kw . sto_to_eol ]
|
|
|
|
let parameters = [ label "parameters"
|
|
. counter "parameters"
|
|
. [ spc . seq "parameters" . sto_to_spc ]+ ]
|
|
|
|
(************************************************************************
|
|
* SPACEVARS SETTINGS
|
|
*************************************************************************)
|
|
|
|
let entry_re = "accept_filter"
|
|
| "access_log"
|
|
| "acl_uses_indirect_client"
|
|
| "adaptation_access"
|
|
| "adaptation_service_set"
|
|
| "allow_underscore"
|
|
| "always_direct"
|
|
| "announce_file"
|
|
| "announce_host"
|
|
| "announce_period"
|
|
| "announce_port"
|
|
| "append_domain"
|
|
| "as_whois_server"
|
|
| "authenticate_cache_garbage_interval"
|
|
| "authenticate_ip_shortcircuit_access"
|
|
| "authenticate_ip_shortcircuit_ttl"
|
|
| "authenticate_ip_ttl"
|
|
| "authenticate_ttl"
|
|
| "background_ping_rate"
|
|
| "balance_on_multiple_ip"
|
|
| "broken_posts"
|
|
| "buffered_logs"
|
|
| "cache"
|
|
| "cache_dir"
|
|
| "cache_dns_program"
|
|
| "cache_effective_group"
|
|
| "cache_effective_user"
|
|
| "cache_log"
|
|
| "cache_mem"
|
|
| "cache_mgr"
|
|
| "cachemgr_passwd"
|
|
| "cache_peer"
|
|
| "cache_peer_access"
|
|
| "cache_peer_domain"
|
|
| "cache_replacement_policy"
|
|
| "cache_store_log"
|
|
| "cache_swap_high"
|
|
| "cache_swap_low"
|
|
| "cache_swap_state"
|
|
| "cache_vary"
|
|
| "check_hostnames"
|
|
| "chroot"
|
|
| "client_db"
|
|
| "client_lifetime"
|
|
| "client_netmask"
|
|
| "client_persistent_connections"
|
|
| "clientside_tos"
|
|
| "collapsed_forwarding"
|
|
| "connect_timeout"
|
|
| "coredump_dir"
|
|
| "dead_peer_timeout"
|
|
| "debug_options"
|
|
| "delay_access"
|
|
| "delay_class"
|
|
| "delay_initial_bucket_level"
|
|
| "delay_parameters"
|
|
| "delay_pools"
|
|
| "delay_pool_uses_indirect_client"
|
|
| "deny_info"
|
|
| "detect_broken_pconn"
|
|
| "digest_bits_per_entry"
|
|
| "digest_generation"
|
|
| "digest_rebuild_chunk_percentage"
|
|
| "digest_rebuild_period"
|
|
| "digest_rewrite_period"
|
|
| "digest_swapout_chunk_size"
|
|
| "diskd_program"
|
|
| "dns_children"
|
|
| "dns_defnames"
|
|
| "dns_nameservers"
|
|
| "dns_retransmit_interval"
|
|
| "dns_testnames"
|
|
| "dns_timeout"
|
|
| "dns_v4_fallback"
|
|
| "ecap_enable"
|
|
| "ecap_service"
|
|
| "email_err_data"
|
|
| "emulate_httpd_log"
|
|
| "err_html_text"
|
|
| "error_default_language"
|
|
| "error_directory"
|
|
| "error_log_languages"
|
|
| "error_map"
|
|
| "err_page_stylesheet"
|
|
| "esi_parser"
|
|
| "external_acl_type"
|
|
| "external_refresh_check"
|
|
| "follow_x_forwarded_for"
|
|
| "forwarded_for"
|
|
| "forward_log"
|
|
| "forward_timeout"
|
|
| "fqdncache_size"
|
|
| "ftp_epsv_all"
|
|
| "ftp_list_width"
|
|
| "ftp_passive"
|
|
| "ftp_sanitycheck"
|
|
| "ftp_telnet_protocol"
|
|
| "ftp_user"
|
|
| "global_internal_static"
|
|
| "half_closed_clients"
|
|
| "header_access"
|
|
| "header_replace"
|
|
| "hierarchy_stoplist"
|
|
| "high_memory_warning"
|
|
| "high_page_fault_warning"
|
|
| "high_response_time_warning"
|
|
| "hostname_aliases"
|
|
| "hosts_file"
|
|
| "htcp_access"
|
|
| "htcp_clr_access"
|
|
| "htcp_port"
|
|
| "http_accel_surrogate_remote"
|
|
| "http_access2"
|
|
| "httpd_accel_no_pmtu_disc"
|
|
| "httpd_accel_surrogate_id"
|
|
| "httpd_suppress_version_string"
|
|
| "http_port"
|
|
| "http_reply_access"
|
|
| "https_port"
|
|
| "icap_access"
|
|
| "icap_class"
|
|
| "icap_client_username_encode"
|
|
| "icap_client_username_header"
|
|
| "icap_connect_timeout"
|
|
| "icap_default_options_ttl"
|
|
| "icap_enable"
|
|
| "icap_io_timeout"
|
|
| "icap_persistent_connections"
|
|
| "icap_preview_enable"
|
|
| "icap_preview_size"
|
|
| "icap_send_client_ip"
|
|
| "icap_send_client_username"
|
|
| "icap_service"
|
|
| "icap_service_failure_limit"
|
|
| "icap_service_revival_delay"
|
|
| "icon_directory"
|
|
| "icp_access"
|
|
| "icp_hit_stale"
|
|
| "icp_port"
|
|
| "icp_query_timeout"
|
|
| "ident_lookup_access"
|
|
| "ident_timeout"
|
|
| "ie_refresh"
|
|
| "ignore_expect_100"
|
|
| "ignore_ims_on_miss"
|
|
| "ignore_unknown_nameservers"
|
|
| "incoming_dns_average"
|
|
| "incoming_http_average"
|
|
| "incoming_icp_average"
|
|
| "incoming_rate"
|
|
| "ipcache_high"
|
|
| "ipcache_low"
|
|
| "ipcache_size"
|
|
| "loadable_modules"
|
|
| "location_rewrite_access"
|
|
| "location_rewrite_children"
|
|
| "location_rewrite_concurrency"
|
|
| "location_rewrite_program"
|
|
| "log_access"
|
|
| "logfile_daemon"
|
|
| "logfile_rotate"
|
|
| "logformat"
|
|
| "log_fqdn"
|
|
| "log_icp_queries"
|
|
| "log_ip_on_direct"
|
|
| "log_mime_hdrs"
|
|
| "log_uses_indirect_client"
|
|
| "mail_from"
|
|
| "mail_program"
|
|
| "max_filedescriptors"
|
|
| "maximum_icp_query_timeout"
|
|
| "maximum_object_size"
|
|
| "maximum_object_size_in_memory"
|
|
| "maximum_single_addr_tries"
|
|
| "max_open_disk_fds"
|
|
| "max_stale"
|
|
| "mcast_groups"
|
|
| "mcast_icp_query_timeout"
|
|
| "mcast_miss_addr"
|
|
| "mcast_miss_encode_key"
|
|
| "mcast_miss_port"
|
|
| "mcast_miss_ttl"
|
|
| "memory_pools"
|
|
| "memory_pools_limit"
|
|
| "memory_replacement_policy"
|
|
| "mime_table"
|
|
| "min_dns_poll_cnt"
|
|
| "min_http_poll_cnt"
|
|
| "min_icp_poll_cnt"
|
|
| "minimum_direct_hops"
|
|
| "minimum_direct_rtt"
|
|
| "minimum_expiry_time"
|
|
| "minimum_icp_query_timeout"
|
|
| "minimum_object_size"
|
|
| "miss_access"
|
|
| "negative_dns_ttl"
|
|
| "negative_ttl"
|
|
| "neighbor_type_domain"
|
|
| "netdb_filename"
|
|
| "netdb_high"
|
|
| "netdb_low"
|
|
| "netdb_ping_period"
|
|
| "never_direct"
|
|
| "no_cache"
|
|
| "nonhierarchical_direct"
|
|
| "offline_mode"
|
|
| "pconn_timeout"
|
|
| "peer_connect_timeout"
|
|
| "persistent_connection_after_error"
|
|
| "persistent_request_timeout"
|
|
| "pid_filename"
|
|
| "pinger_enable"
|
|
| "pinger_program"
|
|
| "pipeline_prefetch"
|
|
| "positive_dns_ttl"
|
|
| "prefer_direct"
|
|
| "qos_flows"
|
|
| "query_icmp"
|
|
| "quick_abort_max"
|
|
| "quick_abort_min"
|
|
| "quick_abort_pct"
|
|
| "range_offset_limit"
|
|
| "read_ahead_gap"
|
|
| "read_timeout"
|
|
| "redirector_bypass"
|
|
| "referer_log"
|
|
| "refresh_all_ims"
|
|
| "refresh_stale_hit"
|
|
| "relaxed_header_parser"
|
|
| "reload_into_ims"
|
|
| "reply_body_max_size"
|
|
| "reply_header_access"
|
|
| "reply_header_max_size"
|
|
| "request_body_max_size"
|
|
| "request_entities"
|
|
| "request_header_access"
|
|
| "request_header_max_size"
|
|
| "request_timeout"
|
|
| "retry_on_error"
|
|
| "server_http11"
|
|
| "server_persistent_connections"
|
|
| "short_icon_urls"
|
|
| "shutdown_lifetime"
|
|
| "sleep_after_fork"
|
|
| "snmp_access"
|
|
| "snmp_incoming_address"
|
|
| "snmp_outgoing_address"
|
|
| "snmp_port"
|
|
| "ssl_bump"
|
|
| "ssl_engine"
|
|
| "sslpassword_program"
|
|
| "sslproxy_cafile"
|
|
| "sslproxy_capath"
|
|
| "sslproxy_cert_error"
|
|
| "sslproxy_cipher"
|
|
| "sslproxy_client_certificate"
|
|
| "sslproxy_client_key"
|
|
| "sslproxy_flags"
|
|
| "sslproxy_options"
|
|
| "sslproxy_version"
|
|
| "ssl_unclean_shutdown"
|
|
| "store_avg_object_size"
|
|
| "store_dir_select_algorithm"
|
|
| "store_objects_per_bucket"
|
|
| "storeurl_access"
|
|
| "storeurl_rewrite_children"
|
|
| "storeurl_rewrite_concurrency"
|
|
| "storeurl_rewrite_program"
|
|
| "strip_query_terms"
|
|
| "tcp_outgoing_address"
|
|
| "tcp_outgoing_tos"
|
|
| "tcp_recv_bufsize"
|
|
| "test_reachability"
|
|
| "udp_incoming_address"
|
|
| "udp_outgoing_address"
|
|
| "umask"
|
|
| "unique_hostname"
|
|
| "unlinkd_program"
|
|
| "update_headers"
|
|
| "uri_whitespace"
|
|
| "url_rewrite_access"
|
|
| "url_rewrite_bypass"
|
|
| "url_rewrite_children"
|
|
| "url_rewrite_concurrency"
|
|
| "url_rewrite_host_header"
|
|
| "url_rewrite_program"
|
|
| "useragent_log"
|
|
| "vary_ignore_expire"
|
|
| "via"
|
|
| "visible_hostname"
|
|
| "wccp2_address"
|
|
| "wccp2_assignment_method"
|
|
| "wccp2_forwarding_method"
|
|
| "wccp2_rebuild_wait"
|
|
| "wccp2_return_method"
|
|
| "wccp2_router"
|
|
| "wccp2_service"
|
|
| "wccp2_service_info"
|
|
| "wccp2_weight"
|
|
| "wccp_address"
|
|
| "wccp_router"
|
|
| "wccp_version"
|
|
| "windows_ipaddrchangemonitor"
|
|
| "zero_buffers"
|
|
| "zph_local"
|
|
| "zph_mode"
|
|
| "zph_option"
|
|
| "zph_parent"
|
|
| "zph_sibling"
|
|
|
|
let entry = indent . (Build.key_ws_value entry_re)
|
|
|
|
(************************************************************************
|
|
* AUTH
|
|
*************************************************************************)
|
|
|
|
let auth_re = "auth_param"
|
|
let auth = indent
|
|
. [ key "auth_param"
|
|
. value "scheme"
|
|
. value "parameter"
|
|
. (value_space_in "setting") ?
|
|
. comment_or_eol ]
|
|
|
|
(************************************************************************
|
|
* ACL
|
|
*************************************************************************)
|
|
|
|
let acl_re = "acl"
|
|
let acl = indent
|
|
. [ key acl_re . spc
|
|
. [ key word
|
|
. value "type"
|
|
. value "setting"
|
|
. parameters?
|
|
. comment_or_eol ] ]
|
|
|
|
(************************************************************************
|
|
* HTTP ACCESS
|
|
*************************************************************************)
|
|
|
|
let http_access_re
|
|
= "http_access"
|
|
| "upgrade_http0.9"
|
|
| "broken_vary_encoding"
|
|
|
|
let http_access
|
|
= indent
|
|
. [ key http_access_re
|
|
. spc
|
|
. [ key /allow|deny/
|
|
. spc
|
|
. sto_to_spc
|
|
. parameters? ]
|
|
. comment_or_eol ]
|
|
|
|
(************************************************************************
|
|
* REFRESH PATTERN
|
|
*************************************************************************)
|
|
|
|
let refresh_pattern_option_re = "override-expire"
|
|
| "override-lastmod"
|
|
| "reload-into-ims"
|
|
| "ignore-reload"
|
|
| "ignore-no-cache"
|
|
| "ignore-no-store"
|
|
| "ignore-must-revalidate"
|
|
| "ignore-private"
|
|
| "ignore-auth"
|
|
| "refresh-ims"
|
|
| "store-stale"
|
|
|
|
let refresh_pattern = indent . [ key "refresh_pattern" . spc
|
|
. [ label "case_insensitive" . Util.del_str "-i" . spc ]?
|
|
. store /[^ \t\n]+/ . spc
|
|
. [ label "min" . store Rx.integer ] . spc
|
|
. [ label "percent" . store Rx.integer . Util.del_str "%" ] . spc
|
|
. [ label "max" . store Rx.integer ]
|
|
. (spc . Build.opt_list [ label "option" . store refresh_pattern_option_re ] spc)?
|
|
. comment_or_eol ]
|
|
|
|
(************************************************************************
|
|
* EXTENSION METHODS
|
|
*************************************************************************)
|
|
|
|
let extension_methods = indent . [ key "extension_methods" . spc
|
|
. Build.opt_list [ seq "extension_method" . store Rx.word ] spc
|
|
. comment_or_eol ]
|
|
|
|
(************************************************************************
|
|
* LENS
|
|
*************************************************************************)
|
|
|
|
let lns = (comment|empty|entry|auth|acl|http_access|refresh_pattern|extension_methods)*
|
|
|
|
let filter = incl "/etc/squid/squid.conf"
|
|
. incl "/etc/squid3/squid.conf"
|
|
|
|
let xfm = transform lns filter
|