AlaK4X
Linux lhjmq-records 5.15.0-118-generic #128-Ubuntu SMP Fri Jul 5 09:28:59 UTC 2024 x86_64



Your IP : 52.15.173.197


Current Path : /snap/core20/current/etc/dhcp/dhclient-enter-hooks.d/
Upload File :
Current File : //snap/core20/current/etc/dhcp/dhclient-enter-hooks.d/resolved

#
# Script fragment to make dhclient supply nameserver information to resolvconf
#

# Tips:
# * Be careful about changing the environment since this is sourced
# * This script fragment uses bash features
# * As of isc-dhcp-client 4.2 the "reason" (for running the script) can be one of the following.
#   (Listed on man page:) MEDIUM(0) PREINIT(0)  BOUND(M)  RENEW(M)  REBIND(M)  REBOOT(M)         EXPIRE(D)  FAIL(D) RELEASE(D)  STOP(D) NBI(-) TIMEOUT(M)
#   (Also used in master script:)                                                                                                                         ARPCHECK(0), ARPSEND(0)
#   (Also used in master script:)   PREINIT6(0) BOUND6(M) RENEW6(M) REBIND6(M)        DEPREF6(0) EXPIRE6(D)         RELEASE6(D) STOP6(D)
#   (0) = master script does not run make_resolv_conf
#   (M) = master script runs make_resolv_conf
#   (D) = master script downs interface
#   (-) = master script does nothing with this

if systemctl is-enabled systemd-resolved > /dev/null 2>&1; then
        # For safety, first undefine the nasty default make_resolv_conf()
        make_resolv_conf() { : ; }
        case "$reason" in
          BOUND|RENEW|REBIND|REBOOT|TIMEOUT|BOUND6|RENEW6|REBIND6)
                # Define a resolvconf-compatible m_r_c() function
                # It gets run later (or, in the TIMEOUT case, MAY get run later)
          make_resolv_conf() {
              local statedir
              if [ ! "$interface" ] ; then
                  return
              fi
              statedir="/run/systemd/resolved.conf.d"
              mkdir -p $statedir

              oldstate="$(mktemp)"
              md5sum $statedir/isc-dhcp-v4-$interface.conf $statedir/isc-dhcp-v6-$interface.conf > $oldstate 2> /dev/null
              if [ -n "$new_domain_name_servers" ] ; then
                  cat <<EOF >$statedir/isc-dhcp-v4-$interface.conf
[Resolve]
DNS=$new_domain_name_servers
EOF
                  if [ -n "$new_domain_name" ] || [ -n "$new_domain_search" ] ; then
                      cat <<EOF >>$statedir/isc-dhcp-v4-$interface.conf
Domains=$new_domain_search $new_domain_name
EOF
                  fi
              fi
              if [ -n "$new_dhcp6_name_servers" ] ; then
                  cat <<EOF >$statedir/isc-dhcp-v6-$interface.conf
[Resolve]
DNS=$new_dhcp6_name_servers
EOF
                  if [ -n "$new_dhcp6_domain_search" ] ; then
                      cat <<EOF >>$statedir/isc-dhcp-v6-$interface.conf
Domains=$new_dhcp6_domain_search
EOF
                  fi
              fi

              newstate="$(mktemp)"
              md5sum $statedir/isc-dhcp-v4-$interface.conf $statedir/isc-dhcp-v6-$interface.conf > $newstate 2> /dev/null
              if ! cmp --quiet $oldstate $newstate; then
                  # We need to reset-failed to reset the start limit counter,
                  # in case we're processing more than StartLimitBurst interfaces
                  # LP: #1939255
                  systemctl reset-failed systemd-resolved.service
                  systemctl try-reload-or-restart systemd-resolved.service
              fi

              rm $oldstate
              rm $newstate
          }
                ;;

          EXPIRE|FAIL|RELEASE|STOP)
              if [ ! "$interface" ] ; then
                  return
              fi
              rm -f /run/systemd/resolved.conf.d/isc-dhcp-v4-$interface.conf
              systemctl try-reload-or-restart systemd-resolved.service
              ;;
          EXPIRE6|RELEASE6|STOP6)
              if [ ! "$interface" ] ; then
                  return
              fi
              rm -f /run/systemd/resolved.conf.d/isc-dhcp-v6-$interface.conf
              systemctl try-reload-or-restart systemd-resolved.service
              ;;
        esac
fi