blob: f8a91add3004383f1e206828b0b478404c74c888 (
plain)
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
|
#!/bin/bash
# Source the general functions for is_true() and is_false():
. /etc/init.d/functions
cd /etc/sysconfig/network-scripts
. ./network-functions
[ -f ../network ] && . ../network
unset REALDEVICE
if [ "$1" = --realdevice ] ; then
REALDEVICE=$2
shift 2
fi
CONFIG=$1
source_config
[ -z "$REALDEVICE" ] && REALDEVICE=$DEVICE
if is_false "$ISALIAS"; then
/etc/sysconfig/network-scripts/ifup-aliases ${DEVICE} ${CONFIG}
fi
if ! is_true "$NOROUTESET"; then
/etc/sysconfig/network-scripts/ifup-routes ${REALDEVICE} ${DEVNAME}
fi
if ! is_false "${PEERDNS}" || ! is_false "${RESOLV_MODS}"; then
# Obtain the DNS entries when using PPP if necessary:
[ -n "${MS_DNS1}" ] && DNS1="${MS_DNS1}"
[ -n "${MS_DNS2}" ] && DNS2="${MS_DNS2}"
# Remove duplicate DNS entries and shift them, if necessary:
update_DNS_entries
# Determine what regexp we should use (for testing below):
if [ -n "${DNS3}" ]; then
grep_regexp="[^#]?nameserver[[:space:]]+${DNS1}[^#]?nameserver[[:space:]]+${DNS2}[^#]?nameserver[[:space:]]+${DNS3}"
elif [ -n "${DNS2}" ]; then
grep_regexp="[^#]?nameserver[[:space:]]+${DNS1}[^#]?nameserver[[:space:]]+${DNS2}"
elif [ -n "${DNS1}" ]; then
grep_regexp="[^#]?nameserver[[:space:]]+${DNS1}"
else
# No DNS entries used at all ->> match everything.
grep_regexp=".*"
fi
# Test if the search field needs updating, or
# if the nameserver entries order should be updated:
if [ -n "${DOMAIN}" ] && ! grep -q "^search.*${DOMAIN}.*$" /etc/resolv.conf ||
! tr --delete '\n' < /etc/resolv.conf | grep -E -q "${grep_regexp}"; then
if tmp_file=$(mktemp); then
search_str=''
while read line; do
case ${line} in
# Skip nameserver entries when at least one DNS option was given
# (at this stage we know that we have to update all the nameserver
# enries anyway -- see below), or copy them if we are changing just
# the 'search' field in /etc/resolv.conf:
nameserver*)
if [[ "${grep_regexp}" != ".*" ]]; then
continue
else
echo "${line}" >> "${tmp_file}"
fi
;;
domain* | search*)
if [ -n "${DOMAIN}" ]; then
read search value < <(echo ${line})
search_str+=" ${value}"
else
echo "${line}" >> "${tmp_file}"
fi
;;
# Keep the rest of the /etc/resolv.conf as it was:
*)
echo "${line}" >> "${tmp_file}"
;;
esac
done < /etc/resolv.conf
# Insert the domain into 'search' field:
if [ -n "${DOMAIN}" ]; then
echo "search ${DOMAIN}${search_str}" >> "${tmp_file}"
fi
# Add the requested nameserver entries:
[ -n "${DNS1}" ] && echo "nameserver ${DNS1}" >> "${tmp_file}"
[ -n "${DNS2}" ] && echo "nameserver ${DNS2}" >> "${tmp_file}"
[ -n "${DNS3}" ] && echo "nameserver ${DNS3}" >> "${tmp_file}"
# Backup resolv.conf only if it doesn't exist already:
! [ -f /etc/resolv.conf.save ] && cp -af /etc/resolv.conf /etc/resolv.conf.save
# Maintain permissions, but set umask in case it doesn't exist:
umask_old=$(umask)
umask 022
# Update the resolv.conf:
change_resolv_conf "${tmp_file}"
rm -f "${tmp_file}"
umask ${umask_old}
unset tmp_file search_str umask_old
else
net_log $"/etc/resolv.conf was not updated: failed to create temporary file" 'err' 'ifup-post'
fi
fi
unset grep_regexp
fi
# don't set hostname on ppp/slip connections
if [ "$2" = "boot" -a \
"${DEVICE}" != lo -a \
"${DEVICETYPE}" != "ppp" -a \
"${DEVICETYPE}" != "slip" ]; then
if need_hostname; then
IPADDR=$(LANG=C ip -o -4 addr ls dev ${DEVICE} | awk '{ print $4 ; exit }')
eval $(/bin/ipcalc --silent --hostname ${IPADDR} ; echo "status=$?")
if [ "$status" = "0" ]; then
set_hostname $HOSTNAME
fi
fi
fi
# Set firewall ZONE for this device (empty means default):
if [ "${REALDEVICE}" != "lo" ]; then
dbus-send --system --dest=org.fedoraproject.FirewallD1 \
/org/fedoraproject/FirewallD1 \
org.fedoraproject.FirewallD1.zone.changeZoneOfInterface \
string:"${ZONE}" string:"${DEVICE}" \
> /dev/null 2>&1
fi
# Notify programs that have requested notification
do_netreport
if [ -x /sbin/ifup-local ]; then
/sbin/ifup-local ${DEVICE}
fi
exit 0
|