Server IP : 127.0.0.2 / Your IP : 3.15.158.134 Web Server : Apache/2.4.18 (Ubuntu) System : User : www-data ( ) PHP Version : 7.0.33-0ubuntu0.16.04.16 Disable Function : disk_free_space,disk_total_space,diskfreespace,dl,exec,fpaththru,getmyuid,getmypid,highlight_file,ignore_user_abord,leak,listen,link,opcache_get_configuration,opcache_get_status,passthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,php_uname,phpinfo,posix_ctermid,posix_getcwd,posix_getegid,posix_geteuid,posix_getgid,posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid,posix,_getppid,posix_getpwnam,posix_getpwuid,posix_getrlimit,posix_getsid,posix_getuid,posix_isatty,posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid,posix_setpgid,posix_setsid,posix_setuid,posix_times,posix_ttyname,posix_uname,pclose,popen,proc_open,proc_close,proc_get_status,proc_nice,proc_terminate,shell_exec,source,show_source,system,virtual MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /etc/resolvconf/update.d/ |
Upload File : |
#!/bin/sh # # Script to update resolv.conf, the libc resolver configuration file, # and to notify users of the libc resolver of changes # # Assumption: On entry, PWD contains the resolv.conf-type files. # # This script is part of the resolvconf package. # # Set REPORT_ABSENT_SYMLINK=no to inhibit warning message that # /etc/resolv.conf is not a symbolic link # # Set TRUNCATE_NAMESERVER_LIST_AFTER_LOOPBACK_ADDRESS=no # to allow additional nameserver addresses to be listed in # resolv.conf after an initial loopback address 127.* or ::1. # set -e PATH=/sbin:/bin [ -x /lib/resolvconf/list-records ] || exit 1 # Default override [ -r /etc/default/resolvconf ] && . /etc/default/resolvconf ETC=/etc ETCRESOLVCONF="${ETC}/resolvconf" RESOLVCONFDIR="${ETCRESOLVCONF}/resolv.conf.d" BASEFILE="${RESOLVCONFDIR}/base" HEADFILE="${RESOLVCONFDIR}/head" TAILFILE="${RESOLVCONFDIR}/tail" DYNAMICRSLVCNFFILE="/run/resolvconf/resolv.conf" TMPFILE="${DYNAMICRSLVCNFFILE}_new.$$" # Set unset variables to their defaults if [ -z "$REPORT_ABSENT_SYMLINK" ] ; then # '..._ALTERED_...' is the old deprecated name for this variable if [ "$REPORT_ALTERED_SYMLINK" ] ; then REPORT_ABSENT_SYMLINK="$REPORT_ALTERED_SYMLINK" else # Set to default value REPORT_ABSENT_SYMLINK=y fi fi if [ -z "$TRUNCATE_NAMESERVER_LIST_AFTER_LOOPBACK_ADDRESS" ] ; then # '..._127' is the old deprecated name for this variable if [ "$TRUNCATE_NAMESERVER_LIST_AFTER_127" ] ; then TRUNCATE_NAMESERVER_LIST_AFTER_LOOPBACK_ADDRESS="$TRUNCATE_NAMESERVER_LIST_AFTER_127" else # Set to default value TRUNCATE_NAMESERVER_LIST_AFTER_LOOPBACK_ADDRESS=y fi fi report_warning() { echo "$0: Warning: $*" >&2 ; } resolv_conf_is_symlinked_to_dynamic_file() { [ -L ${ETC}/resolv.conf ] && [ "$(readlink -m ${ETC}/resolv.conf)" = "$DYNAMICRSLVCNFFILE" ] } if ! resolv_conf_is_symlinked_to_dynamic_file ; then case "$REPORT_ABSENT_SYMLINK" in y|Y|yes|YES|Yes) report_warning "${ETC}/resolv.conf is not a symbolic link to $DYNAMICRSLVCNFFILE" ;; esac fi # Args are candidate items not containing spaces # Returns RSLT -- space-separated list of items without duplicates # # Stores arguments (minus duplicates) in RSLT, separated by spaces uniquify() { RSLT="" local D while [ "$1" ] ; do # Remove the root domain suffix D="${1%.}" for E in $RSLT ; do [ "$D" = "$E" ] && { shift ; continue 2 ; } done RSLT="${RSLT:+$RSLT }$D" shift done } # Args are candidate items not containing spaces # Returns NSMSRVS -- space-separate list of no more than 3 items, # without duplicates, # truncated after loopback address if TRUNCATE_NAMESERVER_LIST_AFTER_LOOPBACK_ADDRESS set affirmatively uniquify_nameserver_list() { NMSRVRS="" N=0 while [ "$1" ] ; do for E in $NMSRVRS ; do [ "$1" = "$E" ] && { shift ; continue 2 ; } done NMSRVRS="${NMSRVRS:+$NMSRVRS }$1" case "$TRUNCATE_NAMESERVER_LIST_AFTER_LOOPBACK_ADDRESS" in (y|Y|yes|YES|Yes) case "$1" in (127.*|::1) return 0 ;; esac ;; esac N=$(($N + 1)) [ "$N" = 3 ] && return 0 shift done } RSLVCNFFILES="$(/lib/resolvconf/list-records)" [ -f "$BASEFILE" ] && RSLVCNFFILES="$RSLVCNFFILES $BASEFILE" ### Compile list of nameservers ### NMSRVRS="" if [ "$RSLVCNFFILES" ] ; then uniquify_nameserver_list $(sed -n 's/^[[:space:]]*nameserver[[:space:]]\+//p' $RSLVCNFFILES) fi ### Compile search list ### SRCHS="" if [ "$RSLVCNFFILES" ] ; then uniquify $(sed -n 's/^[[:space:]]*\(\(search\)\|\(domain\)\)[[:space:]]\+//p' $RSLVCNFFILES) SRCHS="$RSLT" fi clean_up() { rm -f "$TMPFILE" ; } trap clean_up EXIT clean_up ### Make the file ### : > "$TMPFILE" [ -f "$HEADFILE" ] && cat "$HEADFILE" >> "$TMPFILE" for N in $NMSRVRS ; do echo "nameserver $N" >> "$TMPFILE" ; done [ "$SRCHS" ] && echo "search $SRCHS" >> "$TMPFILE" [ "$RSLVCNFFILES" ] && sed -e '/^[[:space:]]*$/d' -e '/^[[:space:]]*#/d' -e '/^[[:space:]]*\(\(nameserver\)\|\(search\)\|\(domain\)\)[[:space:]]/d' $RSLVCNFFILES >> "$TMPFILE" 2>/dev/null [ -f "$TAILFILE" ] && cat "$TAILFILE" >> "$TMPFILE" ### Put the file in place ### if [ -f "$DYNAMICRSLVCNFFILE" ] && [ "$(cat $TMPFILE)" = "$(cat $DYNAMICRSLVCNFFILE)" ] ; then # The file has not changed rm -f "$TMPFILE" exit 0 fi # The file has changed mv -f "$TMPFILE" "$DYNAMICRSLVCNFFILE" # Only notify users of /etc/resolv.conf if /etc/resolv.conf is actually # symlinked to the file we have just updated. resolv_conf_is_symlinked_to_dynamic_file || exit 0 # Notify users of the resolver if [ -d "${ETCRESOLVCONF}/update-libc.d" ] ; then exec run-parts "${ETCRESOLVCONF}/update-libc.d" fi exit 0