/usr/share/augeas/lenses/dist
NameSizeModeActions
tests/-0755rm
access.aug36690644editdlrm
activemq_conf.aug15090644editdlrm
activemq_xml.aug8640644editdlrm
afs_cellalias.aug16020644editdlrm
aliases.aug22310644editdlrm
anaconda.aug7750644editdlrm
anacron.aug25450644editdlrm
approx.aug12860644editdlrm
aptcacherngsecurity.aug7260644editdlrm
aptconf.aug39890644editdlrm
aptpreferences.aug18310644editdlrm
aptsources.aug20230644editdlrm
apt_update_manager.aug11350644editdlrm
authinfo2.aug14760644editdlrm
authorized_keys.aug18830644editdlrm
authselectpam.aug37840644editdlrm
automaster.aug33910644editdlrm
automounter.aug41480644editdlrm
avahi.aug14170644editdlrm
backuppchosts.aug10140644editdlrm
bbhosts.aug43420644editdlrm
bootconf.aug37360644editdlrm
build.aug170450644editdlrm
cachefilesd.aug20510644editdlrm
carbon.aug15740644editdlrm
ceph.aug7190644editdlrm
cgconfig.aug34470644editdlrm
cgrules.aug24320644editdlrm
channels.aug39290644editdlrm
chrony.aug139820644editdlrm
clamav.aug17160644editdlrm
cmdline.aug5000644editdlrm
cobblermodules.aug3980644editdlrm
cobblersettings.aug22950644editdlrm
collectd.aug8690644editdlrm
cpanel.aug8240644editdlrm
cron.aug41430644editdlrm
cron_user.aug12900644editdlrm
crypttab.aug31510644editdlrm
csv.aug12120644editdlrm
cups.aug4590644editdlrm
cyrus_imapd.aug15460644editdlrm
darkice.aug7730644editdlrm
debctrl.aug37010644editdlrm
desktop.aug14220644editdlrm
devfsrules.aug6190644editdlrm
device_map.aug6200644editdlrm
dhclient.aug68500644editdlrm
dhcpd.aug213790644editdlrm
dnsmasq.aug22090644editdlrm
dns_zone.aug29630644editdlrm
dovecot.aug40730644editdlrm
dpkg.aug28510644editdlrm
dput.aug22130644editdlrm
erlang.aug44320644editdlrm
ethers.aug6630644editdlrm
exports.aug24240644editdlrm
fail2ban.aug18350644editdlrm
fai_diskconfig.aug95020644editdlrm
fonts.aug8190644editdlrm
fstab.aug12570644editdlrm
fuse.aug8710644editdlrm
gdm.aug18410644editdlrm
getcap.aug16100644editdlrm
group.aug17030644editdlrm
grub.aug113110644editdlrm
grubenv.aug5080644editdlrm
gshadow.aug22400644editdlrm
gtkbookmarks.aug8550644editdlrm
hostname.aug4350644editdlrm
hosts.aug4850644editdlrm
hosts_access.aug44260644editdlrm
host_conf.aug19410644editdlrm
htpasswd.aug10430644editdlrm
httpd.aug75270644editdlrm
inetd.aug63650644editdlrm
inifile.aug158590644editdlrm
inittab.aug7800644editdlrm
inputrc.aug16620644editdlrm
interfaces.aug47330644editdlrm
iproute2.aug3230644editdlrm
iptables.aug27030644editdlrm
iscsid.aug6840644editdlrm
jaas.aug16120644editdlrm
jettyrealm.aug15520644editdlrm
jmxaccess.aug13860644editdlrm
jmxpassword.aug13750644editdlrm
json.aug21980644editdlrm
kdump.aug29770644editdlrm
keepalived.aug109580644editdlrm
known_hosts.aug19790644editdlrm
koji.aug8980644editdlrm
krb5.aug71490644editdlrm
ldif.aug78330644editdlrm
ldso.aug10850644editdlrm
lightdm.aug17930644editdlrm
limits.aug20660644editdlrm
login_defs.aug6150644editdlrm
logrotate.aug43330644editdlrm
logwatch.aug14730644editdlrm
lokkit.aug22160644editdlrm
lvm.aug20790644editdlrm
mailscanner.aug16990644editdlrm
mailscanner_rules.aug29110644editdlrm
masterpasswd.aug44680644editdlrm
mcollective.aug11120644editdlrm
mdadm_conf.aug102890644editdlrm
memcached.aug12720644editdlrm
mke2fs.aug64360644editdlrm
modprobe.aug34200644editdlrm
modules.aug7410644editdlrm
modules_conf.aug10680644editdlrm
mongodbserver.aug12010644editdlrm
monit.aug21820644editdlrm
multipath.aug43110644editdlrm
mysql.aug19940644editdlrm
nagioscfg.aug21380644editdlrm
nagiosobjects.aug16040644editdlrm
netmasks.aug17320644editdlrm
networkmanager.aug22330644editdlrm
networks.aug11160644editdlrm
nginx.aug37400644editdlrm
nrpe.aug18270644editdlrm
nslcd.aug101110644editdlrm
nsswitch.aug23860644editdlrm
ntp.aug54190644editdlrm
ntpd.aug48610644editdlrm
odbc.aug14500644editdlrm
opendkim.aug31740644editdlrm
openshift_config.aug25240644editdlrm
openshift_http.aug10520644editdlrm
openshift_quickstarts.aug10440644editdlrm
openvpn.aug228170644editdlrm
oz.aug13840644editdlrm
pagekite.aug26630644editdlrm
pam.aug26370644editdlrm
pamconf.aug12560644editdlrm
passwd.aug36090644editdlrm
pbuilder.aug6380644editdlrm
pgbouncer.aug14620644editdlrm
pg_hba.aug30430644editdlrm
php.aug23930644editdlrm
phpvars.aug39470644editdlrm
postfix_access.aug7710644editdlrm
postfix_main.aug15550644editdlrm
postfix_master.aug19500644editdlrm
postfix_passwordmap.aug13120644editdlrm
postfix_sasl_smtpd.aug6970644editdlrm
postfix_transport.aug15140644editdlrm
postfix_virtual.aug13470644editdlrm
postgresql.aug21520644editdlrm
properties.aug23570644editdlrm
protocols.aug10800644editdlrm
puppet.aug15580644editdlrm
puppetfile.aug23270644editdlrm
puppetfileserver.aug31900644editdlrm
puppet_auth.aug20010644editdlrm
pylonspaste.aug23590644editdlrm
pythonpaste.aug20350644editdlrm
qpid.aug6700644editdlrm
quote.aug68710644editdlrm
rabbitmq.aug48040644editdlrm
radicale.aug15180644editdlrm
rancid.aug9270644editdlrm
redis.aug64390644editdlrm
reprepro_uploaders.aug56040644editdlrm
resolv.aug40820644editdlrm
rhsm.aug11300644editdlrm
rmt.aug7880644editdlrm
rsyncd.aug20170644editdlrm
rsyslog.aug33440644editdlrm
rtadvd.aug8540644editdlrm
rx.aug43030644editdlrm
samba.aug17550644editdlrm
schroot.aug18320644editdlrm
securetty.aug4500644editdlrm
semanage.aug8590644editdlrm
sep.aug13060644editdlrm
services.aug28870644editdlrm
shadow.aug24040644editdlrm
shells.aug7450644editdlrm
shellvars.aug123110644editdlrm
shellvars_list.aug17790644editdlrm
simplelines.aug11550644editdlrm
simplevars.aug14380644editdlrm
sip_conf.aug16510644editdlrm
slapd.aug53270644editdlrm
smbusers.aug7810644editdlrm
solaris_system.aug32280644editdlrm
soma.aug11670644editdlrm
spacevars.aug14490644editdlrm
splunk.aug16770644editdlrm
squid.aug163300644editdlrm
ssh.aug44930644editdlrm
sshd.aug42480644editdlrm
sssd.aug8610644editdlrm
star.aug9410644editdlrm
strongswan.aug16710644editdlrm
stunnel.aug22600644editdlrm
subversion.aug28170644editdlrm
sudoers.aug205570644editdlrm
sysconfig.aug25500644editdlrm
sysconfig_route.aug26150644editdlrm
sysctl.aug9230644editdlrm
syslog.aug75010644editdlrm
systemd.aug61540644editdlrm
termcap.aug10500644editdlrm
thttpd.aug13450644editdlrm
tinc.aug11030644editdlrm
tmpfiles.aug31570644editdlrm
toml.aug41750644editdlrm
trapperkeeper.aug41100644editdlrm
tuned.aug3870644editdlrm
up2date.aug22640644editdlrm
updatedb.aug11590644editdlrm
util.aug49630644editdlrm
vfstab.aug17560644editdlrm
vmware_config.aug7020644editdlrm
vsftpd.aug27850644editdlrm
webmin.aug12570644editdlrm
wine.aug19660644editdlrm
xendconfsxp.aug10970644editdlrm
xinetd.aug41200644editdlrm
xml.aug64810644editdlrm
xorg.aug106790644editdlrm
xymon.aug23140644editdlrm
xymon_alerting.aug62590644editdlrm
yaml.aug15810644editdlrm
yum.aug22400644editdlrm
Edit: /usr/share/augeas/lenses/dist/openvpn.aug (22817B)
(* OpenVPN module for Augeas Author: Raphael Pinson Author: Justin Akers Reference: http://openvpn.net/index.php/documentation/howto.html Reference: https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage TODO: Inline file support *) module OpenVPN = autoload xfm (************************************************************************ * USEFUL PRIMITIVES *************************************************************************) let eol = Util.eol let indent = Util.indent (* Define separators *) let sep = Util.del_ws_spc (* Define value regexps. Custom simplified ipv6 used instead of Rx.ipv6 as the augeas Travis instances are limited to 2GB of memory. Using 'ipv6_re = Rx.ipv6' consumes an extra 2GB of memory and thus the test is OOM-killed. *) let ipv6_re = /[0-9A-Fa-f:]+/ let ipv4_re = Rx.ipv4 let ip_re = ipv4_re|ipv6_re let num_re = Rx.integer let fn_re = /[^#; \t\n][^#;\n]*[^#; \t\n]|[^#; \t\n]/ let fn_safe_re = /[^#; \t\r\n]+/ let an_re = /[a-z][a-z0-9_-]*/ let hn_re = Rx.hostname let port_re = /[0-9]+/ let host_re = ip_re|hn_re let proto_re = /(tcp|udp)/ let proto_ext_re = /(udp|tcp-client|tcp-server)/ let alg_re = /(none|[A-Za-z][A-Za-z0-9-]+)/ let ipv6_bits_re = ipv6_re . /\/[0-9]+/ (* Define store aliases *) let ip = store ip_re let num = store num_re let filename = store fn_re let filename_safe = store fn_safe_re let hostname = store hn_re let sto_to_dquote = store /[^"\n]+/ (* " Emacs, relax *) let port = store port_re let host = store host_re let proto = store proto_re let proto_ext = store proto_ext_re (* define comments and empty lines *) let comment = Util.comment_generic /[ \t]*[;#][ \t]*/ "# " let comment_or_eol = eol | Util.comment_generic /[ \t]*[;#][ \t]*/ " # " let empty = Util.empty (************************************************************************ * SINGLE VALUES * * - local => IP|hostname * - port => num * - proto => udp|tcp-client|tcp-server * - proto-force => udp|tcp * - mode => p2p|server * - dev => (tun|tap)\d* * - dev-node => filename * - ca => filename * - config => filename * - cert => filename * - key => filename * - dh => filename * - ifconfig-pool-persist => filename * - learn-address => filename * - cipher => [A-Z0-9-]+ * - max-clients => num * - user => alphanum * - group => alphanum * - status => filename * - log => filename * - log-append => filename * - client-config-dir => filename * - verb => num * - mute => num * - fragment => num * - mssfix => num * - connect-retry num * - connect-retry-max num * - connect-timeout num * - http-proxy-timeout num * - max-routes num * - ns-cert-type => "server" * - resolv-retry => "infinite" * - script-security => [0-3] (execve|system)? * - ipchange => command * - topology => type *************************************************************************) let single_host = "local" | "tls-remote" let single_ip = "lladdr" let single_ipv6_bits = "iroute-ipv6" | "server-ipv6" | "ifconfig-ipv6-pool" let single_num = "port" | "max-clients" | "verb" | "mute" | "fragment" | "mssfix" | "connect-retry" | "connect-retry-max" | "connect-timeout" | "http-proxy-timeout" | "resolv-retry" | "lport" | "rport" | "max-routes" | "max-routes-per-client" | "route-metric" | "tun-mtu" | "tun-mtu-extra" | "shaper" | "ping" | "ping-exit" | "ping-restart" | "sndbuf" | "rcvbuf" | "txqueuelen" | "link-mtu" | "nice" | "management-log-cache" | "bcast-buffers" | "tcp-queue-limit" | "server-poll-timeout" | "keysize" | "pkcs11-pin-cache" | "tls-timeout" | "reneg-bytes" | "reneg-pkts" | "reneg-sec" | "hand-window" | "tran-window" let single_fn = "ca" | "cert" | "extra-certs" | "config" | "key" | "dh" | "log" | "log-append" | "client-config-dir" | "dev-node" | "cd" | "chroot" | "writepid" | "client-config-dir" | "tmp-dir" | "replay-persist" | "ca" | "capath" | "pkcs12" | "pkcs11-id" | "askpass" | "tls-export-cert" | "x509-track" let single_an = "user" | "group" | "management-client-user" | "management-client-group" let single_cmd = "ipchange" | "iproute" | "route-up" | "route-pre-down" | "mark" | "up" | "down" | "setcon" | "echo" | "client-connect" | "client-disconnect" | "learn-address" | "tls-verify" let single_entry (kw:regexp) (re:regexp) = [ key kw . sep . store re . comment_or_eol ] let single_opt_entry (kw:regexp) (re:regexp) = [ key kw . (sep . store re)? .comment_or_eol ] let single = single_entry single_num num_re | single_entry single_fn fn_re | single_entry single_an an_re | single_entry single_host host_re | single_entry single_ip ip_re | single_entry single_ipv6_bits ipv6_bits_re | single_entry single_cmd fn_re | single_entry "proto" proto_ext_re | single_entry "proto-force" proto_re | single_entry "mode" /(p2p|server)/ | single_entry "dev" /(tun|tap)[0-9]*|null/ | single_entry "dev-type" /(tun|tap)/ | single_entry "topology" /(net30|p2p|subnet)/ | single_entry "cipher" alg_re | single_entry "auth" alg_re | single_entry "resolv-retry" "infinite" | single_entry "script-security" /[0-3]( execve| system)?/ | single_entry "route-gateway" (host_re|/dhcp/) | single_entry "mtu-disc" /(no|maybe|yes)/ | single_entry "remap-usr1" /SIG(HUP|TERM)/ | single_entry "socket-flags" /(TCP_NODELAY)/ | single_entry "auth-retry" /(none|nointeract|interact)/ | single_entry "tls-version-max" Rx.decimal | single_entry "verify-hash" /([A-Za-z0-9]{2}:)+[A-Za-z0-9]{2}/ | single_entry "pkcs11-cert-private" /[01]/ | single_entry "pkcs11-protected-authentication" /[01]/ | single_entry "pkcs11-private-mode" /[A-Za-z0-9]+/ | single_entry "key-method" /[12]/ | single_entry "ns-cert-type" /(client|server)/ | single_entry "remote-cert-tls" /(client|server)/ let single_opt = single_opt_entry "comp-lzo" /(yes|no|adaptive)/ | single_opt_entry "syslog" fn_re | single_opt_entry "daemon" fn_re | single_opt_entry "auth-user-pass" fn_re | single_opt_entry "explicit-exit-notify" num_re | single_opt_entry "engine" fn_re (************************************************************************ * DOUBLE VALUES *************************************************************************) let double_entry (kw:regexp) (a:string) (aval:regexp) (b:string) (bval:regexp) = [ key kw . sep . [ label a . store aval ] . sep . [ label b . store bval ] . comment_or_eol ] let double_secopt_entry (kw:regexp) (a:string) (aval:regexp) (b:string) (bval:regexp) = [ key kw . sep . [ label a . store aval ] . (sep . [ label b . store bval ])? . comment_or_eol ] let double = double_entry "keepalive" "ping" num_re "timeout" num_re | double_entry "hash-size" "real" num_re "virtual" num_re | double_entry "ifconfig" "local" ip_re "remote" ip_re | double_entry "connect-freq" "num" num_re "sec" num_re | double_entry "verify-x509-name" "name" hn_re "type" /(subject|name|name-prefix)/ | double_entry "ifconfig-ipv6" "address" ipv6_bits_re "remote" ipv6_re | double_entry "ifconfig-ipv6-push" "address" ipv6_bits_re "remote" ipv6_re | double_secopt_entry "iroute" "local" ip_re "netmask" ip_re | double_secopt_entry "stale-routes-check" "age" num_re "interval" num_re | double_secopt_entry "ifconfig-pool-persist" "file" fn_safe_re "seconds" num_re | double_secopt_entry "secret" "file" fn_safe_re "direction" /[01]/ | double_secopt_entry "prng" "algorithm" alg_re "nsl" num_re | double_secopt_entry "replay-window" "window-size" num_re "seconds" num_re (************************************************************************ * FLAGS *************************************************************************) let flag_words = "client-to-client" | "duplicate-cn" | "persist-key" | "persist-tun" | "client" | "remote-random" | "nobind" | "mute-replay-warnings" | "http-proxy-retry" | "socks-proxy-retry" | "remote-random-hostname" | "show-proxy-settings" | "float" | "bind" | "nobind" | "tun-ipv6" | "ifconfig-noexec" | "ifconfig-nowarn" | "route-noexec" | "route-nopull" | "allow-pull-fqdn" | "mtu-test" | "ping-timer-rem" | "persist-tun" | "persist-local-ip" | "persist-remote-ip" | "mlock" | "up-delay" | "down-pre" | "up-restart" | "disable-occ" | "errors-to-stderr" | "passtos" | "suppress-timestamps" | "fast-io" | "multihome" | "comp-noadapt" | "management-client" | "management-query-passwords" | "management-query-proxy" | "management-query-remote" | "management-forget-disconnect" | "management-hold" | "management-signal" | "management-up-down" | "management-client-auth" | "management-client-pf" | "push-reset" | "push-peer-info" | "disable" | "ifconfig-pool-linear" | "client-to-client" | "duplicate-cn" | "ccd-exclusive" | "tcp-nodelay" | "opt-verify" | "auth-user-pass-optional" | "client-cert-not-required" | "username-as-common-name" | "pull" | "key-direction" | "no-replay" | "mute-replay-warnings" | "no-iv" | "use-prediction-resistance" | "test-crypto" | "tls-server" | "tls-client" | "pkcs11-id-management" | "single-session" | "tls-exit" | "auth-nocache" | "show-ciphers" | "show-digests" | "show-tls" | "show-engines" | "genkey" | "mktun" | "rmtun" let flag_entry (kw:regexp) = [ key kw . comment_or_eol ] let flag = flag_entry flag_words (************************************************************************ * OTHER FIELDS * * - server => IP IP [nopool] * - server-bridge => IP IP IP IP * - route => host host [host [num]] * - push => "string" * - tls-auth => filename [01] * - remote => hostname/IP [num] [(tcp|udp)] * - management => IP num filename * - http-proxy => host port [filename|keyword] [method] * - http-proxy-option => (VERSION decimal|AGENT string) * ... * and many others * *************************************************************************) let server = [ key "server" . sep . [ label "address" . ip ] . sep . [ label "netmask" . ip ] . (sep . [ key "nopool" ]) ? . comment_or_eol ] let server_bridge = let ip_params = [ label "address" . ip ] . sep . [ label "netmask" . ip ] . sep . [ label "start" . ip ] . sep . [ label "end" . ip ] in [ key "server-bridge" . sep . (ip_params|store /(nogw)/) . comment_or_eol ] let route = let route_net_kw = store (/(vpn_gateway|net_gateway|remote_host)/|host_re) in [ key "route" . sep . [ label "address" . route_net_kw ] . (sep . [ label "netmask" . store (ip_re|/default/) ] . (sep . [ label "gateway" . route_net_kw ] . (sep . [ label "metric" . store (/default/|num_re)] )? )? )? . comment_or_eol ] let route_ipv6 = let route_net_re = /(vpn_gateway|net_gateway|remote_host)/ in [ key "route-ipv6" . sep . [ label "network" . store (route_net_re|ipv6_bits_re) ] . (sep . [ label "gateway" . store (route_net_re|ipv6_re) ] . (sep . [ label "metric" . store (/default/|num_re)] )? )? . comment_or_eol ] let push = [ key "push" . sep . Quote.do_dquote sto_to_dquote . comment_or_eol ] let tls_auth = [ key "tls-auth" . sep . [ label "key" . filename ] . sep . [ label "is_client" . store /[01]/ ] . comment_or_eol ] let remote = [ key "remote" . sep . [ label "server" . host ] . (sep . [label "port" . port] . (sep . [label "proto" . proto]) ? ) ? . comment_or_eol ] let http_proxy = let auth_method_re = /(none|basic|ntlm)/ in let auth_method = store auth_method_re in [ key "http-proxy" . sep . [ label "server" . host ] . sep . [ label "port" . port ] . (sep . [ label "auth" . filename_safe ] . (sep . [ label "auth-method" . auth_method ]) ? )? . comment_or_eol ] let http_proxy_option = [ key "http-proxy-option" . sep . [ label "option" . store /(VERSION|AGENT)/ ] . sep . [ label "value" . filename ] . comment_or_eol ] let socks_proxy = [ key "socks-proxy" . sep . [ label "server" . host ] . (sep . [ label "port" . port ] . (sep . [ label "auth" . filename_safe ])? )? . comment_or_eol ] let port_share = [ key "port-share" . sep . [ label "host" . host ] . sep . [ label "port" . port ] . (sep . [ label "dir" . filename ])? . comment_or_eol ] let route_delay = [ key "route-delay" . (sep . [ label "seconds" . num ] . (sep . [ label "win-seconds" . num ] ) ? )? . comment_or_eol ] let inetd = [ key "inetd" . (sep . [label "mode" . store /(wait|nowait)/ ] . (sep . [ label "progname" . filename ] ) ? )? . comment_or_eol ] let inactive = [ key "inactive" . sep . [ label "seconds" . num ] . (sep . [ label "bytes" . num ] ) ? . comment_or_eol ] let client_nat = [ key "client-nat" . sep . [ label "type" . store /(snat|dnat)/ ] . sep . [ label "network" . ip ] . sep . [ label "netmask" . ip ] . sep . [ label "alias" . ip ] . comment_or_eol ] let status = [ key "status" . sep . [ label "file" . filename_safe ] . (sep . [ label "repeat-seconds" . num ]) ? . comment_or_eol ] let plugin = [ key "plugin" . sep . [ label "file" . filename_safe ] . (sep . [ label "init-string" . filename ]) ? . comment_or_eol ] let management = [ key "management" . sep . [ label "server" . ip ] . sep . [ label "port" . port ] . (sep . [ label "pwfile" . filename ] ) ? . comment_or_eol ] let auth_user_pass_verify = [ key "auth-user-pass-verify" . sep . [ Quote.quote_spaces (label "command") ] . sep . [ label "method" . store /via-(env|file)/ ] . comment_or_eol ] let static_challenge = [ key "static-challenge" . sep . [ Quote.quote_spaces (label "text") ] . sep . [ label "echo" . store /[01]/ ] . comment_or_eol ] let cryptoapicert = [ key "cryptoapicert" . sep . Quote.dquote . [ key /[A-Z]+/ . Sep.colon . store /[A-Za-z _-]+/ ] . Quote.dquote . comment_or_eol ] let setenv = let envvar = /[^#;\/ \t\n][A-Za-z0-9_-]+/ in [ key ("setenv"|"setenv-safe") . sep . [ key envvar . sep . store fn_re ] . comment_or_eol ] let redirect = let redirect_flag = /(local|autolocal|def1|bypass-dhcp|bypass-dns|block-local)/ in let redirect_key = "redirect-gateway" | "redirect-private" in [ key redirect_key . (sep . [ label "flag" . store redirect_flag ] ) + . comment_or_eol ] let tls_cipher = let ciphername = /[A-Za-z0-9!_-]+/ in [ key "tls-cipher" . sep . [label "cipher" . store ciphername] . (Sep.colon . [label "cipher" . store ciphername])* . comment_or_eol ] let remote_cert_ku = let usage = [label "usage" . store /[A-Za-z0-9]{1,2}/] in [ key "remote-cert-ku" . sep . usage . (sep . usage)* . comment_or_eol ] (* FIXME: Surely there's a nicer way to do this *) let remote_cert_eku = let oid = [label "oid" . store /[0-9]+\.([0-9]+\.)*[0-9]+/] in let symbolic = [Quote.do_quote_opt (label "symbol" . store /[A-Za-z0-9][A-Za-z0-9 _-]*[A-Za-z0-9]/)] in [ key "remote-cert-eku" . sep . (oid|symbolic) . comment_or_eol ] let status_version = [ key "status-version" . (sep . num) ? . comment_or_eol ] let ifconfig_pool = [ key "ifconfig-pool" . sep . [ label "start" . ip ] . sep . [ label "end" . ip ] . (sep . [ label "netmask" . ip ])? . comment_or_eol ] let ifconfig_push = [ key "ifconfig-push" . sep . [ label "local" . ip ] . sep . [ label "remote-netmask" . ip ] . (sep . [ label "alias" . store /[A-Za-z0-9_-]+/ ] )? . comment_or_eol ] let ignore_unknown_option = [ key "ignore-unknown-option" . (sep . [ label "opt" . store /[A-Za-z0-9_-]+/ ] ) + . comment_or_eol ] let tls_version_min = [ key "tls-version-min" . sep . store Rx.decimal . (sep . [ key "or-highest" ]) ? . comment_or_eol ] let crl_verify = [ key "crl-verify" . sep . filename_safe . (sep . [ key "dir" ]) ? . comment_or_eol ] let x509_username_field = let fieldname = /[A-Za-z0-9_-]+/ in let extfield = ([key /ext/ . Sep.colon . store fieldname]) in let subjfield = ([label "subj" . store fieldname]) in [ key "x509-username-field" . sep . (extfield|subjfield) . comment_or_eol ] let other = server | server_bridge | route | push | tls_auth | remote | http_proxy | http_proxy_option | socks_proxy | management | route_delay | client_nat | redirect | inactive | setenv | inetd | status | status_version | plugin | ifconfig_pool | ifconfig_push | ignore_unknown_option | auth_user_pass_verify | port_share | static_challenge | tls_version_min | tls_cipher | cryptoapicert | x509_username_field | remote_cert_ku | remote_cert_eku | crl_verify | route_ipv6 (************************************************************************ * LENS & FILTER *************************************************************************) let lns = ( comment | empty | single | single_opt | double | flag | other )* let filter = (incl "/etc/openvpn/client.conf") . (incl "/etc/openvpn/server.conf") let xfm = transform lns filter