This file is indexed.

/etc/resolvconf/update.d/libc is in resolvconf 1.79.

This file is owned by root:root, with mode 0o755.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#!/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="${ETCRESOLVCONF}/run/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 ${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