#!/bin/sh # ### BEGIN INIT INFO # Provides: resolvconf # Required-Start: $local_fs # Required-Stop: $local_fs # X-Start-Before: networking ifupdown # Default-Start: S # Default-Stop: 0 6 # Short-Description: Nameserver information manager # Description: This service manages the list of nameserver addresses # used by the libc resolver and name service caches ### END INIT INFO # # This file is part of the resolvconf package. # # We really need "X-Stop-Before: networking ifupdown" too because # terminal ifdowns shouldn't update resolv.conf; # however there is unfortunately no such thing as "X-Stop-Before". # # This file is not used in Ubuntu. # # Don't use set -e; check return status instead. test -x /sbin/resolvconf || exit 0 setglobal PATH = '/sbin:/bin' setglobal RUN_DIR = '/run/resolvconf' setglobal ENABLE_UPDATES_FLAGFILE = ""$(RUN_DIR)/enable-updates"" setglobal POSTPONED_UPDATE_FLAGFILE = ""$(RUN_DIR)/postponed-update"" source /lib/lsb/init-functions # Abort if Upstart is in use, as per Policy ยง9.11.1. match $1 { with start|restart|force-reload init_is_upstart && exit 1 with stop init_is_upstart && exit 0 } # $1 EXITSTATUS # [$2 MESSAGE] proc log_action_end_msg_and_exit { log_action_end_msg $1 $(2:+"$2") exit $1 } proc create_runtime_directories { umask 022 if test ! -d $RUN_DIR { test -L $RUN_DIR || log_action_end_msg_and_exit 1 "$RUN_DIR is neither a directory nor a symbolic link" # It's a symlink. Its target is not a dir. do { setglobal RUN_CANONICALDIR = $[readlink -f $RUN_DIR] && test $RUN_CANONICALDIR ; } || log_action_end_msg_and_exit 1 "Canonical path of the run directory could not be determined" # Create directory at the target mkdir $RUN_CANONICALDIR || log_action_end_msg_and_exit 1 "Error creating directory $RUN_CANONICALDIR" } # The resolvconf run directory now exists. if test ! -d "$(RUN_DIR)/interface" { mkdir "$(RUN_DIR)/interface" || log_action_end_msg_and_exit 1 "Error creating directory $(RUN_DIR)/interface" } # The interface directory now exists. We are done. return } proc wipe_runtime_directories { # Delete files in the resolvconf run directory (target) but not the directory itself test -d $RUN_DIR || return rm -f "$RUN_DIR"/resolv.conf rm -f $ENABLE_UPDATES_FLAGFILE rm -f $POSTPONED_UPDATE_FLAGFILE rm -rf "$(RUN_DIR)/interface/*" return } match $1 { with start # The "start" method should only be used at boot time. # Don't run this on package upgrade, for example. log_action_begin_msg "Setting up resolvconf" # Wipe runtime directories in case they aren't on a tmpfs wipe_runtime_directories # Create runtime directories in case they are on a tmpfs create_runtime_directories # Request a postponed update (needed in case the base file has content). :> $POSTPONED_UPDATE_FLAGFILE || log_action_end_msg_and_exit 1 "failed requesting update" # Enable updates and perform the postponed update. resolvconf --enable-updates || log_action_end_msg_and_exit 1 "failed to enable updates" log_action_end_msg_and_exit 0 with stop # The "stop" method should only be used at shutdown time. log_action_begin_msg "Stopping resolvconf" resolvconf --disable-updates || log_action_end_msg_and_exit 1 "failed to disable updates" log_action_end_msg_and_exit 0 with restart log_action_begin_msg "Restarting resolvconf" resolvconf --enable-updates || log_action_end_msg_and_exit 1 "failed to enable updates" log_action_end_msg_and_exit 0 with reload|force-reload resolvconf -u || log_action_end_msg_and_exit 1 "failed to update" exit 0 with enable-updates resolvconf --enable-updates || log_action_end_msg_and_exit 1 "failed to enable updates" exit 0 with disable-updates resolvconf --disable-updates || log_action_end_msg_and_exit 1 "failed to disable updates" exit 0 with status if resolvconf --updates-are-enabled { log_success_msg "resolvconf updates are enabled" } else { log_failure_msg "resolvconf updates are disabled" } exit 0 with * echo "Usage: /etc/init.d/resolvconf {start|stop|restart|reload|force-reload|enable-updates|disable-updates|status}" > !2 exit 3 } # Don't reach here exit 99