diff --git a/.creds.example b/.creds.example new file mode 100644 index 0000000..ad5efb0 --- /dev/null +++ b/.creds.example @@ -0,0 +1,15 @@ +#!/bin/bash +################################################### +################ DEFINITIONS #################### +database_name=vmail +database_user=root +database_password="password" +new_user_quota=2048 #in MB +new_user_enabled=1 +new_user_sendonly=0 +new_user_autosent=0 +max_quota=4096 #in MB +init_database_user=vmail #User which will read the database + +################################################### +################ MENUS ########################## diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7d1b42f --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.creds diff --git a/README.md b/README.md index 0f7623e..a0a62ff 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,8 @@ Further, as `vmail-admin` is written in Bash, you should have bash installed. * Make it executable with "chmod +x vmail-admin.sh". * Run it with "./vmail-admin.sh". +* Copy .creds.example over to .creds file and make your changes + # Usage You can change the parameters for the script under Definitions in the script. @@ -35,7 +37,8 @@ Menu items are: 2. Delete user 3. Change user password 4. Change user quota - 5. Back to main menu + 5. Change autosent status #wether or not to auto bcc when sent from. Use this for accounts where emails are sent via smtp and not a IMAP client + 6. Back to main menu 2. Domain Management 1. Add Domain 2. Delete Domain diff --git a/vmail-admin.sh b/vmail-admin.sh old mode 100644 new mode 100755 index 9d401a3..49c58a3 --- a/vmail-admin.sh +++ b/vmail-admin.sh @@ -1,17 +1,8 @@ #!/bin/bash -################################################### -################ DEFINITIONS #################### -database_name=vmail -database_user=root -new_user_quota=2048 #in MB -new_user_enabled=1 -new_user_sendonly=0 -max_quota=4096 #in MB -init_database_user=vmail #User which will read the database +# Load creds: path to .creds file +source /root/scripts/vmail-admin/.creds -################################################### -################ MENUS ########################## menu() { printline @@ -58,7 +49,8 @@ user_menu() echo "2) Delete user" echo "3) Change user password" echo "4) Change user quota" - echo "5) Back to main menu" + echo "5) Cange autosent status" + echo "6) Back to main menu" printline read choose @@ -78,8 +70,11 @@ user_menu() 4) change_quota ;; - 5) + change_autosent + ;; + + 6) menu ;; @@ -260,7 +255,7 @@ switch_case_submenu() check_user_exists() { - user_exists=`mysql -u $database_user -D $database_name -e "select * from accounts where username='$1' and domain='$2';"` + user_exists=`mysql -u $database_user -p"${database_password}" -D $database_name -e "select * from accounts where username='$1' and domain='$2';"` if [ "$user_exists" == "" ]; then echo "User $1@$2 doesn't exist in database!" switch_case_submenu $3 @@ -269,16 +264,16 @@ check_user_exists() check_user_not_existing() { - user_exists=`mysql -u $database_user -D $database_name -e "select * from accounts where username='$1' and domain='$2';"` + user_exists=`mysql -u $database_user -p"${database_password}" -D $database_name -e "select * from accounts where username='$1' and domain='$2';"` if [ "$user_exists" != "" ]; then - echo "User $1@$2 doesn't exist in database!" + echo "User $1@$2 does exist in database!" switch_case_submenu $3 fi } check_domain_exists() { - domain_exists=`mysql -u $database_user -D $database_name -e "select * from domains where domain='$1';"` + domain_exists=`mysql -u $database_user -p"${database_password}" -D $database_name -e "select * from domains where domain='$1';"` if [ "$domain_exists" == "" ]; then echo "Domain $1 doesn't exist in database!" switch_case_submenu $2 @@ -305,7 +300,7 @@ read_alias_input() export_database() { check_database_exists - mysqldump -u $database_user -p$database_password $database_name | gzip > $database_name-export.sql.gz + mysqldump -u $database_user -p"${database_password}" $database_name | gzip > $database_name-export.sql.gz echo "Database has been exported as $database_name-export.sql.gz" database_menu } @@ -313,7 +308,7 @@ export_database() import_database() { - database_exists=`mysql -e "show databases like '$database_name';"` + database_exists=`mysql -u $database_user -p"${database_password}" -e "show databases like '$database_name';"` if [ "$database_exists" == "" ]; then echo "Seems the database $database_name doesn't exist. Creating..." mysql -u $database_user -e "create database $database_name CHARACTER SET 'utf8';"; @@ -337,7 +332,7 @@ import_database() delete_database() { - database_exists=`mysql -e "show databases like '$database_name';"` + database_exists=`mysql -u $database_user -p"${database_password}" -e "show databases like '$database_name';"` if [ "$database_exists" != "" ]; then echo "Are you sure you want to delete database $database_name? Type \"YES\"" read ack @@ -353,7 +348,7 @@ delete_database() init_database() { - database_exists=`mysql -e "show databases like '$database_name';"` + database_exists=`mysql -u $database_user -p"${database_password}" -e "show databases like '$database_name';"` if [ "$database_exists" != "" ]; then echo "The database allready exists!" echo "Returning to menu." @@ -377,17 +372,17 @@ init_database() echo "Passwords don't match!" fi done - mysql -u $database_user -D $database_name -e "CREATE TABLE domains ( id int unsigned NOT NULL AUTO_INCREMENT, domain varchar(255) NOT NULL, PRIMARY KEY (id),UNIQUE KEY (domain));" + mysql -u $database_user -p"${database_password}" -D $database_name -e "CREATE TABLE domains ( id int unsigned NOT NULL AUTO_INCREMENT, domain varchar(255) NOT NULL, PRIMARY KEY (id),UNIQUE KEY (domain));" - mysql -u $database_user -D $database_name -e "CREATE TABLE accounts ( id int unsigned NOT NULL AUTO_INCREMENT, username varchar(64) NOT NULL, + mysql -u $database_user -p"${database_password}" -D $database_name -e "CREATE TABLE accounts ( id int unsigned NOT NULL AUTO_INCREMENT, username varchar(64) NOT NULL, domain varchar(255) NOT NULL, password varchar(255) NOT NULL, quota int unsigned DEFAULT '0', enabled boolean DEFAULT '0', sendonly boolean DEFAULT '0', PRIMARY KEY (id), UNIQUE KEY (username, domain), FOREIGN KEY (domain) REFERENCES domains (domain));" - mysql -u $database_user -D $database_name -e "CREATE TABLE aliases ( id int unsigned NOT NULL AUTO_INCREMENT, source_username varchar(64) NOT NULL, source_domain varchar(255) NOT NULL, + mysql -u $database_user -p"${database_password}" -D $database_name -e "CREATE TABLE aliases ( id int unsigned NOT NULL AUTO_INCREMENT, source_username varchar(64) NOT NULL, source_domain varchar(255) NOT NULL, destination_username varchar(64) NOT NULL, destination_domain varchar(255) NOT NULL, enabled boolean DEFAULT '0', PRIMARY KEY (id), UNIQUE KEY (source_username, source_domain, destination_username, destination_domain), FOREIGN KEY (source_domain) REFERENCES domains (domain));" - mysql -u $database_user -D $database_name -e "CREATE TABLE tlspolicies ( id int unsigned NOT NULL AUTO_INCREMENT, domain varchar(255) NOT NULL, + mysql -u $database_user -p"${database_password}" -D $database_name -e "CREATE TABLE tlspolicies ( id int unsigned NOT NULL AUTO_INCREMENT, domain varchar(255) NOT NULL, policy enum('none', 'may', 'encrypt', 'dane', 'dane-only', 'fingerprint', 'verify', 'secure') NOT NULL, params varchar(255), PRIMARY KEY (id), UNIQUE KEY (domain));" echo "Database $database_name created and initialized." @@ -402,7 +397,7 @@ add_alias() { check_database_exists read_alias_input - mysql -u $database_user -D $database_name -e "insert into aliases (source_username, source_domain, destination_username, destination_domain, enabled) values ('$source_username', '$source_domain', '$destination_username', '$destination_domain', true);" + mysql -u $database_user -p"${database_password}" -D $database_name -e "insert into aliases (source_username, source_domain, destination_username, destination_domain, enabled) values ('$source_username', '$source_domain', '$destination_username', '$destination_domain', true);" echo "Alias $source_username@$source_domain -> $destination_username@$destination_domain has been added" aliases_menu } @@ -416,7 +411,7 @@ delete_alias() read ack if [ "$ack" == "YES" ]; then - mysql -u $database_user -D $database_name -e "delete from aliases where source_username='$source_username' and source_domain='$source_domain' and destination_username='$destination_username' + mysql -u $database_user -p"${database_password}" -D $database_name -e "delete from aliases where source_username='$source_username' and source_domain='$source_domain' and destination_username='$destination_username' and destination_domain='$destination_domain';" echo "Alias deleted." aliases_menu @@ -429,25 +424,25 @@ show_alias_domain() check_database_exists read_domain check_domain_exists $domain "aliases_menu" - show_alias=`mysql -u $database_user -D $database_name -e "select * from aliases where source_domain='$domain' or destination_domain='$domain';"` + show_alias=`mysql -u $database_user -p"${database_password}" -D $database_name -e "select * from aliases where source_domain='$domain' or destination_domain='$domain';"` if [ "$show_alias" == "" ]; then echo "Now aliases for that domain in database!" aliases_menu fi - mysql -u $database_user -D $database_name -e "select * from aliases where source_domain='$domain' or destination_domain='$domain';" + mysql -u $database_user -p"${database_password}" -D $database_name -e "select * from aliases where source_domain='$domain' or destination_domain='$domain';" aliases_menu } show_all_aliases() { check_database_exists - check_aliases=`mysql -u $database_user -D $database_name -e "select * from aliases;"` + check_aliases=`mysql -u $database_user -p"${database_password}" -D $database_name -e "select * from aliases;"` if [ "$check_aliases" == "" ];then echo "No aliases in database!" aliases_menu fi - mysql -u $database_user -D $database_name -e "select * from aliases;" + mysql -u $database_user -p"${database_password}" -D $database_name -e "select * from aliases;" aliases_menu } @@ -465,7 +460,7 @@ add_user() hash=`doveadm pw -s SHA512-CRYPT` - mysql -u $database_user -D $database_name -e "insert into accounts (username, domain, password, quota, enabled, sendonly) values ('$username', '$domain', '$hash', '$new_user_quota', '$new_user_enabled', '$new_user_sendonly');" + mysql -u $database_user -p"${database_password}" -D $database_name -e "insert into accounts (username, domain, password, quota, enabled, sendonly, autosent) values ('$username', '$domain', '$hash', '$new_user_quota', '$new_user_enabled', '$new_user_sendonly', '$new_user_autosent');" printline echo "User $username@$domain has been added!" @@ -488,14 +483,31 @@ change_pass() echo "Changing password" echo "Type in your new password" hash=`doveadm pw -s SHA512-CRYPT` - mysql -u $database_user -D $database_name -e "update accounts set password='$hash' where username='$user';" - echo "Password of user $user changed!" + mysql -u $database_user -p"${database_password}" -D $database_name -e "update accounts set password='$hash' where username='$username' and domain='$domain';" + echo "Password of user $username@$domain changed with password $hash!" user_menu else user_menu fi } +change_autosent() +{ + check_database_exists + read_username + read_domain + check_domain_exists $domain "user_menu" + check_user_exists $username $domain "user_menu" + + echo "Editing $username@$domain auto sent status!" + + echo "What do you want to change the autosent status to?" + read autoSentStatus + mysql -u $database_user -p"${database_password}" -D $database_name -e "update accounts set autosent=$autoSentStatus where username = '$username' AND domain = '$domain';" + echo "autosent satus of user $username@$domain has changed to $autoSentStatus!" + user_menu +} + delete_user() { check_database_exists @@ -513,7 +525,7 @@ delete_user() user_menu fi - mysql -u $database_user -D $database_name -e "delete from accounts where username='$username' and domain='$domain';" + mysql -u $database_user -p"${database_password}" -D $database_name -e "delete from accounts where username='$username' and domain='$domain';" printline echo "User $username@$domain deleted!" @@ -538,7 +550,7 @@ change_quota() printline echo "Changing quota for $username@$domain to $quota MB!" - mysql -u $database_user -D $database_name -e "update accounts set quota='$quota' where username='$username' and domain='$domain';" + mysql -u $database_user -p"${database_password}" -D $database_name -e "update accounts set quota='$quota' where username='$username' and domain='$domain';" user_menu } @@ -547,12 +559,12 @@ change_quota() show_domains() { check_database_exists - domains_exist=`mysql -u $database_user -D $database_name -e "select * from domains;"` + domains_exist=`mysql -u $database_user -p"${database_password}" -D $database_name -e "select * from domains;"` if [ "$domains_exist" == "" ]; then echo "No domains in database!" domain_menu else - mysql -u $database_user -D $database_name -e "select * from domains;" + mysql -u $database_user -p"${database_password}" -D $database_name -e "select * from domains;" domain_menu fi } @@ -561,7 +573,7 @@ show_domain_users() { read_domain check_domain_exists $domain "domain_menu" - mysql -u $database_user -D $database_name -e "select * from accounts where domain='$domain';" + mysql -u $database_user -p"${database_password}" -D $database_name -e "select * from accounts where domain='$domain';" domain_menu } @@ -571,14 +583,14 @@ delete_domain() read_domain check_domain_exists $domain "domain_menu" - domain_user_exists=`mysql -u $database_user -D $database_name -e "select * from accounts where domain='$domain';"` + domain_user_exists=`mysql -u $database_user -p"${database_password}" -D $database_name -e "select * from accounts where domain='$domain';"` if [ "$domain_user_exists" != "" ]; then echo "There are still users for that domain!" echo "Please delete those users first!" domain_menu fi - alias_exists=`mysql -u $database_user -D $database_name -e "select * from aliases where source_domain='$domain' or destination_domain='$domain';"` + alias_exists=`mysql -u $database_user -p"${database_password}" -D $database_name -e "select * from aliases where source_domain='$domain' or destination_domain='$domain';"` if [ "$alias_exists" != "" ]; then echo "There are still aliases for that domain!" echo "Please delete those aliases first!" @@ -593,7 +605,7 @@ delete_domain() domain_menu fi - mysql -u $database_user -D $database_name -e "delete from domains where domain='$domain';" + mysql -u $database_user -p"${database_password}" -D $database_name -e "delete from domains where domain='$domain';" printline echo "Domain $domain has been deleted!" @@ -605,12 +617,12 @@ add_domain() check_database_exists read_domain - domain_exists=`mysql -u $database_user -D $database_name -e "select * from domains where domain='$domain';"` + domain_exists=`mysql -u $database_user -p"${database_password}" -D $database_name -e "select * from domains where domain='$domain';"` if [ "$domain_exists" != "" ]; then echo "Domain $domain exists!" domain_menu fi - mysql -u $database_user -D $database_name -e "insert into domains (domain) values ('$domain');" + mysql -u $database_user -p"${database_password}" -D $database_name -e "insert into domains (domain) values ('$domain');" printline echo "Domain $domain has been added" domain_menu @@ -626,7 +638,7 @@ if [ $database_user == "root" ]; then fi fi -database_exists=`mysql -e "show databases like '$database_name';"` +database_exists=`mysql -u $database_user -p"${database_password}" -e "show databases like '$database_name';"` if [ "$database_exists" == "" ]; then echo "It seems the database $database_name doesn't exist." echo "You can initialize the database in the Database Management Menu"