You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

117 lines
3.8 KiB

  1. #!/bin/sh
  2. ##############################################################################
  3. #
  4. # This program is free software; you can redistribute it and/or modify
  5. # it under the terms of the GNU General Public License version 2 as
  6. # published by the Free Software Foundation.
  7. #
  8. # This program is distributed in the hope that it will be useful,
  9. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. # GNU General Public License for more details.
  12. #
  13. # Copyright (C) 2016 Eric Luehrsen
  14. #
  15. ##############################################################################
  16. #
  17. # This script facilitates alternate installation of Unbound+odhcpd and no
  18. # need for dnsmasq. There are some limitations, but it works and is small.
  19. # The lease file is parsed to make "zone-data:" and "local-data:" entries.
  20. #
  21. # config odhcpd 'odhcpd'
  22. # option leasetrigger '/usr/lib/unbound/odhcpd.sh'
  23. #
  24. ##############################################################################
  25. . /lib/functions.sh
  26. . /usr/lib/unbound/defaults.sh
  27. ##############################################################################
  28. odhcpd_zonedata() {
  29. local longconf dateconf
  30. local dns_ls_add=$UB_VARDIR/dhcp_dns.add
  31. local dns_ls_del=$UB_VARDIR/dhcp_dns.del
  32. local dhcp_ls_new=$UB_VARDIR/dhcp_lease.new
  33. local dhcp_ls_old=$UB_VARDIR/dhcp_lease.old
  34. local dhcp_ls_add=$UB_VARDIR/dhcp_lease.add
  35. local dhcp_ls_del=$UB_VARDIR/dhcp_lease.del
  36. local dhcp_link=$( uci_get unbound.@unbound[0].dhcp_link )
  37. local dhcp4_slaac6=$( uci_get unbound.@unbound[0].dhcp4_slaac6 )
  38. local dhcp_domain=$( uci_get unbound.@unbound[0].domain )
  39. local dhcp_origin=$( uci_get dhcp.@odhcpd[0].leasefile )
  40. if [ -f "$UB_TOTAL_CONF" -a -f "$dhcp_origin" \
  41. -a "$dhcp_link" = "odhcpd" -a -n "$dhcp_domain" ] ; then
  42. # Capture the lease file which could be changing often
  43. sort $dhcp_origin > $dhcp_ls_new
  44. if [ ! -f $UB_DHCP_CONF -o ! -f $dhcp_ls_old ] ; then
  45. longconf=2
  46. else
  47. dateconf=$(( $( date +%s ) - $( date -r $UB_DHCP_CONF +%s ) ))
  48. if [ $dateconf > 150 ] ; then
  49. longconf=1
  50. else
  51. longconf=0
  52. fi
  53. fi
  54. if [ $longconf -gt 0 ] ; then
  55. # Go through the messy business of coding up A, AAAA, and PTR records
  56. # This static conf will be available if Unbound restarts asynchronously
  57. awk -v hostfile=$UB_DHCP_CONF -v domain=$dhcp_domain \
  58. -v bslaac=$dhcp4_slaac6 -v bisolt=0 -v bconf=1 \
  59. -f /usr/lib/unbound/odhcpd.awk $dhcp_ls_new
  60. fi
  61. if [ $longconf -lt 2 ] ; then
  62. # Deleting and adding all records into Unbound can be a burden in a
  63. # high density environment. Use unbound-control incrementally.
  64. sort $dhcp_ls_old $dhcp_ls_new $dhcp_ls_new | uniq -u > $dhcp_ls_del
  65. awk -v hostfile=$dns_ls_del -v domain=$dhcp_domain \
  66. -v bslaac=$dhcp4_slaac6 -v bisolt=0 -v bconf=0 \
  67. -f /usr/lib/unbound/odhcpd.awk $dhcp_ls_del
  68. sort $dhcp_ls_new $dhcp_ls_old $dhcp_ls_old | uniq -u > $dhcp_ls_add
  69. awk -v hostfile=$dns_ls_add -v domain=$dhcp_domain \
  70. -v bslaac=$dhcp4_slaac6 -v bisolt=0 -v bconf=0 \
  71. -f /usr/lib/unbound/odhcpd.awk $dhcp_ls_add
  72. else
  73. awk -v hostfile=$dns_ls_add -v domain=$dhcp_domain \
  74. -v bslaac=$dhcp4_slaac6 -v bisolt=0 -v bconf=0 \
  75. -f /usr/lib/unbound/odhcpd.awk $dhcp_ls_new
  76. fi
  77. if [ -f "$dns_ls_del" ] ; then
  78. cat $dns_ls_del | $UB_CONTROL_CFG local_datas_remove
  79. fi
  80. if [ -f "$dns_ls_add" ] ; then
  81. cat $dns_ls_add | $UB_CONTROL_CFG local_datas
  82. fi
  83. # prepare next round
  84. mv $dhcp_ls_new $dhcp_ls_old
  85. rm -f $dns_ls_del $dns_ls_add $dhcp_ls_del $dhcp_ls_add
  86. fi
  87. }
  88. ##############################################################################
  89. odhcpd_zonedata
  90. ##############################################################################