| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258 |
- #!/bin/bash
- # info: search objects
- # options: USER OBJECT [FORMAT]
- #
- # The function that allows to find user objects.
- #----------------------------------------------------------#
- # Variable&Function #
- #----------------------------------------------------------#
- # Argument definition
- user=$1
- object=$2
- format=${3-shell}
- # Includes
- source $VESTA/func/main.sh
- source $VESTA/conf/vesta.conf
- # Json list function
- json_list_search() {
- echo '{'
- fileds_count=$(echo $fields| wc -w )
- while read line; do
- eval $line
- if [ -n "$list_data" ]; then
- echo -e ' },'
- fi
- i=1
- IFS=' '
- for field in $fields; do
- eval value=\"$field\"
- value=$(echo "$value"|sed -e 's/"/\\"/g' -e "s/%quote%/'/g")
- if [ $i -eq 1 ]; then
- (( ++i))
- echo -e "\t\"$value\": {"
- else
- if [ $i -lt $fileds_count ]; then
- (( ++i))
- echo -e "\t\t\"${field//$/}\": \"${value//,/, }\","
- else
- echo -e "\t\t\"${field//$/}\": \"${value//,/, }\""
- list_data=1
- fi
- fi
- done
- done < $conf
- if [ -n "$list_data" ]; then
- echo -e ' }'
- fi
- echo -e '}'
- }
- # Shell list function
- shell_list_search() {
- if [ -z "$nohead" ] ; then
- echo "${fields//$/}"
- for a in $fields; do
- echo -e "------ \c"
- done
- echo
- fi
- while read line ; do
- eval $line
- eval echo "$fields" | sed "s/%quote%/'/g"
- done < $conf
- }
- #----------------------------------------------------------#
- # Verifications #
- #----------------------------------------------------------#
- check_args '2' "$#" 'USER OBJECT [FORMAT]'
- is_format_valid 'user' 'object'
- is_object_valid 'user' 'USER' "$user"
- #----------------------------------------------------------#
- # Action #
- #----------------------------------------------------------#
- conf=$(mktemp)
- i=0
- OLD_IFS=$IFS
- IFS=$'\n'
- # Search query
- search=$(grep "$object" \
- $VESTA/data/users/$user/web.conf \
- $VESTA/data/users/$user/dns.conf \
- $VESTA/data/users/$user/dns/*.conf \
- $VESTA/data/users/$user/mail.conf \
- $VESTA/data/users/$user/mail/*.conf \
- $VESTA/data/users/$user/db.conf \
- $VESTA/data/users/$user/cron.conf 2> /dev/null)
-
- for row in $search; do
- # Initialise variable
- key=''
- result=''
- dom_alias=''
- suspended=''
- object_link=''
- object_parent=''
- object_time=''
- object_date=''
- # Parsing result
- type=$(echo $row |cut -f 1 -d : |cut -f 8 -d /)
- data=$(echo $row |cut -f 2,3,4,5 -d :)
- eval "$data"
- # Check WEB domain
- if [ "$type" = 'web.conf' ]; then
- if [ -n "$(echo $DOMAIN |grep $object)" ]; then
- # Check domain alias
- check_alias="$(echo $ALIAS| tr ',' '\n' |grep $object)"
- if [ ! -z "$check_alias" ];then
- dom_alias=$(echo $check_alias | tr ' ' ',')
- fi
- key="DOMAIN"
- result="$DOMAIN"
- suspended=$SUSPENDED
- object_time=$TIME
- object_date=$DATE
- ((i ++))
- else
- check_alias="$(echo $ALIAS| tr ',' '\n' |grep $object)"
- if [ ! -z "$check_alias" ];then
- key="DOMAIN"
- result="$DOMAIN"
- object_parent="$DOMAIN"
- dom_alias=$(echo $check_alias | tr ' ' ',')
- suspended=$SUSPENDED
- object_time=$TIME
- object_date=$DATE
- ((i ++))
- fi
- fi
- fi
- # DNS
- if [ "$type" = 'dns.conf' ]; then
- if [ -n "$(echo $DOMAIN |grep $object)" ]; then
- key="DOMAIN"
- result="$DOMAIN"
- suspended=$SUSPENDED
- object_time=$TIME
- object_date=$DATE
- ((i ++))
- fi
- fi
- # DNS Records
- if [ "$type" = 'dns' ]; then
- if [ -n "$(echo $RECORD |grep $object)" ]; then
- key="RECORD"
- result="$RECORD.$DOMAIN"
- suspended=$SUSPENDED
- object_link=$ID
- object_parent=$DOMAIN
- object_time=$TIME
- object_date=$DATE
- ((i ++))
- fi
- fi
- # MAIL
- if [ "$type" = 'mail.conf' ]; then
- if [ -n "$(echo $DOMAIN |grep $object)" ]; then
- key="DOMAIN"
- result="$DOMAIN"
- suspended=$SUSPENDED
- object_time=$TIME
- object_date=$DATE
- ((i ++))
- fi
- fi
- # Mail Accounts
- if [ "$type" = 'mail' ]; then
- type='mail'
- if [ -n "$(echo $ACCOUNT |grep $object)" ]; then
- key="ACCOUNT"
- dom="$(echo $row|cut -f 1 -d :|cut -f 9 -d /|sed 's/.conf//')"
- result="$ACCOUNT@$dom"
- suspended=$SUSPENDED
- object_link=$ACCOUNT
- object_parent=$dom
- object_time=$TIME
- object_date=$DATE
- ((i ++))
- fi
- fi
- # DB
- if [ "$type" = 'db.conf' ]; then
- if [ -n "$(echo $DB |grep $object)" ]; then
- key="DATABASE"
- result="$DB"
- suspended=$SUSPENDED
- object_time=$TIME
- object_date=$DATE
- ((i ++))
- fi
- fi
- # Cron Jobs
- if [ "$type" = 'cron.conf' ]; then
- if [ -n "$(echo $CMD |grep $object)" ]; then
- key="JOB"
- result="$CMD"
- suspended=$SUSPENDED
- object_link=$JOB
- object_parent=$JOB
- object_time=$TIME
- object_date=$DATE
- ((i ++))
- fi
- fi
- if [ ! -z "$result" ]; then
- type=$(echo $type|cut -f1 -d \.)
- str="ID='$i' USER='$user' TYPE='$type' KEY='$key'"
- str="$str RESULT='$result' ALIAS='$dom_alias'"
- str="$str LINK='$object_link' PARENT='$object_parent'"
- str="$str SUSPENDED='$suspended' TIME='$object_time'"
- str="$str DATE='$object_date'"
- echo $str >> $conf
- fi
- done
- IFS=$OLD_IFS
- # Defining fileds to select
- fields='$ID $USER $TYPE $KEY $RESULT $ALIAS $LINK $PARENT $SUSPENDED $TIME'
- fields="$fields \$DATE"
- # Listing domains
- case $format in
- json) json_list_search ;;
- plain) nohead=1; shell_list_search ;;
- shell) fields='$USER~$TYPE~$KEY~$RESULT~$ALIAS';
- shell_list |column -t -s '~' ;;
- *) check_args '2' '0' 'USER OBJECT [FORMAT]'
- esac
- rm $conf
- #----------------------------------------------------------#
- # Vesta #
- #----------------------------------------------------------#
- # Logging
- #log_event "$OK" "$ARGUMENTS"
- exit
|