v-change-user-package 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  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. PROXY_TEMPLATE='$PROXY_TEMPLATE'
  76. DNS_TEMPLATE='$DNS_TEMPLATE'
  77. WEB_DOMAINS='$WEB_DOMAINS'
  78. WEB_ALIASES='$WEB_ALIASES'
  79. DNS_DOMAINS='$DNS_DOMAINS'
  80. DNS_RECORDS='$DNS_RECORDS'
  81. MAIL_DOMAINS='$MAIL_DOMAINS'
  82. MAIL_ACCOUNTS='$MAIL_ACCOUNTS'
  83. DATABASES='$DATABASES'
  84. CRON_JOBS='$CRON_JOBS'
  85. DISK_QUOTA='$DISK_QUOTA'
  86. BANDWIDTH='$BANDWIDTH'
  87. NS='$NS'
  88. SHELL='$SHELL'
  89. BACKUPS='$BACKUPS'
  90. CONTACT='$CONTACT'
  91. CRON_REPORTS='$CRON_REPORTS'
  92. MD5='$MD5'
  93. RKEY='$RKEY'
  94. SUSPENDED='$SUSPENDED'
  95. SUSPENDED_USERS='$SUSPENDED_USERS'
  96. SUSPENDED_WEB='$SUSPENDED_WEB'
  97. SUSPENDED_DNS='$SUSPENDED_DNS'
  98. SUSPENDED_MAIL='$SUSPENDED_MAIL'
  99. SUSPENDED_DB='$SUSPENDED_DB'
  100. SUSPENDED_CRON='$SUSPENDED_CRON'
  101. IP_AVAIL='$IP_AVAIL'
  102. IP_OWNED='$IP_OWNED'
  103. U_USERS='$U_USERS'
  104. U_DISK='$U_DISK'
  105. U_DISK_DIRS='$U_DISK_DIRS'
  106. U_DISK_WEB='$U_DISK_WEB'
  107. U_DISK_MAIL='$U_DISK_MAIL'
  108. U_DISK_DB='$U_DISK_DB'
  109. U_BANDWIDTH='$U_BANDWIDTH'
  110. U_WEB_DOMAINS='$U_WEB_DOMAINS'
  111. U_WEB_SSL='$U_WEB_SSL'
  112. U_WEB_ALIASES='$U_WEB_ALIASES'
  113. U_DNS_DOMAINS='$U_DNS_DOMAINS'
  114. U_DNS_RECORDS='$U_DNS_RECORDS'
  115. U_MAIL_DOMAINS='$U_MAIL_DOMAINS'
  116. U_MAIL_DKIM='$U_MAIL_DKIM'
  117. U_MAIL_ACCOUNTS='$U_MAIL_ACCOUNTS'
  118. U_DATABASES='$U_DATABASES'
  119. U_CRON_JOBS='$U_CRON_JOBS'
  120. U_BACKUPS='$U_BACKUPS'
  121. LANGUAGE='$LANGUAGE'
  122. NOTIFICATIONS='$NOTIFICATIONS'
  123. TIME='$TIME'
  124. DATE='$DATE'" > $USER_DATA/user.conf
  125. }
  126. #----------------------------------------------------------#
  127. # Verifications #
  128. #----------------------------------------------------------#
  129. check_args '2' "$#" 'USER PACKAGE [FORCE]'
  130. is_format_valid 'user' 'package'
  131. is_object_valid 'user' 'USER' "$user"
  132. is_package_valid
  133. if [ "$force" != 'yes' ];then
  134. is_package_avalable
  135. fi
  136. #----------------------------------------------------------#
  137. # Action #
  138. #----------------------------------------------------------#
  139. # Changing user package
  140. change_user_package
  141. # Update user shell
  142. shell_conf=$(echo "$pkg_data" | grep 'SHELL' | cut -f 2 -d \')
  143. shell=$(grep -w "$shell_conf" /etc/shells |head -n1)
  144. /usr/bin/chsh -s "$shell" "$user" &>/dev/null
  145. # Run template trigger
  146. if [ -x "$VESTA/data/packages/$package.sh" ]; then
  147. $VESTA/data/packages/$package.sh "$user" "$CONTACT" "$FNAME" "$LNAME"
  148. fi
  149. # Update disk quota
  150. source $VESTA/conf/vesta.conf
  151. if [ "$DISK_QUOTA" = 'yes' ]; then
  152. $BIN/v-update-user-quota $user
  153. fi
  154. #----------------------------------------------------------#
  155. # Vesta #
  156. #----------------------------------------------------------#
  157. # Logging
  158. log_history "changed $user package to $package" '' 'admin'
  159. log_event "$OK" "$ARGUMENTS"
  160. exit