v-change-user-package 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. #!/bin/bash
  2. # info: change user package
  3. # options: USER PACKAGE [FORCE]
  4. #
  5. # The function changes user's hosting package.
  6. #----------------------------------------------------------#
  7. # Variable&Function #
  8. #----------------------------------------------------------#
  9. # Argument definition
  10. user=$1
  11. package=$2
  12. force=$3
  13. # Includes
  14. source $VESTA/func/main.sh
  15. source $VESTA/conf/vesta.conf
  16. is_package_avalable() {
  17. usr_data=$(cat $USER_DATA/user.conf)
  18. IFS=$'\n'
  19. for key in $usr_data; do
  20. eval ${key%%=*}=${key#*=}
  21. done
  22. WEB_DOMAINS='0'
  23. DATABASES='0'
  24. MAIL_DOMAINS='0'
  25. DNS_DOMAINS='0'
  26. DISK_QUOTA='0'
  27. BANDWIDTH='0'
  28. pkg_data=$(cat $VESTA/data/packages/$package.pkg |grep -v TIME |\
  29. grep -v DATE)
  30. eval $pkg_data
  31. # Checking usage agains package limits
  32. if [ "$WEB_DOMAINS" != 'unlimited' ]; then
  33. if [ "$WEB_DOMAINS" -lt "$U_WEB_DOMAINS" ]; then
  34. check_result $E_LIMIT "Package doesn't cover WEB_DOMAIN usage"
  35. fi
  36. fi
  37. if [ "$DNS_DOMAINS" != 'unlimited' ]; then
  38. if [ "$DNS_DOMAINS" -lt "$U_DNS_DOMAINS" ]; then
  39. check_result $E_LIMIT "Package doesn't cover DNS_DOMAIN usage"
  40. fi
  41. fi
  42. if [ "$MAIL_DOMAINS" != 'unlimited' ]; then
  43. if [ "$MAIL_DOMAINS" -lt "$U_MAIL_DOMAINS" ]; then
  44. check_result $E_LIMIT "Package doesn't cover MAIL_DOMAIN usage"
  45. fi
  46. fi
  47. if [ "$DATABASES" != 'unlimited' ]; then
  48. if [ "$DATABASES" -lt "$U_DATABASES" ]; then
  49. check_result $E_LIMIT "Package doesn't cover DATABASE usage"
  50. fi
  51. fi
  52. if [ "$CRON_JOBS" != 'unlimited' ]; then
  53. if [ "$CRON_JOBS" -lt "$U_CRON_JOBS" ]; then
  54. check_result $E_LIMIT "Package doesn't cover CRON usage"
  55. fi
  56. fi
  57. if [ "$DISK_QUOTA" != 'unlimited' ]; then
  58. if [ "$DISK_QUOTA" -lt "$U_DISK" ]; then
  59. check_result $E_LIMIT "Package doesn't cover DISK usage"
  60. fi
  61. fi
  62. if [ "$BANDWIDTH" != 'unlimited' ]; then
  63. if [ "$BANDWIDTH" -lt "$U_BANDWIDTH" ]; then
  64. check_result $E_LIMIT "Package doesn't cover BANDWIDTH usage"
  65. fi
  66. fi
  67. }
  68. change_user_package() {
  69. eval $(cat $USER_DATA/user.conf)
  70. eval $(cat $VESTA/data/packages/$package.pkg |egrep -v "TIME|DATE")
  71. echo "FNAME='$FNAME'
  72. LNAME='$LNAME'
  73. PACKAGE='$package'
  74. WEB_TEMPLATE='$WEB_TEMPLATE'
  75. BACKEND_TEMPLATE='$BACKEND_TEMPLATE'
  76. PROXY_TEMPLATE='$PROXY_TEMPLATE'
  77. DNS_TEMPLATE='$DNS_TEMPLATE'
  78. WEB_DOMAINS='$WEB_DOMAINS'
  79. WEB_ALIASES='$WEB_ALIASES'
  80. DNS_DOMAINS='$DNS_DOMAINS'
  81. DNS_RECORDS='$DNS_RECORDS'
  82. MAIL_DOMAINS='$MAIL_DOMAINS'
  83. MAIL_ACCOUNTS='$MAIL_ACCOUNTS'
  84. DATABASES='$DATABASES'
  85. CRON_JOBS='$CRON_JOBS'
  86. DISK_QUOTA='$DISK_QUOTA'
  87. BANDWIDTH='$BANDWIDTH'
  88. NS='$NS'
  89. SHELL='$SHELL'
  90. BACKUPS='$BACKUPS'
  91. CONTACT='$CONTACT'
  92. CRON_REPORTS='$CRON_REPORTS'
  93. MD5='$MD5'
  94. RKEY='$RKEY'
  95. SUSPENDED='$SUSPENDED'
  96. SUSPENDED_USERS='$SUSPENDED_USERS'
  97. SUSPENDED_WEB='$SUSPENDED_WEB'
  98. SUSPENDED_DNS='$SUSPENDED_DNS'
  99. SUSPENDED_MAIL='$SUSPENDED_MAIL'
  100. SUSPENDED_DB='$SUSPENDED_DB'
  101. SUSPENDED_CRON='$SUSPENDED_CRON'
  102. IP_AVAIL='$IP_AVAIL'
  103. IP_OWNED='$IP_OWNED'
  104. U_USERS='$U_USERS'
  105. U_DISK='$U_DISK'
  106. U_DISK_DIRS='$U_DISK_DIRS'
  107. U_DISK_WEB='$U_DISK_WEB'
  108. U_DISK_MAIL='$U_DISK_MAIL'
  109. U_DISK_DB='$U_DISK_DB'
  110. U_BANDWIDTH='$U_BANDWIDTH'
  111. U_WEB_DOMAINS='$U_WEB_DOMAINS'
  112. U_WEB_SSL='$U_WEB_SSL'
  113. U_WEB_ALIASES='$U_WEB_ALIASES'
  114. U_DNS_DOMAINS='$U_DNS_DOMAINS'
  115. U_DNS_RECORDS='$U_DNS_RECORDS'
  116. U_MAIL_DOMAINS='$U_MAIL_DOMAINS'
  117. U_MAIL_DKIM='$U_MAIL_DKIM'
  118. U_MAIL_ACCOUNTS='$U_MAIL_ACCOUNTS'
  119. U_DATABASES='$U_DATABASES'
  120. U_CRON_JOBS='$U_CRON_JOBS'
  121. U_BACKUPS='$U_BACKUPS'
  122. LANGUAGE='$LANGUAGE'
  123. NOTIFICATIONS='$NOTIFICATIONS'
  124. TIME='$TIME'
  125. DATE='$DATE'" > $USER_DATA/user.conf
  126. }
  127. #----------------------------------------------------------#
  128. # Verifications #
  129. #----------------------------------------------------------#
  130. check_args '2' "$#" 'USER PACKAGE [FORCE]'
  131. is_format_valid 'user' 'package'
  132. is_object_valid 'user' 'USER' "$user"
  133. is_package_valid
  134. if [ "$force" != 'yes' ];then
  135. is_package_avalable
  136. fi
  137. #----------------------------------------------------------#
  138. # Action #
  139. #----------------------------------------------------------#
  140. # Changing user package
  141. change_user_package
  142. # Update user shell
  143. shell_conf=$(echo "$pkg_data" | grep 'SHELL' | cut -f 2 -d \')
  144. shell=$(grep -w "$shell_conf" /etc/shells |head -n1)
  145. /usr/bin/chsh -s "$shell" "$user" &>/dev/null
  146. # Run template trigger
  147. if [ -x "$VESTA/data/packages/$package.sh" ]; then
  148. $VESTA/data/packages/$package.sh "$user" "$CONTACT" "$FNAME" "$LNAME"
  149. fi
  150. # Update disk quota
  151. source $VESTA/conf/vesta.conf
  152. if [ "$DISK_QUOTA" = 'yes' ]; then
  153. $BIN/v-update-user-quota $user
  154. fi
  155. #----------------------------------------------------------#
  156. # Vesta #
  157. #----------------------------------------------------------#
  158. # Logging
  159. log_history "changed $user package to $package" '' 'admin'
  160. log_event "$OK" "$ARGUMENTS"
  161. exit