diff --git a/bin/v_add_user b/bin/v_add_user
index b11f6ccf..e8121f54 100755
--- a/bin/v_add_user
+++ b/bin/v_add_user
@@ -55,10 +55,10 @@ is_package_valid "$package"
#----------------------------------------------------------#
# Parsing package data
-package_data=$(cat $VESTA/data/packages/$package.pkg)
+pkg_data=$(cat $VESTA/data/packages/$package.pkg |grep -v TIME |grep -v DATE)
# Checking shell
-shell_conf=$(echo "$package_data" | grep 'SHELL' | cut -f 2 -d \')
+shell_conf=$(echo "$pkg_data" | grep 'SHELL' | cut -f 2 -d \')
shell=$(/usr/bin/chsh --list-shells | grep -w "$shell_conf" |head -n1)
# Adding user
@@ -98,7 +98,7 @@ chmod -R a+x $HOMEDIR/$user
# Checking quota
if [ ! -z "$DISK_QUOTA" ] && [ "$DISK_QUOTA" != 'no' ]; then
- DISK_QUOTA=$(echo "$package_data" | grep 'DISK_QUOTA' | cut -f 2 -d \')
+ DISK_QUOTA=$(echo "$pkg_data" | grep 'DISK_QUOTA' | cut -f 2 -d \')
#$BIN/v_add_user_quota "$user" "$DISK_QUOTA"
fi
@@ -169,7 +169,7 @@ fi
echo "FNAME='$fname'
LNAME='$lname'
PACKAGE='$package'
-$package_data
+$pkg_data
CONTACT='$email'
CRON_REPORTS='yes'
MD5='$(awk -v user=$user -F : 'user == $1 {print $2}' /etc/shadow)'
diff --git a/bin/v_add_user_package b/bin/v_add_user_package
new file mode 100755
index 00000000..f5376a2c
--- /dev/null
+++ b/bin/v_add_user_package
@@ -0,0 +1,74 @@
+#!/bin/bash
+# info: adding user package
+# options: pkg_dir package [rewrite]
+#
+# The function adds new user package to the system.
+
+
+#----------------------------------------------------------#
+# Variable&Function #
+#----------------------------------------------------------#
+
+# Argument defenition
+pkg_dir=$1
+package=$2
+rewrite=$3
+
+# Includes
+source $VESTA/conf/vesta.conf
+source $VESTA/func/main.sh
+
+# Functions
+is_package_new() {
+ if [ -e "$VESTA/data/packages/$package.pkg" ]; then
+ echo "Error: package $package already exists."
+ log_event "$E_EXISTS" "$EVENT"
+ exit $E_EXISTS
+ fi
+}
+
+is_package_consistent() {
+ source $pkg_dir/$package.pkg
+ validate_format_int $WEB_DOMAINS
+ validate_format_int $WEB_ALIASES
+ validate_format_int $DNS_DOMAINS
+ validate_format_int $DNS_RECORDS
+ validate_format_int $MAIL_DOMAINS
+ validate_format_int $MAIL_ACCOUNTS
+ validate_format_int $DATABASES
+ validate_format_int $CRON_JOBS
+ validate_format_int $DISK_QUOTA
+ validate_format_int $BACKUPS
+ validate_format_shell $SHELL
+}
+
+
+#----------------------------------------------------------#
+# Verifications #
+#----------------------------------------------------------#
+
+check_args '2' "$#" 'pkg_dir package' 'rewrite'
+validate_format 'pkg_dir' 'package'
+if [ "$rewrite" != 'yes' ]; then
+ is_package_new
+fi
+is_package_valid "$pkg_dir"
+is_package_consistent
+
+
+#----------------------------------------------------------#
+# Action #
+#----------------------------------------------------------#
+
+cp -f $pkg_dir/$package.pkg $VESTA/data/packages/
+chmod 644 $VESTA/data/packages/$package.pkg
+
+
+#----------------------------------------------------------#
+# Vesta #
+#----------------------------------------------------------#
+
+# Logging
+log_event "$OK" "$EVENT"
+
+exit
diff --git a/bin/v_change_user_package b/bin/v_change_user_package
index d21bf586..70069a16 100755
--- a/bin/v_change_user_package
+++ b/bin/v_change_user_package
@@ -32,7 +32,8 @@ is_package_avalable() {
DISK_QUOTA='0'
BANDWIDTH='0'
- pkg_data=$(cat $VESTA/data/packages/$package.pkg)
+ pkg_data=$(cat $VESTA/data/packages/$package.pkg |grep -v TIME |\
+ grep -v DATE)
eval $pkg_data
# Comparing user data with package
diff --git a/bin/v_list_user_package b/bin/v_list_user_package
new file mode 100755
index 00000000..dd89bbc8
--- /dev/null
+++ b/bin/v_list_user_package
@@ -0,0 +1,92 @@
+#!/bin/bash
+# info: list user package
+# options: package [format]
+#
+# The function for getting the list of system ip parameters.
+
+
+#----------------------------------------------------------#
+# Variable&Function #
+#----------------------------------------------------------#
+
+# Argument defenition
+package=$1
+PACKAGE=$package
+format=${2-shell}
+
+# Includes
+source $VESTA/func/main.sh
+
+# Json function
+json_list_package() {
+ i=1
+ fileds_count=$(echo "$fields" | wc -w)
+ pkg_data=$(cat $VESTA/data/packages/$PACKAGE.pkg)
+ echo '{'
+ eval $pkg_data
+ for field in $fields; do
+ eval value=$field
+ if [ $i -eq 1 ]; then
+ echo -e "\t\"$value\": {"
+ else
+ if [ $fileds_count -eq $i ]; then
+ echo -e "\t\t\"${field//$/}\": \"${value//,/, }\""
+ else
+ echo -e "\t\t\"${field//$/}\": \"${value//,/, }\","
+ fi
+ fi
+ (( ++i))
+ done
+ if [ -n "$value" ]; then
+ echo -e ' }'
+ fi
+ echo -e '}'
+}
+
+# Shell function
+shell_list_package() {
+ line=$(cat $VESTA/data/packages/$PACKAGE.pkg)
+ eval $line
+ for field in $fields; do
+ eval key="$field"
+ if [ -z "$key" ]; then
+ key='NULL'
+ fi
+ echo "${field//$/}: $key "
+ done
+}
+
+
+#----------------------------------------------------------#
+# Verifications #
+#----------------------------------------------------------#
+
+# Checking args
+check_args '1' "$#" 'package [format]'
+validate_format 'package'
+is_package_valid
+
+
+#----------------------------------------------------------#
+# Action #
+#----------------------------------------------------------#
+
+# Defining fileds to select
+fields='$PACKAGE $TEMPLATE $WEB_DOMAINS $WEB_ALIASES $DNS_DOMAINS $DNS_RECORDS
+ $MAIL_DOMAINS $MAIL_ACCOUNTS $DATABASES $CRON_JOBS $DISK_QUOTA $BANDWIDTH
+ $NS $SHELL $BACKUPS $TIME $DATE'
+
+# Listing ip
+case $format in
+ json) json_list_package ;;
+ plain) shell_list_package ;;
+ shell) shell_list_package | column -t ;;
+ *) check_args '1' '0' 'ip [format]'
+esac
+
+
+#----------------------------------------------------------#
+# Vesta #
+#----------------------------------------------------------#
+
+exit
diff --git a/func/main.sh b/func/main.sh
index 1553af70..23dc6c10 100755
--- a/func/main.sh
+++ b/func/main.sh
@@ -121,7 +121,10 @@ gen_password() {
# Package existance check
is_package_valid() {
- if [ ! -e "$VESTA/data/packages/$package.pkg" ]; then
+ if [ -z "$1" ]; then
+ pkg_dir="$VESTA/data/packages"
+ fi
+ if [ ! -e "$pkg_dir/$package.pkg" ]; then
echo "Error: package $package not exist"
log_event "$E_NOTEXIST $EVENT"
exit $E_NOTEXIST
diff --git a/web/add/package/index.php b/web/add/package/index.php
new file mode 100644
index 00000000..ff4fd86e
--- /dev/null
+++ b/web/add/package/index.php
@@ -0,0 +1,165 @@
+ $error) {
+ if ( $i == 0 ) {
+ $error_msg = $error;
+ } else {
+ $error_msg = $error_msg.", ".$error;
+ }
+ }
+ $_SESSION['error_msg'] = "Error: field ".$error_msg." can not be blank.";
+ } else {
+ exec ('mktemp -d', $output, $return_var);
+ $tmpdir = $output[0];
+ unset($output);
+
+ // Create package
+ $pkg = "TEMPLATE=".$v_template."\n";
+ $pkg .= "WEB_DOMAINS=".$v_web_domains."\n";
+ $pkg .= "WEB_ALIASES=".$v_web_aliases."\n";
+ $pkg .= "DNS_DOMAINS=".$v_dns_domains."\n";
+ $pkg .= "DNS_RECORDS=".$v_dns_records."\n";
+ $pkg .= "MAIL_DOMAINS=".$v_mail_domains."\n";
+ $pkg .= "MAIL_ACCOUNTS=".$v_mail_accounts."\n";
+ $pkg .= "DATABASES=".$v_databases."\n";
+ $pkg .= "CRON_JOBS=".$v_cron_jobs."\n";
+ $pkg .= "DISK_QUOTA=".$v_disk_quota."\n";
+ $pkg .= "BANDWIDTH=".$v_bandwidth."\n";
+ $pkg .= "NS=".$v_ns."\n";
+ $pkg .= "SHELL=".$v_shell."\n";
+ $pkg .= "BACKUPS=".$v_backups."\n";
+ $pkg .= "TIME=".$v_time."\n";
+ $pkg .= "DATE=".$v_date."\n";
+
+ // Write package
+ $fp = fopen($tmpdir."/".$_POST['v_package'].".pkg", 'w');
+ fwrite($fp, $pkg);
+ fclose($fp);
+
+ // Add new package
+ if (empty($_SESSION['error_msg'])) {
+ exec (VESTA_CMD."v_add_user_package ".$tmpdir." ".$v_package, $output, $return_var);
+ if ($return_var != 0) {
+ $error = implode('
', $output);
+ if (empty($error)) $error = 'Error: vesta did not return any output.';
+ $_SESSION['error_msg'] = $error;
+ }
+ unset($output);
+ }
+
+ // Remove tmpdir
+ exec ('rm -rf '.$tmdir, $output, $return_var);
+ unset($output);
+
+ // Check output
+ if (empty($_SESSION['error_msg'])) {
+ $_SESSION['ok_msg'] = "OK: package ".$_POST['v_package']." has been created successfully.";
+ unset($v_package);
+ }
+
+ }
+ }
+
+
+ exec (VESTA_CMD."v_list_web_templates json", $output, $return_var);
+ check_error($return_var);
+ $templates = json_decode(implode('', $output), true);
+ unset($output);
+
+ exec (VESTA_CMD."v_list_sys_shells json", $output, $return_var);
+ check_error($return_var);
+ $shells = json_decode(implode('', $output), true);
+ unset($output);
+
+ // Set default values
+ if (empty($v_template)) $v_template = 'default';
+ if (empty($v_shell)) $v_shell = 'nologin';
+ if (empty($v_web_domains)) $v_web_domains = "'0'";
+ if (empty($v_web_aliases)) $v_web_aliases = "'0'";
+ if (empty($v_dns_domains)) $v_dns_domains = "'0'";
+ if (empty($v_dns_records)) $v_dns_records = "'0'";
+ if (empty($v_mail_domains)) $v_mail_domains = "'0'";
+ if (empty($v_mail_accounts)) $v_mail_accounts = "'0'";
+ if (empty($v_databases)) $v_databases = "'0'";
+ if (empty($v_cron_jobs)) $v_cron_jobs = "'0'";
+ if (empty($v_backups)) $v_backups = "'0'";
+ if (empty($v_disk_quota)) $v_disk_quota = "'0'";
+ if (empty($v_bandwidth)) $v_bandwidth = "'0'";
+ if (empty($v_ns1)) $v_ns1 = 'ns1.example.ltd';
+ if (empty($v_ns2)) $v_ns2 = 'ns2.example.ltd';
+
+
+ include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/menu_add_package.html');
+ include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/add_package.html');
+ unset($_SESSION['error_msg']);
+ unset($_SESSION['ok_msg']);
+}
+
+// Footer
+include($_SERVER['DOCUMENT_ROOT'].'/templates/footer.html');
diff --git a/web/list/package/index.php b/web/list/package/index.php
new file mode 100644
index 00000000..2f982400
--- /dev/null
+++ b/web/list/package/index.php
@@ -0,0 +1,28 @@
+
+
+
+
+ |
+
+
+
+
+ |
+
+
diff --git a/web/templates/admin/list_packages.html b/web/templates/admin/list_packages.html
index ef67c90e..7b1c9186 100644
--- a/web/templates/admin/list_packages.html
+++ b/web/templates/admin/list_packages.html
@@ -37,7 +37,6 @@ foreach ($data as $key => $value) {
|
- propagate |
edit |
@@ -58,9 +57,9 @@ foreach ($data as $key => $value) {
| |
Bandwidth:
- |
+
Disk:
- |
+
|
diff --git a/web/templates/admin/menu_add_package.html b/web/templates/admin/menu_add_package.html
new file mode 100644
index 00000000..b87a6654
--- /dev/null
+++ b/web/templates/admin/menu_add_package.html
@@ -0,0 +1,15 @@
+
diff --git a/web/templates/admin/menu_packages.html b/web/templates/admin/menu_packages.html
index 7689b385..ac35a82f 100644
--- a/web/templates/admin/menu_packages.html
+++ b/web/templates/admin/menu_packages.html
@@ -1,7 +1,7 @@
|