diff --git a/email_account/email_account b/email_account/email_account index db4af0e..966559c 100755 --- a/email_account/email_account +++ b/email_account/email_account @@ -2,7 +2,7 @@ set -u -# Display usage +# Display usage. usage () { local - progname @@ -12,30 +12,32 @@ usage () echo "$progname emailaccount [emailalias]" echo "$progname -h | --help" echo - echo "Fist form add an email account named emailaccount if it doesn't already exist" - echo "and create an alias named emailalias for this email account if specified" + echo "Fist form adds an email account named emailaccount if it doesn't already exist" + echo "and creates an alias named emailalias for this email account if specified." echo - echo "Second and third form print this help" + echo "Second form prints this help." } -# Test an email is valid and exit if it isn't +# Test an email is valid and exit if it isn't. test_email () { local - user=$(echo "$1" | cut -d '@' -f 1) if [ -z "$user" ] then - echo "Missing user in email account" + echo "Error! Missing user in email account." exit 1 fi domain=$(echo "$1" | cut -d '@' -f 2) if echo "$domain" | grep -E -v "^([[:alnum:]]+\.)+[[:alnum:]]+$" > /dev/null then - echo "Invalid domain for email account" + echo "Error! Invalid domain for email account." exit 1 fi } +# Ask a question to the user. Return 1 if the answer is negative, +# or 0 if it is positive. ask_user_default_no () { local - answer @@ -57,13 +59,13 @@ ask_user_default_no () return 0 } -# Test number of argument is correct and their value are correct also +# Test number of argument is correct and their value are correct also. test_args () { local - user domain first_ask next_ask if [ \( $# -ge 1 -a "$1" = "-h" -a $# -gt 1 \) -o $# -gt 2 ] then - echo "Too many arguments" + echo "Error! Too many arguments." exit 1 fi if [ $# -eq 0 -o "$1" = "-h" -o "$1" = "-help" ] @@ -82,22 +84,22 @@ test_args () aliasdomain="$domain" if [ "$emaildomain" != "$aliasdomain" ] then - echo "Domain of the alias must be identical to the domain of the email account" + echo "Error! Domain of the alias must be identical to the domain of the email account." exit 1 fi fi fi - first_ask="Be aware that you'll need to restart cyrus twice and postfix once. Are you ready ?" - next_ask="Incorrect answer. Are you ready to restart cyrus and postfix ?" + first_ask="Be aware that you'll need to restart cyrus twice and postfix once. Are you ready?" + next_ask="Incorrect answer. Are you ready to restart cyrus and postfix?" ask_user_default_no "$first_ask" "$next_ask" if [ $? -eq 1 ] then - echo "Ok, exiting_" + echo "Ok, exiting…" exit 1 fi } -# Are we root ? +# Are we root? must_sudo () { uid="$(id -u)" @@ -105,28 +107,28 @@ must_sudo () return $? } -# This function try to become root with sudo and execute this script -# NB: This function doesn't return +# This function tries to become root with sudo and execute this script. +# NB: This function doesn't return. try_sudo () { local - ret echo "You aren't root. Trying to use sudo to become root…" - sudo $0 "$@" + sudo $0 "$@" # Try to execute the script with sudo ret=$? if [ ! $ret -eq 0 ] then - echo "You must be root or being able to become root by sudo without password to create an email account or add an email alias" + echo "Error! You must be root or being able to become root by sudo without password to create an email account or add an email alias." fi exit $ret } -# Test cyrus password is ok +# Test cyrus password is OK. test_cyrus_admin () { local - cyruser=$(grep -E "^[[:space:]]*admins:" /etc/imapd.conf | cut -d ':' -f 2- | sed -r "s/[[:alnum:]]+@[[:alnum:].]+//g" | tr -d ' ') cyrpwd=$(cat /root/cyrus_main_admin_password) - testsaslauthd -u $cyruser -p $cyrpwd > /dev/null || { echo "Password for main cyrus admin has changed but has not been modified in /root/" && exit 1 ; } + testsaslauthd -u $cyruser -p $cyrpwd > /dev/null || { echo "Error! Password for main cyrus admin has changed but has not been modified in /root/" && exit 1 ; } } # Save cyrus state and make it cyradm ready, that is save and change @@ -141,14 +143,14 @@ save_cyrus_state_and_become_cyradm_ready () invoke-rc.d cyrus2.2 restart if [ ! $? -eq 0 ] then - echo "Restarting cyrus failed. The requested action coudn't be performed." + echo "Error! Restarting cyrus failed. The requested action coudn't be performed." echo "Look at the logs and restart Cyrus manually." return 1 fi return 0 } -# Ask a password to the user and create the entry in sasldb database +# Ask a password to the user and create the entry in sasldb database. ask_and_create_password () { local - newemailpassword @@ -157,38 +159,38 @@ ask_and_create_password () while [ "$emailpassword" != "$newemailpassword" ] do emailpassword="" - echo "What password do you want for your email account ?" + echo "What password do you want for your email account?" while [ -z "$emailpassword" ] do - echo -n "Password : " + echo -n "Password: " read emailpassword done newemailpassword="" - echo "Re-enter your password to ensure you type it in correctly" + echo "Please re-enter your password to ensure you typed it correctly." while [ -z "$newemailpassword" ] do - echo -n "Password (bis) : " + echo -n "Password (bis): " read newemailpassword done if [ "$emailpassword" != "$newemailpassword" ] then - echo "Password don't match" + echo "Passwords don't match!" fi done echo "$emailpassword" | saslpasswd2 -p -u "$emaildomain" "$emailuser" } -# Check if a password already exist in the sasldb database. +# Check if a password already exists in the sasldb database. # Then ask a password to the user and create the entry in sasldb -# database if password doesn't exist are user want to change it +# database if password doesn't exist are user want to change it. create_sasldb_password () { local - first_ask next_ask sasldblistusers2 | grep "$emailuser@$emaildomain" > /dev/null if [ $? -eq 0 ] then - first_ask="There is already a password for this user, do you want to change it ?" - next_ask="Do you want to change the existing password for your email account ?" + first_ask="There is already a password for this user, do you want to change it?" + next_ask="Do you want to change the existing password for your email account?" ask_user_default_no "$first_ask" "$next_ask" if [ $? -eq 0 ] then @@ -202,7 +204,7 @@ create_sasldb_password () } # Add the domain of the email account to the list of virtual domain -# in cyrus and postfix if necessary +# in cyrus and postfix if necessary. update_virtual_domains () { local - @@ -227,7 +229,7 @@ update_virtual_domains () } # Print the first parameter and then the second parameter at a distance -# of $3 tabs +# of $3 tabs. echo_with_tabs () { local - nbchars nbtabs @@ -242,7 +244,7 @@ echo_with_tabs () echo "$2" } -# Add requested email to postfix virtual_mailbox_maps +# Add requested email to postfix virtual_mailbox_maps. update_postfix_email_account () { local - @@ -262,7 +264,7 @@ update_postfix_email_account () postmap /etc/postfix/vmailbox } -# Add requested alias to postfix virtual_alias_maps +# Add requested alias to postfix virtual_alias_maps. update_email_aliases () { local - @@ -285,7 +287,7 @@ display_infos () else echo "Your email login is $emailuser@$emaildomain and your password $emailpassword" fi - echo -n "supported mechanism for imap authentification are : " + echo -n "Supported mechanism for imap authentification are: " sed -r -n "{s/sasl_mech_list: *(.*)$/\1/;t success;T;: success;p}" /etc/imapd.conf echo -n "The imap server listen on port " imap=$(grep -E "^[^#]+cmd=\"imapd[^#]+listen=\"imap\"" /etc/cyrus.conf) @@ -314,7 +316,7 @@ display_infos () fi echo -n "993 ($security)" fi - echo + echo "." } # Restore cyrus state as it was before making it cyradm ready, that is @@ -324,9 +326,9 @@ restore_cyrus_state () { local - sed -r -i "s/^(.*cmd=\"imapd.* listen=\")localhost:(imap\".*)$/\1\2/" /etc/cyrus.conf - # Ok let's explain that sed line - # First you must understand that for each line all the commands inside - # the {} block and separated by ; are executed + # OK, let's explain the following sed line. + # First you must understand that for each line, all the commands inside + # the {} block and separated by ; are executed. # When the allowplaintext commented line is found, the # is removed by # a s/pattern/replacement/ command. Then, as this substitution is # successful, we jump at success which copy the substituted line in @@ -334,20 +336,20 @@ restore_cyrus_state () # it by the substituted line. We've just deleted the next line. Then, # we print the line in the pattern space. If from the beginning we # have a non allowplaintext line, then T makes us jump to fail and - # print the line in the pattern space (that is the current line) + # print the line in the pattern space (that is the current line). sed -r -n -i "{s/^#([[:space:]]*allowplaintext:.*)$/\1/;t success;T fail;: success;h;n;g;: fail;p}" /etc/imapd.conf - # Same as for allowplaintext above + # Same as above for virtdomains sed -r -n -i "{s/^#([[:space:]]*virtdomains:.*)$/\1/;t success;T fail;: success;h;n;g;: fail;p}" /etc/imapd.conf invoke-rc.d --quiet cyrus2.2 restart if [ ! $? -eq 0 ] then - echo "Restarting cyrus failed" + echo "Error! Restarting cyrus failed." exit 1 fi invoke-rc.d --quiet postfix reload if [ ! $? -eq 0 ] then - echo "Reloading postfix failed" + echo "Error! Reloading postfix failed." exit 1 fi }