GIF87a;
(* Module: Dhcpd BIND dhcp 3 server configuration module for Augeas Author: Francis Giraldeau <francis.giraldeau@usherbrooke.ca> About: Reference Reference: manual of dhcpd.conf and dhcp-eval Follow dhclient module for tree structure About: License This file is licensed under the GPL. About: Lens Usage Sample usage of this lens in augtool Directive without argument. Set this dhcpd server authoritative on the domain. > clear /files/etc/dhcp3/dhcpd.conf/authoritative Directives with integer or string argument. Set max-lease-time to one hour: > set /files/etc/dhcp3/dhcpd.conf/max-lease-time 3600 Options are declared as a list, even for single values. Set the domain of the network: > set /files/etc/dhcp3/dhcpd.conf/option/domain-name/arg example.org Set two name server: > set /files/etc/dhcp3/dhcpd.conf/option/domain-name-servers/arg[1] foo.example.org > set /files/etc/dhcp3/dhcpd.conf/option/domain-name-servers/arg[2] bar.example.org Create the subnet 172.16.0.1 with 10 addresses: > clear /files/etc/dhcp3/dhcpd.conf/subnet[last() + 1] > set /files/etc/dhcp3/dhcpd.conf/subnet[last()]/network 172.16.0.0 > set /files/etc/dhcp3/dhcpd.conf/subnet[last()]/netmask 255.255.255.0 > set /files/etc/dhcp3/dhcpd.conf/subnet[last()]/range/from 172.16.0.10 > set /files/etc/dhcp3/dhcpd.conf/subnet[last()]/range/to 172.16.0.20 Create a new group "foo" with one static host. Nodes type and address are ordered. > ins group after /files/etc/dhcp3/dhcpd.conf/subnet[network='172.16.0.0']/*[last()] > set /files/etc/dhcp3/dhcpd.conf/subnet[network='172.16.0.0']/group[last()]/host foo > set /files/etc/dhcp3/dhcpd.conf/subnet[network='172.16.0.0']/group[host='foo']/host/hardware/type "ethernet" > set /files/etc/dhcp3/dhcpd.conf/subnet[network='172.16.0.0']/group[host='foo']/host/hardware/address "00:00:00:aa:bb:cc" > set /files/etc/dhcp3/dhcpd.conf/subnet[network='172.16.0.0']/group[host='foo']/host/fixed-address 172.16.0.100 About: Configuration files This lens applies to /etc/dhcpd3/dhcpd.conf. See <filter>. *) module Dhcpd = autoload xfm (************************************************************************ * USEFUL PRIMITIVES *************************************************************************) let dels (s:string) = del s s let eol = Util.eol let comment = Util.comment let empty = Util.empty let indent = Util.indent let eos = comment? (* Define separators *) let sep_spc = del /[ \t]+/ " " let sep_osp = del /[ \t]*/ "" let sep_scl = del /[ \t]*;([ \t]*\n)*/ ";\n" let sep_obr = del /[ \t]*\{([ \t]*\n)*/ " {\n" let sep_cbr = del /[ \t]*\}([ \t]*\n)*/ "}\n" let sep_com = del /[ \t\n]*,[ \t\n]*/ ", " let sep_slh = del "\/" "/" let sep_col = del ":" ":" let sep_eq = del /[ \t]*=[ \t]*/ "=" let scl = del ";" ";" (* Define basic types *) let word = /[A-Za-z0-9_.-]+(\[[0-9]+\])?/ let ip = Rx.ipv4 (* Define fields *) (* adapted from sysconfig.aug *) (* Chars allowed in a bare string *) let bchar = /[^ \t\n"'\\{}#,()\/]|\\\\./ let qchar = /["']/ (* " *) (* We split the handling of right hand sides into a few cases: * bare - strings that contain no spaces, optionally enclosed in * single or double quotes * dquot - strings that contain at least one space, apostrophe or slash * which must be enclosed in double quotes * squot - strings that contain an unescaped double quote *) let bare = del qchar? "" . store (bchar+) . del qchar? "" let quote = Quote.do_quote (store (bchar* . /[ \t'\/]/ . bchar*)+) let dquote = Quote.do_dquote (store (bchar+)) let sto_to_spc = store /[^\\#,;\{\}" \t\n]+|"[^\\#"\n]+"/ let sto_to_scl = store /[^ \t;][^;\n=]+[^ \t;]|[^ \t;=]+/ let sto_number = store /[0-9][0-9]*/ (************************************************************************ * NO ARG STATEMENTS *************************************************************************) let stmt_noarg_re = "authoritative" | "primary" | "secondary" let stmt_noarg = [ indent . key stmt_noarg_re . sep_scl . eos ] (************************************************************************ * INT ARG STATEMENTS *************************************************************************) let stmt_integer_re = "default-lease-time" | "max-lease-time" | "min-lease-time" | /lease[ ]+limit/ | "port" | /peer[ ]+port/ | "max-response-delay" | "max-unacked-updates" | "mclt" | "split" | /load[ ]+balance[ ]+max[ ]+seconds/ | "max-lease-misbalance" | "max-lease-ownership" | "min-balance" | "max-balance" | "adaptive-lease-time-threshold" | "dynamic-bootp-lease-length" | "local-port" | "min-sec" | "omapi-port" | "ping-timeout" | "remote-port" let stmt_integer = [ indent . key stmt_integer_re . sep_spc . sto_number . sep_scl . eos ] (************************************************************************ * STRING ARG STATEMENTS *************************************************************************) let stmt_string_re = "ddns-update-style" | "ddns-updates" | "ddns-hostname" | "ddns-domainname" | "ddns-rev-domainname" | "log-facility" | "server-name" | "fixed-address" | /failover[ ]+peer/ | "use-host-decl-names" | "next-server" | "address" | /peer[ ]+address/ | "type" | "file" | "algorithm" | "secret" | "key" | "include" | "hba" | "boot-unknown-clients" | "db-time-format" | "do-forward-updates" | "dynamic-bootp-lease-cutoff" | "get-lease-hostnames" | "infinite-is-reserved" | "lease-file-name" | "local-address" | "one-lease-per-client" | "pid-file-name" | "ping-check" | "server-identifier" | "site-option-space" | "stash-agent-options" | "update-conflict-detection" | "update-optimization" | "update-static-leases" | "use-host-decl-names" | "use-lease-addr-for-default-route" | "vendor-option-space" | "primary" let stmt_string_tpl (kw:regexp) (l:lens) = [ indent . key kw . sep_spc . l . sep_scl . eos ] let stmt_string = stmt_string_tpl stmt_string_re bare | stmt_string_tpl stmt_string_re quote | stmt_string_tpl "filename" dquote (************************************************************************ * RANGE STATEMENTS *************************************************************************) let stmt_range = [ indent . key "range" . sep_spc . [ label "flag" . store /dynamic-bootp/ . sep_spc ]? . [ label "from" . store ip . sep_spc ]? . [ label "to" . store ip ] . sep_scl . eos ] (************************************************************************ * HARDWARE STATEMENTS *************************************************************************) let stmt_hardware = [ indent . key "hardware" . sep_spc . [ label "type" . store /ethernet|tokenring/ ] . sep_spc . [ label "address" . store /[a-fA-F0-9:-]+/ ] . sep_scl . eos ] (************************************************************************ * OPTION STATEMENTS *************************************************************************) (* The general case is considering options as a list *) let stmt_option_code = [ label "label" . store word . sep_spc ] . [ key "code" . sep_spc . store word ] . sep_eq . [ label "type" . store word ] let stmt_option_list = ([ label "arg" . bare ] | [ label "arg" . quote ]) . ( sep_com . ([ label "arg" . bare ] | [ label "arg" . quote ]))* let stmt_option_basic = [ key word . sep_spc . stmt_option_list ] let stmt_option_extra = [ key word . sep_spc . store /true|false/ . sep_spc . stmt_option_list ] let stmt_option_body = stmt_option_basic | stmt_option_extra let stmt_option1 = [ indent . key "option" . sep_spc . stmt_option_body . sep_scl . eos ] let stmt_option2 = [ indent . dels "option" . label "rfc-code" . sep_spc . stmt_option_code . sep_scl . eos ] let stmt_option = stmt_option1 | stmt_option2 (************************************************************************ * SUBCLASS STATEMENTS *************************************************************************) (* this statement is not well documented in the manual dhcpd.conf we support basic use case *) let stmt_subclass = [ indent . key "subclass" . sep_spc . ([ label "name" . quote ]| [ label "name" . bare ]) . sep_spc . [ label "value" . bare ] . sep_scl . eos ] (************************************************************************ * ALLOW/DENY STATEMENTS *************************************************************************) (* We have to use special key for allow/deny members of to avoid ambiguity in the put direction *) let allow_deny_re = "unknown-clients" | /dynamic[ ]+bootp[ ]+clients/ | /authenticated[ ]+clients/ | /unauthenticated[ ]+clients/ let stmt_secu_re = "allow" | "deny" let del_allow = del /allow[ ]+members[ ]+of/ "allow members of" let del_deny = del /deny[ \t]+members[ \t]+of/ "deny members of" let stmt_secu_tpl (l:lens) (s:string) = [ indent . l . sep_spc . label s . bare . sep_scl . eos ] | [ indent . l . sep_spc . label s . quote . sep_scl . eos ] let stmt_secu = [ indent . key stmt_secu_re . sep_spc . store allow_deny_re . sep_scl . eos ] | stmt_secu_tpl del_allow "allow-members-of" | stmt_secu_tpl del_deny "deny-members-of" (************************************************************************ * MATCH STATEMENTS *************************************************************************) let sto_fct = store (word . /[ \t]*\([^)]*\)/) let sto_option = store (/option[ ]+/ . word) let sto_com = /[^ \t\n,\(\)][^,\(\)]*[^ \t\n,\(\)]|[^ \t\n,\(\)]+/ | word . /[ \t]*\([^)]*\)/ let fct_re = "substring" | "binary-to-ascii" let fct_args = [ label "args" . dels "(" . sep_osp . ([ label "arg" . store sto_com ] . [ label "arg" . sep_com . store sto_com ]+) . sep_osp . dels ")" ] let stmt_match_if = [ dels "if" . sep_spc . store fct_re . sep_osp . label "function" . fct_args ] . sep_eq . ([ label "value" . bare ]|[ label "value" . quote ]) let stmt_match_pfv = [ label "function" . store "pick-first-value" . sep_spc . dels "(" . sep_osp . [ label "args" . [ label "arg" . store sto_com ] . [ sep_com . label "arg" . store sto_com ]+ ] . dels ")" ] let stmt_match_tpl (l:lens) = [ indent . key "match" . sep_spc . l . sep_scl . eos ] let stmt_match = stmt_match_tpl (stmt_match_if | stmt_match_pfv ) (************************************************************************ * BLOCK STATEMENTS *************************************************************************) (* Blocks doesn't support comments at the end of the closing bracket *) let stmt_entry = stmt_secu | stmt_option | stmt_hardware | stmt_range | stmt_string | stmt_integer | stmt_noarg | stmt_match | stmt_subclass | empty | comment let stmt_block_noarg_re = "pool" | "group" | "allow-update" let stmt_block_noarg (body:lens) = [ indent . key stmt_block_noarg_re . sep_obr . body* . sep_cbr ] let stmt_block_arg_re = "host" | "class" | "shared-network" | /failover[ ]+peer/ | "zone" | "key" let stmt_block_arg (body:lens) = [ indent . key stmt_block_arg_re . sep_spc . sto_to_spc . sep_obr . body* . sep_cbr ] let stmt_block_subnet (body:lens) = [ indent . key "subnet" . sep_spc . [ label "network" . store ip ] . sep_spc . [ key "netmask" . sep_spc . store ip ] . sep_obr . body* . sep_cbr ] let all_block (body:lens) = let lns1 = stmt_block_subnet body in let lns2 = stmt_block_arg body in let lns3 = stmt_block_noarg body in (lns1 | lns2 | lns3 | stmt_entry) let rec lns_staging = stmt_entry|all_block lns_staging let lns = (lns_staging)* let filter = incl "/etc/dhcp3/dhcpd.conf" . incl "/etc/dhcp/dhcpd.conf" . incl "/etc/dhcpd.conf" let xfm = transform lns filter
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
access.aug | File | 3.58 KB | 0644 |
|
activemq_conf.aug | File | 1.47 KB | 0644 |
|
activemq_xml.aug | File | 864 B | 0644 |
|
afs_cellalias.aug | File | 1.56 KB | 0644 |
|
aliases.aug | File | 2.18 KB | 0644 |
|
anaconda.aug | File | 775 B | 0644 |
|
anacron.aug | File | 2.49 KB | 0644 |
|
approx.aug | File | 1.26 KB | 0644 |
|
apt_update_manager.aug | File | 1.11 KB | 0644 |
|
aptcacherngsecurity.aug | File | 726 B | 0644 |
|
aptconf.aug | File | 3.89 KB | 0644 |
|
aptpreferences.aug | File | 1.79 KB | 0644 |
|
aptsources.aug | File | 1.52 KB | 0644 |
|
authorized_keys.aug | File | 1.84 KB | 0644 |
|
automaster.aug | File | 3.31 KB | 0644 |
|
automounter.aug | File | 4.05 KB | 0644 |
|
avahi.aug | File | 1.38 KB | 0644 |
|
backuppchosts.aug | File | 1014 B | 0644 |
|
bbhosts.aug | File | 4.24 KB | 0644 |
|
bootconf.aug | File | 3.65 KB | 0644 |
|
build.aug | File | 16.65 KB | 0644 |
|
cachefilesd.aug | File | 2 KB | 0644 |
|
carbon.aug | File | 1.54 KB | 0644 |
|
cgconfig.aug | File | 3.37 KB | 0644 |
|
cgrules.aug | File | 2.38 KB | 0644 |
|
channels.aug | File | 3.84 KB | 0644 |
|
chrony.aug | File | 8.07 KB | 0644 |
|
clamav.aug | File | 1.53 KB | 0644 |
|
cobblermodules.aug | File | 398 B | 0644 |
|
cobblersettings.aug | File | 2.24 KB | 0644 |
|
collectd.aug | File | 869 B | 0644 |
|
cpanel.aug | File | 824 B | 0644 |
|
cron.aug | File | 4.02 KB | 0644 |
|
crypttab.aug | File | 3.01 KB | 0644 |
|
cups.aug | File | 459 B | 0644 |
|
cyrus_imapd.aug | File | 1.51 KB | 0644 |
|
darkice.aug | File | 773 B | 0644 |
|
debctrl.aug | File | 3.61 KB | 0644 |
|
desktop.aug | File | 1.39 KB | 0644 |
|
device_map.aug | File | 620 B | 0644 |
|
dhclient.aug | File | 6.56 KB | 0644 |
|
dhcpd.aug | File | 15.48 KB | 0644 |
|
dhcpd_140.aug | File | 20.8 KB | 0644 |
|
dns_zone.aug | File | 2.89 KB | 0644 |
|
dnsmasq.aug | File | 1.42 KB | 0644 |
|
dovecot.aug | File | 3.35 KB | 0644 |
|
dpkg.aug | File | 2.79 KB | 0644 |
|
dput.aug | File | 2.16 KB | 0644 |
|
erlang.aug | File | 4.06 KB | 0644 |
|
ethers.aug | File | 663 B | 0644 |
|
exports.aug | File | 2.37 KB | 0644 |
|
fai_diskconfig.aug | File | 9.28 KB | 0644 |
|
fonts.aug | File | 819 B | 0644 |
|
fstab.aug | File | 1.23 KB | 0644 |
|
fuse.aug | File | 871 B | 0644 |
|
gdm.aug | File | 1.8 KB | 0644 |
|
group.aug | File | 1.71 KB | 0644 |
|
grub.aug | File | 11 KB | 0644 |
|
gshadow.aug | File | 2.19 KB | 0644 |
|
gtkbookmarks.aug | File | 855 B | 0644 |
|
host_conf.aug | File | 1.88 KB | 0644 |
|
hostname.aug | File | 422 B | 0644 |
|
hosts.aug | File | 485 B | 0644 |
|
hosts_access.aug | File | 4.32 KB | 0644 |
|
htpasswd.aug | File | 1.02 KB | 0644 |
|
httpd.aug | File | 3.83 KB | 0644 |
|
inetd.aug | File | 6.22 KB | 0644 |
|
inifile.aug | File | 15.49 KB | 0644 |
|
inittab.aug | File | 780 B | 0644 |
|
inputrc.aug | File | 1.45 KB | 0644 |
|
interfaces.aug | File | 4.33 KB | 0644 |
|
iproute2.aug | File | 323 B | 0644 |
|
iptables.aug | File | 2.64 KB | 0644 |
|
iscsid.aug | File | 684 B | 0644 |
|
jaas.aug | File | 1.31 KB | 0644 |
|
jettyrealm.aug | File | 1.52 KB | 0644 |
|
jmxaccess.aug | File | 1.35 KB | 0644 |
|
jmxpassword.aug | File | 1.34 KB | 0644 |
|
json.aug | File | 1.92 KB | 0644 |
|
kdump.aug | File | 2.91 KB | 0644 |
|
keepalived.aug | File | 10.21 KB | 0644 |
|
known_hosts.aug | File | 1.28 KB | 0644 |
|
koji.aug | File | 898 B | 0644 |
|
krb5.aug | File | 6.75 KB | 0644 |
|
ldif.aug | File | 7.65 KB | 0644 |
|
ldso.aug | File | 1.06 KB | 0644 |
|
lightdm.aug | File | 1.75 KB | 0644 |
|
limits.aug | File | 2.02 KB | 0644 |
|
login_defs.aug | File | 615 B | 0644 |
|
logrotate.aug | File | 4.17 KB | 0644 |
|
logwatch.aug | File | 1.44 KB | 0644 |
|
lokkit.aug | File | 2.16 KB | 0644 |
|
lvm.aug | File | 2.03 KB | 0644 |
|
mailscanner.aug | File | 1.66 KB | 0644 |
|
mailscanner_rules.aug | File | 2.84 KB | 0644 |
|
mcollective.aug | File | 1.09 KB | 0644 |
|
mdadm_conf.aug | File | 10.05 KB | 0644 |
|
memcached.aug | File | 1.24 KB | 0644 |
|
mke2fs.aug | File | 4.67 KB | 0644 |
|
modprobe.aug | File | 3.34 KB | 0644 |
|
modules.aug | File | 741 B | 0644 |
|
modules_conf.aug | File | 1.04 KB | 0644 |
|
mongodbserver.aug | File | 1.17 KB | 0644 |
|
monit.aug | File | 2.13 KB | 0644 |
|
multipath.aug | File | 3.28 KB | 0644 |
|
mysql.aug | File | 1.9 KB | 0644 |
|
nagioscfg.aug | File | 2.09 KB | 0644 |
|
nagiosobjects.aug | File | 1.57 KB | 0644 |
|
netmasks.aug | File | 1.69 KB | 0644 |
|
networkmanager.aug | File | 2 KB | 0644 |
|
networks.aug | File | 1.09 KB | 0644 |
|
nginx.aug | File | 2.86 KB | 0644 |
|
nrpe.aug | File | 1.75 KB | 0644 |
|
nsswitch.aug | File | 2.27 KB | 0644 |
|
ntp.aug | File | 4.87 KB | 0644 |
|
ntpd.aug | File | 4.75 KB | 0644 |
|
odbc.aug | File | 1.42 KB | 0644 |
|
openshift_config.aug | File | 2.46 KB | 0644 |
|
openshift_http.aug | File | 1.03 KB | 0644 |
|
openshift_quickstarts.aug | File | 1.07 KB | 0644 |
|
openvpn.aug | File | 6.41 KB | 0644 |
|
pagekite.aug | File | 2.6 KB | 0644 |
|
pam.aug | File | 2.26 KB | 0644 |
|
pamconf.aug | File | 1.23 KB | 0644 |
|
passwd.aug | File | 3.52 KB | 0644 |
|
pbuilder.aug | File | 638 B | 0644 |
|
pg_hba.aug | File | 2.91 KB | 0644 |
|
pgbouncer.aug | File | 1.43 KB | 0644 |
|
php.aug | File | 2.23 KB | 0644 |
|
phpvars.aug | File | 3.85 KB | 0644 |
|
postfix_access.aug | File | 732 B | 0644 |
|
postfix_main.aug | File | 1.46 KB | 0644 |
|
postfix_master.aug | File | 1.84 KB | 0644 |
|
postfix_sasl_smtpd.aug | File | 636 B | 0644 |
|
postfix_transport.aug | File | 1.43 KB | 0644 |
|
postfix_virtual.aug | File | 1.26 KB | 0644 |
|
postgresql.aug | File | 2.04 KB | 0644 |
|
properties.aug | File | 2.25 KB | 0644 |
|
protocols.aug | File | 1.05 KB | 0644 |
|
puppet.aug | File | 1.52 KB | 0644 |
|
puppet_auth.aug | File | 1.95 KB | 0644 |
|
puppetfile.aug | File | 1.45 KB | 0644 |
|
puppetfileserver.aug | File | 3.12 KB | 0644 |
|
pylonspaste.aug | File | 2.3 KB | 0644 |
|
pythonpaste.aug | File | 1.99 KB | 0644 |
|
qpid.aug | File | 670 B | 0644 |
|
quote.aug | File | 6.71 KB | 0644 |
|
rabbitmq.aug | File | 3.73 KB | 0644 |
|
redis.aug | File | 4.6 KB | 0644 |
|
reprepro_uploaders.aug | File | 4.75 KB | 0644 |
|
resolv.aug | File | 3.85 KB | 0644 |
|
rhsm.aug | File | 1.1 KB | 0644 |
|
rmt.aug | File | 788 B | 0644 |
|
rsyncd.aug | File | 1.97 KB | 0644 |
|
rsyslog.aug | File | 2.01 KB | 0644 |
|
rx.aug | File | 4.06 KB | 0644 |
|
samba.aug | File | 1.71 KB | 0644 |
|
schroot.aug | File | 1.79 KB | 0644 |
|
securetty.aug | File | 450 B | 0644 |
|
sep.aug | File | 1.28 KB | 0644 |
|
services.aug | File | 2.82 KB | 0644 |
|
shadow.aug | File | 2.35 KB | 0644 |
|
shells.aug | File | 745 B | 0644 |
|
shellvars.aug | File | 9.15 KB | 0644 |
|
shellvars_list.aug | File | 1.74 KB | 0644 |
|
simplelines.aug | File | 1.09 KB | 0644 |
|
simplevars.aug | File | 1.43 KB | 0644 |
|
sip_conf.aug | File | 1.61 KB | 0644 |
|
slapd.aug | File | 5.11 KB | 0644 |
|
slapd_140.aug | File | 5.14 KB | 0644 |
|
smbusers.aug | File | 747 B | 0644 |
|
solaris_system.aug | File | 3.15 KB | 0644 |
|
soma.aug | File | 1.14 KB | 0644 |
|
spacevars.aug | File | 1.35 KB | 0644 |
|
splunk.aug | File | 1.22 KB | 0644 |
|
squid.aug | File | 15.95 KB | 0644 |
|
ssh.aug | File | 2.92 KB | 0644 |
|
sshd.aug | File | 3.36 KB | 0644 |
|
sshd_140.aug | File | 3.77 KB | 0644 |
|
sssd.aug | File | 861 B | 0644 |
|
stunnel.aug | File | 2.21 KB | 0644 |
|
subversion.aug | File | 2.75 KB | 0644 |
|
sudoers.aug | File | 19.72 KB | 0644 |
|
sysconfig.aug | File | 2.49 KB | 0644 |
|
sysconfig_route.aug | File | 2.55 KB | 0644 |
|
sysctl.aug | File | 923 B | 0644 |
|
syslog.aug | File | 7.25 KB | 0644 |
|
systemd.aug | File | 5.65 KB | 0644 |
|
thttpd.aug | File | 1.31 KB | 0644 |
|
tuned.aug | File | 387 B | 0644 |
|
up2date.aug | File | 2.21 KB | 0644 |
|
updatedb.aug | File | 1.01 KB | 0644 |
|
util.aug | File | 4.5 KB | 0644 |
|
vfstab.aug | File | 1.71 KB | 0644 |
|
vmware_config.aug | File | 702 B | 0644 |
|
vsftpd.aug | File | 2.66 KB | 0644 |
|
webmin.aug | File | 1.23 KB | 0644 |
|
wine.aug | File | 1.92 KB | 0644 |
|
xendconfsxp.aug | File | 1.07 KB | 0644 |
|
xinetd.aug | File | 4.02 KB | 0644 |
|
xml.aug | File | 6.09 KB | 0644 |
|
xorg.aug | File | 10.12 KB | 0644 |
|
xymon.aug | File | 2.18 KB | 0644 |
|
xymon_alerting.aug | File | 6.11 KB | 0644 |
|
yum.aug | File | 2.07 KB | 0644 |
|