Skip to content

Commit 9de2d15

Browse files
committed
removing ifconfig for RHEL7 support
1 parent 1ef0360 commit 9de2d15

File tree

5 files changed

+107
-49
lines changed

5 files changed

+107
-49
lines changed

bin/v-add-sys-ip

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/bin/bash
22
# info: add system ip address
3-
# options: IP MASK [INTERFACE] [USER] [IP_STATUS] [IP_NAME] [NAT_IP]
3+
# options: IP NETMASK [INTERFACE] [USER] [STATUS] [NAME] [NAT_IP]
44
#
55
# The function adds ip address into a system. It also creates rc scripts. You
66
# can specify ip name which will be used as root domain for temporary aliases.
@@ -16,7 +16,7 @@
1616

1717
# Argument defenition
1818
ip=${1// /}
19-
mask=$2
19+
netmask=$2
2020
interface="${3-eth0}"
2121
user="${4-admin}"
2222
ip_status="${5-shared}"
@@ -34,8 +34,8 @@ source $VESTA/conf/vesta.conf
3434
# Verifications #
3535
#----------------------------------------------------------#
3636

37-
check_args '2' "$#" 'IP MASK [INTERFACE] [USER] [IP_STATUS] [IP_NAME] [NAT_IP]'
38-
validate_format 'ip' 'mask' 'interface' 'user' 'ip_status'
37+
check_args '2' "$#" 'IP NETMASK [INTERFACE] [USER] [STATUS] [NAME] [NAT_IP]'
38+
validate_format 'ip' 'netmask' 'interface' 'user' 'ip_status'
3939
is_ip_free
4040
is_object_valid 'user' 'USER' "$user"
4141
is_object_unsuspended 'user' 'USER' "$user"
@@ -50,11 +50,18 @@ fi
5050
#----------------------------------------------------------#
5151
# Action #
5252
#----------------------------------------------------------#
53-
get_ip_iface
54-
sys_ip_check=$(/sbin/ifconfig | grep "addr:$ip ")
53+
54+
# Converting netmask to CIDR format and calculating broadcast address
55+
cidr=$(convert_netmask $netmask)
56+
broadcast=$(get_broadcast $ip $netmask)
57+
iface=$(get_ip_iface)
58+
59+
sys_ip_check=$(/sbin/ip addr | grep "$ip/$cidr")
5560
if [ -z "$sys_ip_check" ]; then
56-
# Adding sys ip
57-
/sbin/ifconfig "$iface" "$ip" netmask "$mask"
61+
62+
# Adding system ip
63+
/sbin/ip addr add $ip/$cidr broadcast $broadcast \
64+
dev $interface label $iface
5865

5966
# Adding RHEL/CentOS/Fedora startup script
6067
if [ -e "/etc/redhat-release" ]; then
@@ -63,7 +70,7 @@ if [ -z "$sys_ip_check" ]; then
6370
sys_ip="$sys_ip\nBOOTPROTO=static"
6471
sys_ip="$sys_ip\nONBOOT=yes"
6572
sys_ip="$sys_ip\nIPADDR=$ip"
66-
sys_ip="$sys_ip\nNETMASK=$mask"
73+
sys_ip="$sys_ip\nNETMASK=$netmask"
6774
echo -e $sys_ip > /etc/sysconfig/network-scripts/ifcfg-$iface
6875
fi
6976

@@ -73,7 +80,7 @@ if [ -z "$sys_ip_check" ]; then
7380
sys_ip="$sys_ip\nauto $iface"
7481
sys_ip="$sys_ip\niface $iface inet static"
7582
sys_ip="$sys_ip\naddress $ip"
76-
sys_ip="$sys_ip\nnetmask $mask"
83+
sys_ip="$sys_ip\nnetmask $netmask"
7784
echo -e $sys_ip >> /etc/network/interfaces
7885
fi
7986
fi
@@ -85,7 +92,7 @@ NAME='$ip_name'
8592
U_SYS_USERS=''
8693
U_WEB_DOMAINS='0'
8794
INTERFACE='$interface'
88-
NETMASK='$mask'
95+
NETMASK='$netmask'
8996
NAT='$nat_ip'
9097
TIME='$TIME'
9198
DATE='$DATE'" > $VESTA/data/ips/$ip

bin/v-delete-sys-ip

Lines changed: 30 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -35,33 +35,40 @@ is_ip_key_empty '$U_SYS_USERS'
3535
# Action #
3636
#----------------------------------------------------------#
3737

38-
# Get ip owner
39-
user="$(get_ip_value '$OWNER')"
40-
ip_status="$(get_ip_value '$STATUS')"
38+
# Import ip variables
39+
source $VESTA/data/ips/$ip
40+
cidr=$(convert_netmask $NETMASK)
4141

42-
# Deleting interface
43-
interface=$(/sbin/ifconfig | grep -B1 "dr:$ip " | head -n1 | cut -f1 -d \ )
42+
# Checking main ip on the interface
43+
interface=$(/sbin/ip addr | grep "$ip/$cidr" | awk '{print $NF}')
4444
if [ ! -z "$interface" ] && [ -z "$(echo $interface |cut -s -f2 -d :)" ]; then
4545
echo "Error: can't delete main IP address"
4646
log_event "$E_FORBIDEN" "$EVENT"
4747
exit $E_FORBIDEN
4848
fi
49-
if [ ! -z "$interface" ]; then
50-
/sbin/ifconfig $interface down
5149

52-
# Deleting startup conf on RHEL/CentOS/Fedora
53-
if [ -e "/etc/sysconfig/network-scripts/ifcfg-$interface" ]; then
54-
rm -f /etc/sysconfig/network-scripts/ifcfg-$interface
50+
# Deleting system ip
51+
if [ ! -z "$interface" ]; then
52+
/sbin/ip addr del $ip/$cidr dev $INTERFACE
53+
if [ "$?" -ne 0 ]; then
54+
echo "Error: can't delete system ip"
55+
log_event "$E_FORBIDEN" "$EVENT"
56+
exit $E_FORBIDEN
5557
fi
58+
fi
5659

57-
# Deleting startup conf on Debian/Ubuntu
58-
if [ -e "/etc/network/interfaces" ]; then
59-
ip_str=$(grep -n $ip$ /etc/network/interfaces |cut -f1 -d:)
60-
if [ ! -z "$ip_str" ]; then
61-
first_str=$((ip_str - 3))
62-
last_str=$((ip_str + 1))
63-
sed -i "$first_str,$last_str d" /etc/network/interfaces
64-
fi
60+
# Deleting startup conf on RHEL/CentOS/Fedora
61+
if [ -e "/etc/sysconfig/network-scripts/ifcfg-$interface" ]; then
62+
rm -f /etc/sysconfig/network-scripts/ifcfg-$interface
63+
fi
64+
65+
# Deleting startup conf on Debian/Ubuntu
66+
if [ -e "/etc/network/interfaces" ]; then
67+
ip_str=$(grep -n $ip$ /etc/network/interfaces |cut -f1 -d:)
68+
if [ ! -z "$ip_str" ]; then
69+
first_str=$((ip_str - 3))
70+
last_str=$((ip_str + 1))
71+
sed -i "$first_str,$last_str d" /etc/network/interfaces
6572
fi
6673
fi
6774

@@ -92,7 +99,6 @@ if [ ! -z "$PROXY_SYSTEM" ]; then
9299
new_ips=$(echo "$rpaf_str" | sed "s/$ip//")
93100
sed -i "s/$ips/$new_ips/g" $rpaf_conf
94101
fi
95-
96102
fi
97103

98104

@@ -101,24 +107,20 @@ fi
101107
#----------------------------------------------------------#
102108

103109
# Updating user conf
104-
if [ ! -z "$user" ]; then
105-
decrease_user_value "$user" '$IP_OWNED'
110+
if [ ! -z "$OWNER" ]; then
111+
decrease_user_value "$OWNER" '$IP_OWNED'
106112
fi
107113

108-
if [ "$user" = 'admin' ]; then
109-
if [ "$ip_status" = 'shared' ]; then
114+
if [ "$OWNER" = 'admin' ]; then
115+
if [ "$STATUS" = 'shared' ]; then
110116
for user in $(ls $VESTA/data/users/); do
111117
decrease_user_value "$user" '$IP_AVAIL'
112118
done
113-
else
114-
decrease_user_value 'admin' '$IP_AVAIL'
115119
fi
116120
else
117-
decrease_user_value "$user" '$IP_AVAIL'
118-
decrease_user_value 'admin' '$IP_AVAIL'
121+
decrease_user_value "$OWNER" '$IP_AVAIL'
119122
fi
120123

121-
122124
# Adding task to the vesta pipe
123125
$BIN/v-restart-web
124126
if [ $? -ne 0 ]; then

bin/v-update-sys-ip

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ ip_status=${2-shared}
1818
# Includes
1919
source /etc/profile.d/vesta.sh
2020
source $VESTA/func/main.sh
21+
source $VESTA/func/ip.sh
2122
source $VESTA/conf/vesta.conf
2223

2324

@@ -35,8 +36,8 @@ is_object_valid 'user' 'USER' "$user" "$user"
3536
#----------------------------------------------------------#
3637

3738
# Get list of ip addresses
38-
ip_list=$(/sbin/ifconfig | grep 'inet addr:' | cut -f 2 -d : | \
39-
cut -f 1 -d ' '| grep -v 127.0.0.1 | grep -v "^0.0.0.")
39+
ip_list=$(/sbin/ip addr |grep "inet "|grep -v "host lo" |awk '{print $2}')
40+
ip_list=$(echo "$ip_list"|cut -f 1 -d /)
4041
ip_num=$(echo "$ip_list" | wc -l)
4142

4243
# WorkAround for DHCP IP address
@@ -88,10 +89,11 @@ fi
8889
# Compare ips
8990
for ip in $ip_list; do
9091
if [ ! -e "$VESTA/data/ips/$ip" ]; then
91-
iface=$(/sbin/ifconfig |grep -B1 -w $ip |head -n1 |cut -f1 -d ' ')
92-
interface=$(echo "$iface" | cut -f 1 -d :)
93-
mask=$(/sbin/ifconfig |grep -w $ip |awk -F "Mask:" '{print $2}')
94-
$BIN/v-add-sys-ip $ip $mask $interface
92+
interface=$(/sbin/ip addr |grep $ip |awk '{print $NF}')
93+
interface=$(echo $interface |cut -f 1 -d :)
94+
netmask=$(/sbin/ip addr |grep $ip |awk '{print $2}' |cut -f 2 -d /)
95+
netmask=$(convert_cidr $netmask)
96+
$BIN/v-add-sys-ip $ip $netmask $interface
9597
fi
9698
done
9799

func/ip.sh

Lines changed: 50 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,14 +54,14 @@ is_ip_free() {
5454

5555
# Get full interface name
5656
get_ip_iface() {
57-
i=$(/sbin/ifconfig -a |grep -w "$interface"|cut -f1 -d ' '|\
58-
tail -n 1|cut -f 2 -d :)
57+
i=$(/sbin/ip addr | grep -w $interface |\
58+
awk '{print $NF}' | tail -n 1 | cut -f 2 -d :)
5959
if [ "$i" = "$interface" ]; then
6060
n=0
6161
else
6262
n=$((i + 1))
6363
fi
64-
iface="$interface:$n"
64+
echo "$interface:$n"
6565
}
6666

6767

@@ -201,3 +201,50 @@ get_user_ip(){
201201
fi
202202
echo "$ip"
203203
}
204+
205+
# Convert CIDR to netmask
206+
convert_cidr() {
207+
set -- $(( 5 - ($1 / 8) )) 255 255 255 255 \
208+
$(((255 << (8 - ($1 % 8))) & 255 )) 0 0 0
209+
if [[ $1 -gt 1 ]]; then
210+
shift $1
211+
else
212+
shift
213+
fi
214+
echo ${1-0}.${2-0}.${3-0}.${4-0}
215+
}
216+
217+
# Convert netmask to CIDR
218+
convert_netmask() {
219+
nbits=0
220+
IFS=.
221+
for dec in $1 ; do
222+
case $dec in
223+
255) let nbits+=8;;
224+
254) let nbits+=7;;
225+
252) let nbits+=6;;
226+
248) let nbits+=5;;
227+
240) let nbits+=4;;
228+
224) let nbits+=3;;
229+
192) let nbits+=2;;
230+
128) let nbits+=1;;
231+
0);;
232+
esac
233+
done
234+
echo "$nbits"
235+
}
236+
237+
# Calculate broadcast address
238+
get_broadcast() {
239+
OLD_IFS=$IFS
240+
IFS=.
241+
typeset -a I=($1)
242+
typeset -a N=($2)
243+
IFS=$OLD_IFS
244+
245+
echo "$((${I[0]} |\
246+
(255 ^ ${N[0]}))).$((${I[1]} |\
247+
(255 ^ ${N[1]}))).$((${I[2]} |\
248+
(255 ^ ${N[2]}))).$((${I[3]} |\
249+
(255 ^ ${N[3]})))"
250+
}

func/main.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -905,11 +905,11 @@ validate_format(){
905905
key) validate_format_username "$arg" "$arg_name" ;;
906906
lname) validate_format_name_s "$arg" "$arg_name" ;;
907907
malias) validate_format_username "$arg" "$arg_name" ;;
908-
mask) validate_format_ip "$arg" ;;
909908
max_db) validate_format_int "$arg" 'max db';;
910909
min) validate_format_mhdmw "$arg" $arg_name ;;
911910
month) validate_format_mhdmw "$arg" $arg_name ;;
912911
nat_ip) validate_format_ip "$arg" ;;
912+
netmask) validate_format_ip "$arg" ;;
913913
newid) validate_format_int "$arg" 'id' ;;
914914
ns1) validate_format_domain "$arg" 'name_server';;
915915
ns2) validate_format_domain "$arg" 'name_server';;

0 commit comments

Comments
 (0)