1 #!/bin/bash 2 3 IPS="209.224.199.201 2002:d1e0:c7c9::1" 4 VHOSTSFILE=/etc/apache/conf.d/user-vhosts.conf 5 DOMAINSDIR=/var/named/pz/ 6 USER="$1" 7 USERDOMAIN="$2" 8 HOSTSHORT=`hostname --short` 9 HOSTLONG=`hostname --fqdn` 10 DOMAIN=`echo "${HOSTLONG}" | sed s/"^${HOSTSHORT}\."//` 11 if [ -f /etc/mail/local-host-names ]; then 12 DOMAIN=`grep "^${DOMAIN}$" /etc/mail/local-host-names | head -1` 13 if [ -z "${DOMAIN}" ]; then 14 DOMAIN=`head -1 /etc/mail/local-host-names 2>/dev/null` 15 fi 16 fi 17 18 if [ -z "${USER}" ]; then 19 echo -n "Enter the username: " 20 read USER 21 if [ -z "${USER}" ]; then 22 exit 1 23 fi 24 fi 25 26 if [ -z "${USERDOMAIN}" ]; then 27 USERDOMAIN="${USER}.${DOMAIN}" 28 NEEDDOMAIN=1 29 fi 30 31 UUID=`id -u "${USER}" 2>/dev/null` 32 UGID=`id -g "${USER}" 2>/dev/null` 33 UGROUP=`id -gn "${USER}" 2>/dev/null` 34 UHOMEDIR=`grep "^${USER}:" /etc/passwd | cut -f 6 -d :` 35 if [ -z "${UUID}" -o -z "${UGID}" -o -z "${UHOMEDIR}" -o -z "${UGROUP}" ]; then 36 echo "Could not get user information, exiting." 37 exit 1 38 fi 39 40 UWEBDIR="/web/${USER}" 41 UFTPDIR="/home/ftp/pub/${USER}" 42 mkdir "${UWEBDIR}" && chown "${UUID}":"${UGID}" "${UWEBDIR}" 43 mkdir "${UFTPDIR}" && chown "${UUID}":"${UGID}" "${UFTPDIR}" 44 mkdir "${UHOMEDIR}/web/" && chown "${UUID}":"${UGID}" "${UHOMEDIR}/web" 45 46 if [ ! -f "${UHOMEDIR}/public_html" -a ! -L "${UHOMEDIR}/public_html" ]; then 47 ln -s "${UWEBDIR}" "${UHOMEDIR}/public_html" 48 fi 49 50 if grep "${USERDOMAIN}" "${VHOSTSFILE}" >/dev/null; then 51 NEEDDOMAIN=0 52 true 53 else 54 cat <<EOF >> "${VHOSTSFILE}" 55 <VirtualHost *:80> 56 User ${USER} 57 Group ${UGROUP} 58 ServerAdmin ${USER}@${DOMAIN} 59 DocumentRoot ${UWEBDIR} 60 UserDir /disabled 61 ServerName ${USERDOMAIN} 62 ErrorLog ${UHOMEDIR}/web/error_log 63 CustomLog ${UHOMEDIR}/web/access_log combined 64 </VirtualHost> 65 EOF 66 /etc/init.d/apache reload 2>/dev/null >/dev/null 67 fi 68 69 70 if [ "${NEEDDOMAIN}" = 1 ]; then 71 DOMAINFILE="${DOMAINSDIR}/${DOMAIN}" 72 if [ -f "${DOMAINFILE}" ]; then 73 if grep "^${USER}[^A-Za-z0-9.-]" "${DOMAINFILE}" >/dev/null; then 74 true 75 else 76 for c_IP in ${IPS}; do 77 if echo "${c_IP}" | grep ':' >/dev/null; then 78 TYPE=AAAA 79 else 80 TYPE=A 81 fi 82 echo "${USER} IN ${TYPE} ${c_IP}" >> "${DOMAINFILE}" 83 done 84 sed -e s/'\([0-9]\+\).*; Serial'/'\1|\t; Serial'/ -e 's/0|/1/' -e 's/1|/2/' -e 's/2|/3/' -e 's/3|/4/' -e 's/4|/5/' -e 's/5|/6/' -e 's/6|/7/' -e 's/7|/8/' -e 's/8|/9/' -e 's/09|/10/' -e 's/19|/20/' -e 's/29|/30/' -e 's/39|/40/' -e 's/49|/50/' -e 's/59|/60/' -e 's/69|/70/' -e 's/79|/80/' -e 's/89|/90/' -e 's/99|/99/' "${DOMAINFILE}" > "${DOMAINFILE}.tmp" 85 mv "${DOMAINFILE}" "${DOMAINFILE}.bak" 86 mv "${DOMAINFILE}.tmp" "${DOMAINFILE}" 87 /etc/init.d/bind9 reload 88 fi 89 fi 90 fi 91 92 echo "Added http://${USERDOMAIN}/ to user ${USER} (${UWEBDIR})" |