Files
VestaCP/func/ip.sh

255 lines
6.5 KiB
Bash
Raw Normal View History

2012-03-29 01:08:43 +03:00
# Validationg ip address
is_ip_valid() {
2013-03-27 01:16:14 +02:00
userip=${1-$ip}
check_nat=$(grep -H "^NAT='$userip'" $VESTA/data/ips/* 2>/dev/null)
if [ ! -e "$VESTA/data/ips/$userip" ] && [ -z "$check_nat" ] ; then
echo "Error: IP $userip not exist"
2012-03-29 01:08:43 +03:00
log_event "$E_NOTEXIST" "$EVENT"
exit $E_NOTEXIST
fi
}
# Check if ip availabile for user
is_ip_avalable() {
2013-03-27 01:16:14 +02:00
userip=${1-$ip}
if [ -e "$VESTA/data/ips/$userip" ]; then
ip_data=$(cat $VESTA/data/ips/$userip)
2013-02-05 22:58:40 +02:00
else
2013-03-27 01:16:14 +02:00
nated_ip=$(grep -H "^NAT='$userip'" $VESTA/data/ips/* 2>/dev/null)
2013-02-05 22:58:40 +02:00
nated_ip=$(echo "$nated_ip" | cut -f 1 -d : | cut -f 7 -d /)
ip_data=$(cat $VESTA/data/ips/$nated_ip)
fi
2012-03-29 01:08:43 +03:00
owner=$(echo "$ip_data"|grep OWNER= | cut -f 2 -d \')
2012-07-01 01:10:56 +03:00
status=$(echo "$ip_data"|grep STATUS= | cut -f 2 -d \')
2012-03-29 01:08:43 +03:00
shared=no
if [ 'admin' = "$owner" ] && [ "$status" = 'shared' ]; then
shared='yes'
fi
if [ "$owner" != "$user" ] && [ "$shared" != 'yes' ]; then
2013-03-27 01:16:14 +02:00
echo "Error: User $user don't have permission to use $userip"
2012-03-29 01:08:43 +03:00
log_event "$E_FORBIDEN" "$EVENT"
exit $E_FORBIDEN
fi
}
# Check ip ownership
2012-03-31 22:55:50 +03:00
is_ip_owner() {
2012-03-29 01:08:43 +03:00
# Parsing ip
owner=$(grep 'OWNER=' $VESTA/data/ips/$IP|cut -f 2 -d \')
if [ "$owner" != "$user" ]; then
echo "Error: IP $IP not owned"
log_event "$E_FORBIDEN" "$EVENT"
exit $E_FORBIDEN
fi
}
2012-03-31 22:55:50 +03:00
# Check if ip address is free
is_ip_free() {
2013-05-10 11:04:40 +03:00
if [ -e "$VESTA/data/ips/$ip" ]; then
2011-06-14 00:22:25 +03:00
echo "Error: IP exist"
2012-03-31 22:55:50 +03:00
log_event "$E_EXISTS" "$EVENT"
2011-12-18 22:39:29 +02:00
exit $E_EXISTS
2011-06-14 00:22:25 +03:00
fi
}
2012-03-31 22:55:50 +03:00
# Get full interface name
get_ip_iface() {
2014-12-12 01:47:56 +02:00
i=$(/sbin/ip addr | grep -w $interface |\
awk '{print $NF}' | tail -n 1 | cut -f 2 -d :)
2011-06-14 00:22:25 +03:00
if [ "$i" = "$interface" ]; then
n=0
else
n=$((i + 1))
fi
2014-12-12 01:47:56 +02:00
echo "$interface:$n"
2011-06-14 00:22:25 +03:00
}
2012-03-31 22:55:50 +03:00
# Check ip address speciefic value
2011-06-14 00:22:25 +03:00
is_ip_key_empty() {
key="$1"
2012-03-31 22:55:50 +03:00
string=$(cat $VESTA/data/ips/$ip)
eval $string
2011-06-14 00:22:25 +03:00
eval value="$key"
if [ ! -z "$value" ] && [ "$value" != '0' ]; then
2012-03-31 22:55:50 +03:00
echo "Error: $key is not empty = $value"
log_event "$E_EXISTS" "$EVENT"
2011-12-18 22:39:29 +02:00
exit $E_EXISTS
2011-06-14 00:22:25 +03:00
fi
}
2012-03-31 22:55:50 +03:00
# Update ip address value
update_ip_value() {
2011-06-14 00:22:25 +03:00
key="$1"
value="$2"
2012-03-06 22:07:06 +02:00
conf="$VESTA/data/ips/$ip"
2011-06-14 00:22:25 +03:00
str=$(cat $conf)
2012-03-31 22:55:50 +03:00
eval $str
2011-06-14 00:22:25 +03:00
c_key=$(echo "${key//$/}")
eval old="${key}"
old=$(echo "$old" | sed -e 's/\\/\\\\/g' -e 's/&/\\&/g' -e 's/\//\\\//g')
new=$(echo "$value" | sed -e 's/\\/\\\\/g' -e 's/&/\\&/g' -e 's/\//\\\//g')
sed -i "$str_number s/$c_key='${old//\*/\\*}'/$c_key='${new//\*/\\*}'/g"\
2012-03-31 22:55:50 +03:00
$conf
2011-06-14 00:22:25 +03:00
}
2012-03-31 22:55:50 +03:00
# Get ip name
2011-06-14 00:22:25 +03:00
get_ip_name() {
2013-02-05 22:58:40 +02:00
grep "NAME=" $VESTA/data/ips/$ip | cut -f 2 -d \'
2011-06-14 00:22:25 +03:00
}
2012-03-31 22:55:50 +03:00
# Increase ip value
2011-06-14 00:22:25 +03:00
increase_ip_value() {
2011-11-21 15:37:23 +02:00
sip=${1-ip}
2011-06-14 00:22:25 +03:00
USER=$user
web_key='U_WEB_DOMAINS'
usr_key='U_SYS_USERS'
2012-03-06 22:07:06 +02:00
current_web=$(grep "$web_key=" $VESTA/data/ips/$sip |cut -f 2 -d \')
current_usr=$(grep "$usr_key=" $VESTA/data/ips/$sip |cut -f 2 -d \')
2011-06-14 00:22:25 +03:00
if [ -z "$current_web" ]; then
echo "Error: Parsing error"
2012-03-31 22:55:50 +03:00
log_event "$E_PARSING" "$EVENT"
2011-12-18 22:39:29 +02:00
exit $E_PARSING
2011-06-14 00:22:25 +03:00
fi
new_web=$((current_web + 1))
if [ -z "$current_usr" ]; then
new_usr="$USER"
else
check_usr=$(echo -e "${current_usr//,/\n}" |grep -w $USER)
if [ -z "$check_usr" ]; then
new_usr="$current_usr,$USER"
else
new_usr="$current_usr"
fi
fi
2012-03-06 22:07:06 +02:00
sed -i "s/$web_key='$current_web'/$web_key='$new_web'/g" \
$VESTA/data/ips/$ip
sed -i "s/$usr_key='$current_usr'/$usr_key='$new_usr'/g" \
$VESTA/data/ips/$ip
2011-06-14 00:22:25 +03:00
}
2012-03-31 22:55:50 +03:00
# Decrease ip value
2011-06-14 00:22:25 +03:00
decrease_ip_value() {
sip=${1-ip}
USER=$user
web_key='U_WEB_DOMAINS'
usr_key='U_SYS_USERS'
2012-03-06 22:07:06 +02:00
current_web=$(grep "$web_key=" $VESTA/data/ips/$sip |cut -f 2 -d \')
current_usr=$(grep "$usr_key=" $VESTA/data/ips/$sip |cut -f 2 -d \')
2011-06-14 00:22:25 +03:00
if [ -z "$current_web" ]; then
echo "Error: Parsing error"
2012-03-31 22:55:50 +03:00
log_event "$E_PARSING" "$EVENT"
2011-12-18 22:39:29 +02:00
exit $E_PARSING
2011-06-14 00:22:25 +03:00
fi
new_web=$((current_web - 1))
2012-03-06 22:07:06 +02:00
check_ip=$(grep $sip $USER_DATA/web.conf |wc -l)
2011-06-14 00:22:25 +03:00
if [ "$check_ip" -lt 2 ]; then
new_usr=$(echo "$current_usr" |\
sed "s/,/\n/g"|\
sed "s/^$user$//g"|\
sed "/^$/d"|\
sed ':a;N;$!ba;s/\n/,/g')
2011-06-14 00:22:25 +03:00
else
new_usr="$current_usr"
fi
2012-03-06 22:07:06 +02:00
sed -i "s/$web_key='$current_web'/$web_key='$new_web'/g" \
$VESTA/data/ips/$sip
sed -i "s/$usr_key='$current_usr'/$usr_key='$new_usr'/g" \
$VESTA/data/ips/$sip
2011-06-14 00:22:25 +03:00
}
2012-03-31 22:55:50 +03:00
# Get ip address value
get_ip_value() {
2011-06-14 00:22:25 +03:00
key="$1"
2012-03-06 22:07:06 +02:00
string=$( cat $VESTA/data/ips/$ip )
2012-03-31 22:55:50 +03:00
eval $string
2011-06-14 00:22:25 +03:00
eval value="$key"
echo "$value"
}
2013-03-27 01:16:14 +02:00
# Get real ip address
2013-02-05 22:58:40 +02:00
get_real_ip() {
if [ -e "$VESTA/data/ips/$1" ]; then
echo $1
else
2013-02-06 10:45:48 +02:00
nated_ip=$(grep -H "^NAT='$1'" $VESTA/data/ips/*)
2015-10-24 18:44:19 +03:00
if [ ! -z "$nated_ip" ]; then
echo "$nated_ip" | cut -f 1 -d : | cut -f 7 -d /
else
get_user_ip
fi
2013-02-05 22:58:40 +02:00
fi
2013-03-27 01:16:14 +02:00
}
# Get user ip
get_user_ip(){
ip=$(grep -H "OWNER='$1'" $VESTA/data/ips/* 2>/dev/null | head -n1)
ip=$(echo "$ip" | cut -f 7 -d / | cut -f 1 -d :)
if [ -z "$ip" ]; then
admin_ips=$(grep -H "OWNER='admin'" $VESTA/data/ips/* 2>/dev/null)
admin_ips=$(echo "$admin_ips" | cut -f 7 -d / | cut -f 1 -d :)
for admin_ip in $admin_ips; do
if [ -z "$ip" ]; then
shared=$(grep "STATUS='shared'" $VESTA/data/ips/$admin_ip)
if [ ! -z "$shared" ]; then
ip=$admin_ip
fi
fi
done
fi
echo "$ip"
}
2014-12-12 01:47:56 +02:00
# Convert CIDR to netmask
convert_cidr() {
set -- $(( 5 - ($1 / 8) )) 255 255 255 255 \
$(((255 << (8 - ($1 % 8))) & 255 )) 0 0 0
if [[ $1 -gt 1 ]]; then
shift $1
else
shift
fi
echo ${1-0}.${2-0}.${3-0}.${4-0}
}
# Convert netmask to CIDR
convert_netmask() {
nbits=0
IFS=.
for dec in $1 ; do
case $dec in
255) let nbits+=8;;
254) let nbits+=7;;
252) let nbits+=6;;
248) let nbits+=5;;
240) let nbits+=4;;
224) let nbits+=3;;
192) let nbits+=2;;
128) let nbits+=1;;
0);;
esac
done
echo "$nbits"
}
# Calculate broadcast address
get_broadcast() {
OLD_IFS=$IFS
IFS=.
typeset -a I=($1)
typeset -a N=($2)
IFS=$OLD_IFS
echo "$((${I[0]} |\
(255 ^ ${N[0]}))).$((${I[1]} |\
(255 ^ ${N[1]}))).$((${I[2]} |\
(255 ^ ${N[2]}))).$((${I[3]} |\
(255 ^ ${N[3]})))"
}