diff options
| -rw-r--r-- | python/vyos/kea.py | 4 | ||||
| -rwxr-xr-x | src/system/on-dhcp-event.sh | 32 | 
2 files changed, 34 insertions, 2 deletions
| diff --git a/python/vyos/kea.py b/python/vyos/kea.py index 2ca73044b..3d8cf3637 100644 --- a/python/vyos/kea.py +++ b/python/vyos/kea.py @@ -25,7 +25,7 @@ from vyos.template import netmask_from_cidr  from vyos.utils.dict import dict_search_args  from vyos.utils.file import file_permissions  from vyos.utils.file import read_file -from vyos.utils.process import cmd +from vyos.utils.process import run  kea4_options = {      'name_server': 'domain-name-servers', @@ -315,7 +315,7 @@ def _ctrl_socket_command(path, command, args=None):          return None      if file_permissions(path) != '0775': -        cmd(f'sudo chmod 775 {path}') +        run(f'sudo chmod 775 {path}')      with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as sock:          sock.connect(path) diff --git a/src/system/on-dhcp-event.sh b/src/system/on-dhcp-event.sh index 3534fe601..e1a9f1884 100755 --- a/src/system/on-dhcp-event.sh +++ b/src/system/on-dhcp-event.sh @@ -17,6 +17,32 @@ fi  action=$1  hostsd_client="/usr/bin/vyos-hostsd-client" +get_subnet_domain_name () { +  python3 <<EOF +from vyos.kea import kea_get_active_config +from vyos.utils.dict import dict_search_args + +config = kea_get_active_config('4') +shared_networks = dict_search_args(config, 'arguments', f'Dhcp4', 'shared-networks') + +found = False + +if shared_networks: +  for network in shared_networks: +    for subnet in network[f'subnet4']: +      if subnet['id'] == $1: +        for option in subnet['option-data']: +          if option['name'] == 'domain-name': +            print(option['data']) +            found = True + +        if not found: +          for option in network['option-data']: +            if option['name'] == 'domain-name': +              print(option['data']) +EOF +} +  case "$action" in    lease4_renew|lease4_recover)      exit 0 @@ -45,6 +71,12 @@ case "$action" in            client_name=$(echo "host-$client_mac" | tr : -)        fi +      client_domain=$(get_subnet_domain_name $client_subnet_id) + +      if [ -n "$client_domain" ]; then +        client_name="$client_name.$client_domain" +      fi +        $hostsd_client --add-hosts "$client_name,$client_ip" --tag "dhcp-server-$client_ip" --apply      done | 
