Initial commit
This commit is contained in:
		
							
								
								
									
										4
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
				
			|||||||
 | 
					*.swp
 | 
				
			||||||
 | 
					conf/*.conf
 | 
				
			||||||
 | 
					log/*
 | 
				
			||||||
 | 
					messages/*
 | 
				
			||||||
							
								
								
									
										33
									
								
								conf/mail_to_listadmins.conf.sample
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								conf/mail_to_listadmins.conf.sample
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,33 @@
 | 
				
			|||||||
 | 
					# ----------------------------------------------------
 | 
				
			||||||
 | 
					# ---
 | 
				
			||||||
 | 
					# - Default Parameters for script mail_to_listadmins.sh.
 | 
				
			||||||
 | 
					# ---
 | 
				
			||||||
 | 
					# ----------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# - MESSAGE_FILE
 | 
				
			||||||
 | 
					# -
 | 
				
			||||||
 | 
					# - UTF-8 encoded file containing the message that should
 | 
				
			||||||
 | 
					# - be sended to the list administrators
 | 
				
			||||||
 | 
					# -
 | 
				
			||||||
 | 
					# - Default value is empty
 | 
				
			||||||
 | 
					# -
 | 
				
			||||||
 | 
					#MESSAGE_FILE=""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# - SENDER_ADDRESS
 | 
				
			||||||
 | 
					# -
 | 
				
			||||||
 | 
					# - The sender address from which the message to the listadmins
 | 
				
			||||||
 | 
					# - will be dended.
 | 
				
			||||||
 | 
					# -
 | 
				
			||||||
 | 
					# - Defaults value is empty
 | 
				
			||||||
 | 
					# -
 | 
				
			||||||
 | 
					#SENDER_ADDRESS=""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# - SUBJECT
 | 
				
			||||||
 | 
					# -
 | 
				
			||||||
 | 
					# - The subject that will be used with the message that should
 | 
				
			||||||
 | 
					# - be sended to the list administrators
 | 
				
			||||||
 | 
					# -
 | 
				
			||||||
 | 
					# - Default value is empty
 | 
				
			||||||
 | 
					# -
 | 
				
			||||||
 | 
					#SUBJECT=""
 | 
				
			||||||
							
								
								
									
										820
									
								
								mail_to_listadmins.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										820
									
								
								mail_to_listadmins.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,820 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/env bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					working_dir="$(dirname "$(realpath $0)")"
 | 
				
			||||||
 | 
					conf_file="${working_dir}/conf/mail_to_listadmins.conf"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					_date="$(date +%Y-%m-%d-%H%M)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					log_dir="${working_dir}/log"
 | 
				
			||||||
 | 
					log_file="${log_dir}/mail_to_listadmins.${_date}.log"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					schleuder_conf_file="/etc/schleuder/schleuder.yml"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LOCK_DIR="$(mktemp -d)"
 | 
				
			||||||
 | 
					err_msg="${LOCK_DIR}/err_msg.log"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#-----------------------------
 | 
				
			||||||
 | 
					# Some variables definitions
 | 
				
			||||||
 | 
					#-----------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					declare -a schleuder_domains_arr
 | 
				
			||||||
 | 
					declare -a schleuder_lists_arr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					declare -a lists_done
 | 
				
			||||||
 | 
					declare -a lists_failed
 | 
				
			||||||
 | 
					declare -a lists_warn
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#-----------------------------
 | 
				
			||||||
 | 
					# Base Function(s)
 | 
				
			||||||
 | 
					#-----------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					clean_up() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   # Perform program exit housekeeping
 | 
				
			||||||
 | 
					   rm -rf $LOCK_DIR
 | 
				
			||||||
 | 
					   exit $1
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo_log() {
 | 
				
			||||||
 | 
					   echo "$*" >> "$log_file"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo_log_done() {
 | 
				
			||||||
 | 
					   echo "[ done ]    $*" >> "$log_file"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					echo_log_failed() {
 | 
				
			||||||
 | 
					   echo "[ Error ]   $*" >> "$log_file"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					echo_log_skipped() {
 | 
				
			||||||
 | 
					   echo "[ skipped ] $*" >> "$log_file"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echononl(){
 | 
				
			||||||
 | 
					   if $terminal && $LOGGING ; then
 | 
				
			||||||
 | 
					      echo X\\c > /tmp/shprompt$$
 | 
				
			||||||
 | 
					      if [ `wc -c /tmp/shprompt$$ | awk '{print $1}'` -eq 1 ]; then
 | 
				
			||||||
 | 
					         echo -e -n "$*\\c" 1>&2
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					         echo -e -n "$*" 1>&2
 | 
				
			||||||
 | 
					      fi
 | 
				
			||||||
 | 
					      rm /tmp/shprompt$$
 | 
				
			||||||
 | 
					   fi
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fatal(){
 | 
				
			||||||
 | 
					   echo ""
 | 
				
			||||||
 | 
					   if $terminal ; then
 | 
				
			||||||
 | 
					      echo -e "   [ \033[31m\033[1mFatal\033[m ]: $*"
 | 
				
			||||||
 | 
					      echo ""
 | 
				
			||||||
 | 
					      echo -e "   \033[31m\033[1mScript was interupted\033[m!"
 | 
				
			||||||
 | 
					   else
 | 
				
			||||||
 | 
					      echo "   [ Fatal ]: $*"
 | 
				
			||||||
 | 
					      echo ""
 | 
				
			||||||
 | 
					      echo "   Script was terminated...."
 | 
				
			||||||
 | 
					   fi
 | 
				
			||||||
 | 
					   echo ""
 | 
				
			||||||
 | 
					   clean_up 1
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					error (){
 | 
				
			||||||
 | 
					   echo ""
 | 
				
			||||||
 | 
					   if $terminal ; then
 | 
				
			||||||
 | 
					      echo -e "   [ \033[31m\033[1mError\033[m ]: $*"
 | 
				
			||||||
 | 
					   else
 | 
				
			||||||
 | 
					      echo "   [ Error ]: $*"
 | 
				
			||||||
 | 
					   fi
 | 
				
			||||||
 | 
					   echo ""
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					warn (){
 | 
				
			||||||
 | 
					   echo ""
 | 
				
			||||||
 | 
					   if $terminal ; then
 | 
				
			||||||
 | 
					      echo -e "   [ \033[33m\033[1mWarning\033[m ]: $*"
 | 
				
			||||||
 | 
					   else
 | 
				
			||||||
 | 
					      echo "   [ Warning ]: $*"
 | 
				
			||||||
 | 
					   fi
 | 
				
			||||||
 | 
					   echo ""
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					info (){
 | 
				
			||||||
 | 
					   echo ""
 | 
				
			||||||
 | 
					   if $terminal ; then
 | 
				
			||||||
 | 
					      echo -e "   [ \033[32m\033[1mInfo\033[m ]: $*"
 | 
				
			||||||
 | 
					   else
 | 
				
			||||||
 | 
					      echo "   [ Info ]: $*"
 | 
				
			||||||
 | 
					   fi
 | 
				
			||||||
 | 
					   echo ""
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo_done() {
 | 
				
			||||||
 | 
					   if $terminal ; then
 | 
				
			||||||
 | 
					      echo -e "\033[75G[ \033[32mdone\033[m ]"
 | 
				
			||||||
 | 
					   else
 | 
				
			||||||
 | 
					      echo " [ done ]"
 | 
				
			||||||
 | 
					   fi
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo_failed(){
 | 
				
			||||||
 | 
					   if $terminal && $LOGGING ; then
 | 
				
			||||||
 | 
					      echo -e "\033[75G[ \033[1;31mfailed\033[m ]"
 | 
				
			||||||
 | 
					   else
 | 
				
			||||||
 | 
					      echo " [ failed ]"
 | 
				
			||||||
 | 
					   fi
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo_skipped() {
 | 
				
			||||||
 | 
					   if $terminal && $LOGGING ; then
 | 
				
			||||||
 | 
					      echo -e "\033[75G[ \033[33m\033[1mskipped\033[m ]"
 | 
				
			||||||
 | 
					   else
 | 
				
			||||||
 | 
					      echo " [ skipped ]"
 | 
				
			||||||
 | 
					   fi
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function usage () {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   if [ -n "$1" ];then
 | 
				
			||||||
 | 
					      echo -e "\nError: $1"
 | 
				
			||||||
 | 
					   fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						echo -e "
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Usage: \033[1m$(basename $0)  [-h] [<-s email-address>] [-f <message-file>]\033[m
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$(basename $0) sends a message, reading from a given file, to all list administrators of
 | 
				
			||||||
 | 
					all supported schleuder3 lists.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The given message file (and within the containing text) must be UTF8 encoded. In the
 | 
				
			||||||
 | 
					message, you can use the parameter string '@LIST@' which will be replaced by the 
 | 
				
			||||||
 | 
					full qualified list address for the appropriate list.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					\033[1mNotice\033[m
 | 
				
			||||||
 | 
					The keyring of the user invoking this script (for now only user 'root' is possible)
 | 
				
			||||||
 | 
					must contain the private key for the given sender address. The script will ask you
 | 
				
			||||||
 | 
					for the concerning passwort.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The message file may contain string \033[1m@LIST@\033[m which will be replaced 
 | 
				
			||||||
 | 
					by the list address.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Parameters not given on the commandline will be interactivly ask for.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Optinal Control Options:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   -h
 | 
				
			||||||
 | 
					      print that help text
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   -b Subject
 | 
				
			||||||
 | 
					      subject name of the e-mail.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   -p Password
 | 
				
			||||||
 | 
					      Password for the secret key of the sender address. Its \033[1mhighly not recommend\033[m
 | 
				
			||||||
 | 
					      to use this parameter, because the password is prompted out and maybe also
 | 
				
			||||||
 | 
					      saved in the shell's history file. If omitting this option, the script will
 | 
				
			||||||
 | 
					      ask for the password. The password will not be prompted at the commandline.
 | 
				
			||||||
 | 
					         
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   -s Sender Adrress
 | 
				
			||||||
 | 
					      name of the sender e-mail address.
 | 
				
			||||||
 | 
					          
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   -f Message File
 | 
				
			||||||
 | 
					      full qualified path tio the file containing the message
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Example:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   $(basename $0) -b "Listsoftware has changed" -f /root/msg_listadmin.txt -s support@so36.net 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"
 | 
				
			||||||
 | 
					clean_up 2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# - See https://gist.github.com/epiloque/8cf512c6d64641bde388
 | 
				
			||||||
 | 
					parse_yaml() {
 | 
				
			||||||
 | 
					    local prefix=$2
 | 
				
			||||||
 | 
					    local s
 | 
				
			||||||
 | 
					    local w
 | 
				
			||||||
 | 
					    local fs
 | 
				
			||||||
 | 
					    s='[[:space:]]*'
 | 
				
			||||||
 | 
					    w='[a-zA-Z0-9_]*'
 | 
				
			||||||
 | 
					    #fs="$(echo @|tr @ '\034')"
 | 
				
			||||||
 | 
						 fs="$(echo @|tr @ '\034'|tr -d '\015')"
 | 
				
			||||||
 | 
					    sed -ne "s|^\($s\)\($w\)$s:$s\"\(.*\)\"$s\$|\1$fs\2$fs\3|p" \
 | 
				
			||||||
 | 
					        -e "s|^\($s\)\($w\)$s[:-]$s\(.*\)$s\$|\1$fs\2$fs\3|p" "$1" |
 | 
				
			||||||
 | 
					    awk -F"$fs" '{
 | 
				
			||||||
 | 
					    indent = length($1)/2;
 | 
				
			||||||
 | 
					    vname[indent] = $2;
 | 
				
			||||||
 | 
					    for (i in vname) {if (i > indent) {delete vname[i]}}
 | 
				
			||||||
 | 
					        if (length($3) > 0) {
 | 
				
			||||||
 | 
					            vn=""; for (i=0; i<indent; i++) {vn=(vn)(vname[i])("_")}
 | 
				
			||||||
 | 
					            printf("%s%s%s=(\"%s\")\n", "'"$prefix"'",vn, $2, $3);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }' | sed 's/_=/+=/g'
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [[ ! -f "$schleuder_conf_file" ]]; then
 | 
				
			||||||
 | 
						fatal "Configuration file '$(basename ${schleuder_conf_file})' not found!"
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
						eval $(parse_yaml "$schleuder_conf_file" "schleuder_" )
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# - Running in a terminal?
 | 
				
			||||||
 | 
					# -
 | 
				
			||||||
 | 
					if [[ -t 1 ]] ; then
 | 
				
			||||||
 | 
					   terminal=true
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					   terminal=false
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#-----------------------------
 | 
				
			||||||
 | 
					# Some tests
 | 
				
			||||||
 | 
					#-----------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					schleuder_user="$(stat -c '%U' "${schleuder_lists_dir}")"
 | 
				
			||||||
 | 
					schleuder_group="$(stat -c '%G' "${schleuder_lists_dir}")"
 | 
				
			||||||
 | 
					if ! id -u "$schleuder_user" > "$err_msg" 2>&1; then
 | 
				
			||||||
 | 
						error "$(cat "$err_msg")"
 | 
				
			||||||
 | 
						fatal "(Schleuder) User '$schleuder_user' does not exists"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#-----------------------------
 | 
				
			||||||
 | 
					# Read default values from script configuration file
 | 
				
			||||||
 | 
					#-----------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SENDER_ADDRESS=""
 | 
				
			||||||
 | 
					MESSAGE_FILE=""
 | 
				
			||||||
 | 
					SUBJECT=""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo ""
 | 
				
			||||||
 | 
					echononl "  Loading default Configuration values from $(basename ${conf_file}).."
 | 
				
			||||||
 | 
					if [[ ! -f "$conf_file" ]]; then
 | 
				
			||||||
 | 
					   echo_skipped
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					   source "${conf_file}" > $err_msg 2>&1
 | 
				
			||||||
 | 
					   if [[ $? -eq 0 ]]; then
 | 
				
			||||||
 | 
					      echo_done
 | 
				
			||||||
 | 
					   else
 | 
				
			||||||
 | 
					      echo_failed
 | 
				
			||||||
 | 
					      fatal "$(cat $err_msg)"
 | 
				
			||||||
 | 
					   fi
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[ -n "$SENDER_ADDRESS" ]] && default_sender_address="$SENDER_ADDRESS"
 | 
				
			||||||
 | 
					[[ -n "$MESSAGE_FILE" ]] && default_orig_msg_file="$MESSAGE_FILE"
 | 
				
			||||||
 | 
					[[ -n "$SUBJECT" ]] && default_subject="$SUBJECT"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#-----------------------------
 | 
				
			||||||
 | 
					# Read Commandline Parameters
 | 
				
			||||||
 | 
					#-----------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					subject=""
 | 
				
			||||||
 | 
					sender_address=""
 | 
				
			||||||
 | 
					gpg_pw=""
 | 
				
			||||||
 | 
					orig_msg_file=""
 | 
				
			||||||
 | 
					while getopts b:hf:p:s: opt ; do
 | 
				
			||||||
 | 
					   case $opt in
 | 
				
			||||||
 | 
					      b) subject="$OPTARG"
 | 
				
			||||||
 | 
					         ;;
 | 
				
			||||||
 | 
					      s) sender_address="$OPTARG"
 | 
				
			||||||
 | 
					         ;;
 | 
				
			||||||
 | 
					      p) gpg_pw="$OPTARG"
 | 
				
			||||||
 | 
					         ;;
 | 
				
			||||||
 | 
					      f) orig_msg_file="$OPTARG"
 | 
				
			||||||
 | 
					         ;;
 | 
				
			||||||
 | 
					      h) usage
 | 
				
			||||||
 | 
					          ;;
 | 
				
			||||||
 | 
					      *) usage
 | 
				
			||||||
 | 
					   esac
 | 
				
			||||||
 | 
					done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [[ -z "$orig_msg_file" ]] ; then
 | 
				
			||||||
 | 
						echo ""
 | 
				
			||||||
 | 
						echo -e "\033[32m--\033[m"
 | 
				
			||||||
 | 
						echo ""
 | 
				
			||||||
 | 
						echo "Enter full qualified file name containing the message"
 | 
				
			||||||
 | 
						echo "you want to send to the list admins."
 | 
				
			||||||
 | 
						echo ""
 | 
				
			||||||
 | 
						orig_msg_file=""
 | 
				
			||||||
 | 
						if [[ -n "$default_orig_msg_file" ]]; then
 | 
				
			||||||
 | 
							echononl "Message file [$default_orig_msg_file]: "
 | 
				
			||||||
 | 
							read orig_msg_file
 | 
				
			||||||
 | 
							if [[ -z "$orig_msg_file" ]]; then
 | 
				
			||||||
 | 
								orig_msg_file="$default_orig_msg_file"
 | 
				
			||||||
 | 
							fi
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							while [[ -z "$orig_msg_file" ]] ; do
 | 
				
			||||||
 | 
								echononl "Message file: "
 | 
				
			||||||
 | 
								read orig_msg_file
 | 
				
			||||||
 | 
								if [[ -z "$orig_msg_file" ]]; then
 | 
				
			||||||
 | 
									echo -e "\n   \033[33m\033[1mMessage file is required!\033[m\n"
 | 
				
			||||||
 | 
								fi
 | 
				
			||||||
 | 
							done
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [[ ! -f "$orig_msg_file" ]]; then   
 | 
				
			||||||
 | 
					   fatal "Message file \033[1m$orig_msg_file\033[m not found!"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [[ -z "$subject" ]]; then
 | 
				
			||||||
 | 
						echo ""
 | 
				
			||||||
 | 
						echo -e "\033[32m--\033[m"
 | 
				
			||||||
 | 
						echo ""
 | 
				
			||||||
 | 
						echo "Enter the subject for sending the info e-mails."
 | 
				
			||||||
 | 
						echo ""
 | 
				
			||||||
 | 
						subject=""
 | 
				
			||||||
 | 
						if [[ -n "$default_subject" ]]; then
 | 
				
			||||||
 | 
							echononl "Subject [$default_subject]: "
 | 
				
			||||||
 | 
							read subject
 | 
				
			||||||
 | 
							if [[ -z "$subject" ]]; then
 | 
				
			||||||
 | 
								subject="$default_subject"
 | 
				
			||||||
 | 
							fi
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							while [[ -z "$subject" ]] ; do
 | 
				
			||||||
 | 
								echononl "Subject: "
 | 
				
			||||||
 | 
								read subject
 | 
				
			||||||
 | 
								if [[ -z "" ]]; then
 | 
				
			||||||
 | 
									echo -e "\n   \033[33m\033[1mSender e-mail address is required!\033[m\n"
 | 
				
			||||||
 | 
								fi
 | 
				
			||||||
 | 
							done
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# - To encode a header using this technique you must use this format:
 | 
				
			||||||
 | 
					# -
 | 
				
			||||||
 | 
					# -    =?charset?encoding?encoded-text?=
 | 
				
			||||||
 | 
					# -
 | 
				
			||||||
 | 
					# - The encoding must be either B or Q, these mean base 64 and quoted-printable respectively. 
 | 
				
			||||||
 | 
					# - You can read the RFC 1342 document for more information about how they work.
 | 
				
			||||||
 | 
					# -
 | 
				
			||||||
 | 
					subject_encoded=""
 | 
				
			||||||
 | 
					if echo "$subject" 2> /dev/null | file -i - | grep -i -q utf-8 ; then
 | 
				
			||||||
 | 
					   subject_encoded="=?UTF-8?B?$(echo "$subject" | base64)?="
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [[ -z "$sender_address" ]] ; then
 | 
				
			||||||
 | 
						echo ""
 | 
				
			||||||
 | 
						echo -e "\033[32m--\033[m"
 | 
				
			||||||
 | 
						echo ""
 | 
				
			||||||
 | 
						echo "Enter the sender e-mail address you want to use for sending the info e-mails."
 | 
				
			||||||
 | 
						echo ""
 | 
				
			||||||
 | 
						sender_address=""
 | 
				
			||||||
 | 
						if [[ -n "$default_sender_address" ]]; then
 | 
				
			||||||
 | 
							echononl "Sender e-mail [$default_sender_address]: "
 | 
				
			||||||
 | 
							read sender_address
 | 
				
			||||||
 | 
							if [[ -z "$sender_address" ]]; then
 | 
				
			||||||
 | 
								sender_address="$default_sender_address"
 | 
				
			||||||
 | 
							fi
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							while [[ -z "$sender_address" ]] ; do
 | 
				
			||||||
 | 
								echononl "Sender e-mail: "
 | 
				
			||||||
 | 
								read sender_address
 | 
				
			||||||
 | 
								if [[ -z "" ]]; then
 | 
				
			||||||
 | 
									echo -e "\n   \033[33m\033[1mSender e-mail address is required!\033[m\n"
 | 
				
			||||||
 | 
								fi
 | 
				
			||||||
 | 
							done
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# - Secret Key for $sender_address must be present
 | 
				
			||||||
 | 
					# -
 | 
				
			||||||
 | 
					if ! gpg  --list-secret-keys "${sender_address}" > /dev/null 2>&1 ; then
 | 
				
			||||||
 | 
						fatal "No secret key for id \"${sender_address}\" found"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [[ -z "$gpg_pw" ]]; then
 | 
				
			||||||
 | 
					   _gpg_pw_1="X"
 | 
				
			||||||
 | 
					   _gpg_pw_2="Y"
 | 
				
			||||||
 | 
					   echo ""
 | 
				
			||||||
 | 
					   echo -e "\033[32m--\033[m"
 | 
				
			||||||
 | 
					   echo ""
 | 
				
			||||||
 | 
					   echo "Enter gpg password for ${sender_address}. The password will not"
 | 
				
			||||||
 | 
					   echo "be shown at the command line"
 | 
				
			||||||
 | 
					   echo ""
 | 
				
			||||||
 | 
					   while [[ "$_gpg_pw_1" != "$_gpg_pw_2" ]] ; do
 | 
				
			||||||
 | 
					      echononl "Password: "
 | 
				
			||||||
 | 
					      read -s _gpg_pw_1
 | 
				
			||||||
 | 
					      echo
 | 
				
			||||||
 | 
					      if [ "X$_gpg_pw_1" = "X" ]; then
 | 
				
			||||||
 | 
					         echo -e "\n   \033[33m\033[1mPassword is required!\033[m\n"
 | 
				
			||||||
 | 
					         continue
 | 
				
			||||||
 | 
					      fi
 | 
				
			||||||
 | 
					      echononl "Repeat password: "
 | 
				
			||||||
 | 
					      read -s _gpg_pw_2
 | 
				
			||||||
 | 
					      echo
 | 
				
			||||||
 | 
					      if [ "X$_gpg_pw_2" = "X" ]; then
 | 
				
			||||||
 | 
					         echo -e "\n   \033[33m\033[1mPassword is required!\033[m\n"
 | 
				
			||||||
 | 
					         continue
 | 
				
			||||||
 | 
					      fi
 | 
				
			||||||
 | 
					      if [ "$_gpg_pw_1" != "$_gpg_pw_2" ];then
 | 
				
			||||||
 | 
					         echo -e "\n\t\033[33m\033[1mThe given passwords differs!\033[m\n"
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					         gpg_pw=$_gpg_pw_1
 | 
				
			||||||
 | 
					      fi
 | 
				
			||||||
 | 
					   done
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					gpg-connect-agent reloadagent /bye > /dev/null 2>&1
 | 
				
			||||||
 | 
					if ! $(echo "$gpg_pw" | gpg --trust-model=always --pinentry-mode loopback -o /dev/null --local-user $sender_address --passphrase $gpg_pw -as - > /dev/null 2>&1) ; then 
 | 
				
			||||||
 | 
					   fatal "Password does not match user id '${sender_address}'!"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					clear
 | 
				
			||||||
 | 
					echo ""
 | 
				
			||||||
 | 
					echo -e "\033[32m--\033[m"
 | 
				
			||||||
 | 
					echo ""
 | 
				
			||||||
 | 
					echo ""
 | 
				
			||||||
 | 
					echo -e "   \033[1;32mSettings for script \033[1m$(basename "$0")\033[m"
 | 
				
			||||||
 | 
					echo ""
 | 
				
			||||||
 | 
					echo -e "   Sender Address...................: $sender_address"
 | 
				
			||||||
 | 
					echo -e "   E-Mail Subject...................: $subject"
 | 
				
			||||||
 | 
					if [[ -n "$subject_encoded" ]] ; then
 | 
				
			||||||
 | 
					   echo -e "   E-Mail Subject (utf-8 encoded)...: $subject_encoded"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					echo -e "   File containing the message......: $orig_msg_file"
 | 
				
			||||||
 | 
					echo ""
 | 
				
			||||||
 | 
					echo -e "   Message: \n\n\033[1m$(cat "$orig_msg_file")\033[m\n"
 | 
				
			||||||
 | 
					echo ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo ""
 | 
				
			||||||
 | 
					echononl "Type upper case \033[1;37mYES\033[m to continue executing this script: "
 | 
				
			||||||
 | 
					read OK
 | 
				
			||||||
 | 
					if [[ "$OK" = "YES" ]] ; then
 | 
				
			||||||
 | 
					   echo ""
 | 
				
			||||||
 | 
					   echo -e "\033[32m--\033[m"
 | 
				
			||||||
 | 
					   echo ""
 | 
				
			||||||
 | 
					   echo -e "   \033[32m----------\033[m"
 | 
				
			||||||
 | 
					   echo -e "   \033[1mStarting Script to inform all Listadmins\033[m"
 | 
				
			||||||
 | 
					   echo -e "   \033[32m----------\033[m"
 | 
				
			||||||
 | 
					   echo_log "# ----------------------------------------------------------------"
 | 
				
			||||||
 | 
					   echo_log "# - Log output of script '$(basename $0)' at $_date"
 | 
				
			||||||
 | 
					   echo_log "# ----------------------------------------------------------------"
 | 
				
			||||||
 | 
						echo_log ""
 | 
				
			||||||
 | 
						echo_log "----------"
 | 
				
			||||||
 | 
						echo_log "Settings for script $(basename "$0"):"
 | 
				
			||||||
 | 
						echo_log "----------"
 | 
				
			||||||
 | 
						echo_log ""
 | 
				
			||||||
 | 
						echo_log "Sender Address...................: $sender_address"
 | 
				
			||||||
 | 
						echo_log "E-Mail Subject...................: $subject"
 | 
				
			||||||
 | 
						if [[ -n "$subject_encoded" ]] ; then
 | 
				
			||||||
 | 
							echo_log "E-Mail Subject (utf-8 encoded)...: $subject_encoded"
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
						echo_log "File containing the message......: $orig_msg_file"
 | 
				
			||||||
 | 
						echo_log ""
 | 
				
			||||||
 | 
						echo_log "Message: "
 | 
				
			||||||
 | 
						echo_log "--"
 | 
				
			||||||
 | 
						echo_log "$(cat "$orig_msg_file")"
 | 
				
			||||||
 | 
						echo_log "--"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					   fatal "Abort by user request - Answer as not 'YES'"
 | 
				
			||||||
 | 
					fio ""
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					echo ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echononl "   Create log directory"
 | 
				
			||||||
 | 
					if [[ ! -d "$log_dir" ]]; then
 | 
				
			||||||
 | 
					   mkdir "$log_dir" > /dev/null 2>&1
 | 
				
			||||||
 | 
					   if [[ $? -ne 0 ]]; then
 | 
				
			||||||
 | 
					      echo_failed
 | 
				
			||||||
 | 
					   else
 | 
				
			||||||
 | 
					      echo_done
 | 
				
			||||||
 | 
					   fi
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					   echo_skipped
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo ""
 | 
				
			||||||
 | 
					echo ""
 | 
				
			||||||
 | 
					echo -e "   \033[32m----------\033[m"
 | 
				
			||||||
 | 
					echo -e "   \033[1mSummary Lists at $(hostname -f)\033[m"
 | 
				
			||||||
 | 
					echo -e "   \033[32m----------\033[m"
 | 
				
			||||||
 | 
					echo ""
 | 
				
			||||||
 | 
					echo_log ""
 | 
				
			||||||
 | 
					echo_log ""
 | 
				
			||||||
 | 
					echo_log "----------"
 | 
				
			||||||
 | 
					echo_log "Summary Lists at $(hostname -f)"
 | 
				
			||||||
 | 
					echo_log "----------"
 | 
				
			||||||
 | 
					echo_log
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# - Get Schleuder domains
 | 
				
			||||||
 | 
					# -
 | 
				
			||||||
 | 
					while IFS= read -r -d '' _dir ; do
 | 
				
			||||||
 | 
						schleuder_domains_arr+=("$(basename "$_dir")")   
 | 
				
			||||||
 | 
					done < <(find "$schleuder_lists_dir" -mindepth 1 -maxdepth 1 -type d -print0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo_log "Schleuder Domains:"
 | 
				
			||||||
 | 
					echo -e "   \033[32m\033[1mSchleuder Domains\033[m:"
 | 
				
			||||||
 | 
					for _domain in ${schleuder_domains_arr[@]} ; do
 | 
				
			||||||
 | 
						echo_log "   $_domain"
 | 
				
			||||||
 | 
						echo "      $_domain"
 | 
				
			||||||
 | 
					done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# - Get Schleuder lists
 | 
				
			||||||
 | 
					# -
 | 
				
			||||||
 | 
					for _domain in ${schleuder_domains_arr[@]} ; do
 | 
				
			||||||
 | 
						while IFS= read -r -d '' _list ; do
 | 
				
			||||||
 | 
							schleuder_lists_arr+=("$_domain:$(basename "$_list")")
 | 
				
			||||||
 | 
						done < <(find "${schleuder_lists_dir}/${_domain}" -mindepth 1 -maxdepth 1 -type d -print0 | sort -z )
 | 
				
			||||||
 | 
					done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo_log ""
 | 
				
			||||||
 | 
					echo_log "Schleuder Lists"
 | 
				
			||||||
 | 
					echo -e "\n   \033[32m\033[1mSchleuder Lists\033[m:"
 | 
				
			||||||
 | 
					for _val in "${schleuder_lists_arr[@]}" ; do
 | 
				
			||||||
 | 
						IFS=':' read -a _val_arr <<< "${_val}"
 | 
				
			||||||
 | 
						_domain="${_val_arr[0]}"
 | 
				
			||||||
 | 
						_list="${_val_arr[1]}"
 | 
				
			||||||
 | 
						if [[ -n "$_last_domain" ]] && [[ "$_last_domain" != "$_domain" ]] ; then
 | 
				
			||||||
 | 
							echo_log ""
 | 
				
			||||||
 | 
							echo ""
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
						echo_log "   ${_domain}: ${_list}"
 | 
				
			||||||
 | 
						echo "      ${_domain}: ${_list}"
 | 
				
			||||||
 | 
						_last_domain="$_domain"
 | 
				
			||||||
 | 
					done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo ""
 | 
				
			||||||
 | 
					echo ""
 | 
				
			||||||
 | 
					echo -e "   \033[32m----------\033[m"
 | 
				
			||||||
 | 
					echo -e "   \033[1mMain part of script: inform list admins\033[m"
 | 
				
			||||||
 | 
					echo -e "   \033[32m----------\033[m"
 | 
				
			||||||
 | 
					echo_log ""
 | 
				
			||||||
 | 
					echo_log ""
 | 
				
			||||||
 | 
					echo_log "----------"
 | 
				
			||||||
 | 
					echo_log "Main part of script: inform list admins"
 | 
				
			||||||
 | 
					echo_log "----------"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# - Export key of $sender_address into temporary directory ($LOCK_DIR)
 | 
				
			||||||
 | 
					# -
 | 
				
			||||||
 | 
					#echononl "   Export public key '${sender_address}'.."
 | 
				
			||||||
 | 
					#gpg -a --export $sender_address > ${LOCK_DIR}/${sender_address}.asc 2> "$err_msg"
 | 
				
			||||||
 | 
					#if [[ $? -ne 0 ]]; then
 | 
				
			||||||
 | 
					#	echo_log_failed "Export public key '${sender_address}'"
 | 
				
			||||||
 | 
					#	echo_log "$(cat "$err_msg")"
 | 
				
			||||||
 | 
					#	echo_failed
 | 
				
			||||||
 | 
					#	error "$(cat "$err_msg")"
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					#	echo_done
 | 
				
			||||||
 | 
					#	echo_log_done "Export public key '${sender_address}'"
 | 
				
			||||||
 | 
					#fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					for _val in "${schleuder_lists_arr[@]}" ; do
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						_missing_key=false
 | 
				
			||||||
 | 
					   _message_prepared=false
 | 
				
			||||||
 | 
					   _message_encrypted=false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						IFS=':' read -a _val_arr <<< "${_val}"
 | 
				
			||||||
 | 
						_domain="${_val_arr[0]}"
 | 
				
			||||||
 | 
						_list="${_val_arr[1]}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   msg_file="${LOCK_DIR}/msg-${_list}-${_domain}.txt"
 | 
				
			||||||
 | 
					   msg_file_encrypted="${LOCK_DIR}/msg_encrypted-${_list}-${_domain}.asc"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   echo_log ""
 | 
				
			||||||
 | 
					   echo_log "${_list}@${_domain}:"
 | 
				
			||||||
 | 
						echo -e "\n   \033[32m\033[1m${_domain} - ${_list}\033[m:"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   # - Copy original message in tmp folder ($LOCK_DIR)
 | 
				
			||||||
 | 
					   # -
 | 
				
			||||||
 | 
					   cp "$orig_msg_file" "$msg_file" > "$err_msg" 2>&1
 | 
				
			||||||
 | 
					   if [[ $? -ne 0 ]]; then
 | 
				
			||||||
 | 
					      echo_log "$(cat "$err_msg")"
 | 
				
			||||||
 | 
					      error "$(cat "$err_msg")"
 | 
				
			||||||
 | 
					      lists_failed+=("${_list}@$_domain")
 | 
				
			||||||
 | 
					      continue
 | 
				
			||||||
 | 
					   fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						echononl "      Add List Key to keyring of 'root'"
 | 
				
			||||||
 | 
						if ! gpg  -k "${_list}@$_domain" > /dev/null 2>&1 ; then
 | 
				
			||||||
 | 
							gpg --batch --yes --home "$_list_dir" -a --export ${_list}@$_domain | gpg --import
 | 
				
			||||||
 | 
							if [[ $? -ne 0 ]]; then
 | 
				
			||||||
 | 
					         echo_log_failed "Add List Key to keyring of 'root'"
 | 
				
			||||||
 | 
								echo_failed
 | 
				
			||||||
 | 
					         lists_failed+=("${_list}@$_domain")
 | 
				
			||||||
 | 
					         continue
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
					         echo_log_done "Add List Key to keyring of 'root'"
 | 
				
			||||||
 | 
								echo_done
 | 
				
			||||||
 | 
							fi
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
					      echo_log_skipped "Add List Key to keyring of 'root'"
 | 
				
			||||||
 | 
							echo_skipped
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# - Check if gpg key of $sender_address is part of the keyring. Add key if missing
 | 
				
			||||||
 | 
					   # -
 | 
				
			||||||
 | 
						_list_dir="${schleuder_lists_dir}/${_domain}/${_list}"
 | 
				
			||||||
 | 
						echononl "      Adding key '$sender_address' to keyring.."
 | 
				
			||||||
 | 
						if ! gpg --home "$_list_dir" -k "$sender_address" > /dev/null 2>&1 ; then
 | 
				
			||||||
 | 
							#gpg --batch --yes --home "$_list_dir" --import /home/ckubu/support.so36.net.asc > "$err_msg" 2>&1
 | 
				
			||||||
 | 
							gpg --batch --yes -a --export "$sender_address" | gpg --home "$_list_dir" --import > "$err_msg" 2>&1
 | 
				
			||||||
 | 
							if [[ $? -ne 0 ]]; then
 | 
				
			||||||
 | 
					         echo_log_failed "Adding key '$sender_address' to keyring"
 | 
				
			||||||
 | 
					         echo_log "$(cat "$err_msg")"
 | 
				
			||||||
 | 
								echo_failed
 | 
				
			||||||
 | 
								error	"$(cat "$err_msg")"
 | 
				
			||||||
 | 
					         lists_failed+=("${_list}@$_domain")
 | 
				
			||||||
 | 
					         continue
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
					         echo_log_done "Adding key '$sender_address' to keyring"
 | 
				
			||||||
 | 
								echo_done
 | 
				
			||||||
 | 
							fi
 | 
				
			||||||
 | 
							_missing_key=true
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
					      echo_log_skipped "Adding key '$sender_address' to keyring"
 | 
				
			||||||
 | 
							echo_skipped
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   echononl "      Adjust message file for list.."
 | 
				
			||||||
 | 
					   perl -i -n -p -e "s/\@LIST\@/${_list}\@${_domain}/g" "$msg_file"  > "$err_msg" 2>&1
 | 
				
			||||||
 | 
					   if [[ $? -ne 0 ]]; then
 | 
				
			||||||
 | 
					      echo_log_failed "Adjust message file for list"
 | 
				
			||||||
 | 
					      echo_log "$(cat "$err_msg")"
 | 
				
			||||||
 | 
					      echo_failed
 | 
				
			||||||
 | 
					      error "$(cat "$err_msg")"
 | 
				
			||||||
 | 
					      lists_failed+=("${_list}@$_domain")
 | 
				
			||||||
 | 
					   else
 | 
				
			||||||
 | 
					      echo_log_done "Adjust message file for list"
 | 
				
			||||||
 | 
					      echo_done
 | 
				
			||||||
 | 
					      _message_prepared=true
 | 
				
			||||||
 | 
					   fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   echononl "      Encrypt and sign message for list.."
 | 
				
			||||||
 | 
					   if $_message_prepared ; then
 | 
				
			||||||
 | 
					      gpg --trust-model=always --pinentry-mode loopback --passphrase $gpg_pw -a -se -u "${sender_address}" -r "${_list}@$_domain" -o "${msg_file_encrypted}" "${msg_file}" > "$err_msg" 2>&1
 | 
				
			||||||
 | 
					      if [[ $? -ne 0 ]]; then
 | 
				
			||||||
 | 
					         echo_log_failed "Encrypt and sign message for list"
 | 
				
			||||||
 | 
					         echo_log "$(cat "$err_msg")"
 | 
				
			||||||
 | 
					         echo_failed
 | 
				
			||||||
 | 
					         error	"$(cat "$err_msg")"
 | 
				
			||||||
 | 
					         lists_failed+=("${_list}@$_domain")
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					         echo_log_done "Encrypt and sign message for list"
 | 
				
			||||||
 | 
					         echo_done
 | 
				
			||||||
 | 
					         _message_encrypted=true
 | 
				
			||||||
 | 
					      fi
 | 
				
			||||||
 | 
					   fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   if $_message_encrypted ; then
 | 
				
			||||||
 | 
					      boundery_1="$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 33 | head -n 1)"
 | 
				
			||||||
 | 
					      boundery_2="$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 33 | head -n 1)"
 | 
				
			||||||
 | 
					      message_id="$(cat /dev/urandom | tr -dc 'a-f0-9' | fold -w 8 | head -n 1)-$(cat /dev/urandom | tr -dc 'a-f0-9' | fold -w 4 | head -n 1)-$(cat /dev/urandom | tr -dc 'a-f0-9' | fold -w 4 | head -n 1)-$(cat /dev/urandom | tr -dc 'a-f0-9' | fold -w 4 | head -n 1)-$(cat /dev/urandom | tr -dc 'a-f0-9' | fold -w 12 | head -n 1)@so36.net"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if [[ -n "$subject_encoded" ]] ; then
 | 
				
			||||||
 | 
					         subject="$subject_encoded"
 | 
				
			||||||
 | 
					      fi
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					      cat <<EOF > "${LOCK_DIR}/e-mail-${_list}-${_domain}.txt"
 | 
				
			||||||
 | 
					Content-Type: multipart/mixed; boundary="$boundery_1";
 | 
				
			||||||
 | 
					 protected-headers="v1"
 | 
				
			||||||
 | 
					From: so36.NET <support@so36.net>
 | 
				
			||||||
 | 
					To: ${_list}-owner@$_domain
 | 
				
			||||||
 | 
					Date: $(date +"%a, %d %b %Y %H:%M:%S %z")
 | 
				
			||||||
 | 
					Message-ID: <$message_id>
 | 
				
			||||||
 | 
					Subject: $subject
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--$boundery_1
 | 
				
			||||||
 | 
					Content-Type: multipart/mixed; boundary="$boundery_2"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--$boundery_2
 | 
				
			||||||
 | 
					Content-Type: text/plain; charset=utf-8
 | 
				
			||||||
 | 
					Content-Language: de-DE
 | 
				
			||||||
 | 
					Content-Transfer-Encoding: quoted-printable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      cat "$msg_file_encrypted" >> "${LOCK_DIR}/e-mail-${_list}-${_domain}.txt"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      cat <<EOF >> "${LOCK_DIR}/e-mail-${_list}-${_domain}.txt"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--$boundery_2--
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--$boundery_1--
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      echononl "      Send info e-mail to list owner .."
 | 
				
			||||||
 | 
					      cat "${LOCK_DIR}/e-mail-${_list}-${_domain}.txt" | su schleuder -c"/usr/local/bin/schleuder work ${_list}-owner@$_domain" -s /bin/bash
 | 
				
			||||||
 | 
					      if [[ $? -ne 0 ]]; then
 | 
				
			||||||
 | 
					         echo_log_failed "Send info e-mail to list owner"
 | 
				
			||||||
 | 
					         echo_failed
 | 
				
			||||||
 | 
					         lists_failed+=("${_list}@$_domain")
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					         echo_log_done "Send info e-mail to list owner"
 | 
				
			||||||
 | 
					         echo_done
 | 
				
			||||||
 | 
					         lists_done+=("${_list}@$_domain")
 | 
				
			||||||
 | 
					      fi
 | 
				
			||||||
 | 
					   fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						echononl "      Removing key of '$sender_address' from list keyring.."
 | 
				
			||||||
 | 
						if $_missing_key ; then
 | 
				
			||||||
 | 
							gpg --batch --yes --home "$_list_dir" --delete-key "$sender_address" > "$err_msg" 2>&1
 | 
				
			||||||
 | 
							if [[ $? -ne 0 ]]; then
 | 
				
			||||||
 | 
					         echo_log_failed "Removing key of '$sender_address' from list keyring"
 | 
				
			||||||
 | 
					         echo_log "$(cat "$err_msg")"
 | 
				
			||||||
 | 
								echo_failed
 | 
				
			||||||
 | 
								warn	"$(cat "$err_msg")"
 | 
				
			||||||
 | 
					         lists_warn+=("${_list}@$_domain")
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
					         echo_log_done "Removing key of '$sender_address' from list keyring"
 | 
				
			||||||
 | 
								echo_done
 | 
				
			||||||
 | 
							fi
 | 
				
			||||||
 | 
					      echononl "      Set ownerchip of list keyring back to '${schleuder_user}'"
 | 
				
			||||||
 | 
					      chown ${schleuder_user}:${schleuder_group} $_list_dir/pubring.* > "$err_msg" 2>&1
 | 
				
			||||||
 | 
							if [[ $? -ne 0 ]]; then
 | 
				
			||||||
 | 
					         echo_log_failed "Set ownerchip of list keyring back to '${schleuder_user}'"
 | 
				
			||||||
 | 
					         echo_log "$(cat "$err_msg")"
 | 
				
			||||||
 | 
								echo_failed
 | 
				
			||||||
 | 
								warn	"$(cat "$err_msg")"
 | 
				
			||||||
 | 
					         lists_warn+=("${_list}@$_domain")
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
					         echo_log_done "Set ownerchip of list keyring back to '${schleuder_user}'"
 | 
				
			||||||
 | 
								echo_done
 | 
				
			||||||
 | 
							fi
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
					      echo_log_skipped "Removing key of '$sender_address' from list keyring"
 | 
				
			||||||
 | 
							echo_skipped
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
					done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# - Clear cached gpg password
 | 
				
			||||||
 | 
					# -
 | 
				
			||||||
 | 
					echo ""
 | 
				
			||||||
 | 
					echo ""
 | 
				
			||||||
 | 
					echo_log ""
 | 
				
			||||||
 | 
					echo_log ""
 | 
				
			||||||
 | 
					echononl "   Clear cached gpg password.."
 | 
				
			||||||
 | 
					gpg-connect-agent reloadagent /bye > "$err_msg" 2>&1
 | 
				
			||||||
 | 
					if [[ $? -ne 0 ]]; then
 | 
				
			||||||
 | 
					   echo_log_failed "Clear cached gpg password"
 | 
				
			||||||
 | 
					   echo_log "$(cat "$err_msg")"
 | 
				
			||||||
 | 
					   echo_failed
 | 
				
			||||||
 | 
					   error	"$(cat "$err_msg")"
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					   echo_log_done "Clear cached gpg password"
 | 
				
			||||||
 | 
					   echo_done
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echononl "   Archive msg file.."
 | 
				
			||||||
 | 
					mv "$orig_msg_file" "${orig_msg_file}.${_date}.sent"
 | 
				
			||||||
 | 
					if [[ $? -ne 0 ]]; then
 | 
				
			||||||
 | 
					   echo_log_failed "Archive msg file"
 | 
				
			||||||
 | 
					   echo_log "$(cat "$err_msg")"
 | 
				
			||||||
 | 
					   echo_failed
 | 
				
			||||||
 | 
					   error	"$(cat "$err_msg")"
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					   echo_log_done "Archive msg file"
 | 
				
			||||||
 | 
					   echo_done
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo ""
 | 
				
			||||||
 | 
					echo ""
 | 
				
			||||||
 | 
					echo -e "   \033[32m----------\033[m"
 | 
				
			||||||
 | 
					echo -e "   \033[1mStatistics \033[m"
 | 
				
			||||||
 | 
					echo -e "   \033[32m----------\033[m"
 | 
				
			||||||
 | 
					echo ""
 | 
				
			||||||
 | 
					echo -e "   ${#lists_done[@]} lists successfully informed"
 | 
				
			||||||
 | 
					echo -e "   ${#lists_warn[@]} lists with warnings"
 | 
				
			||||||
 | 
					echo -e "   ${#lists_failed[@]} lists failed"
 | 
				
			||||||
 | 
					echo_log ""
 | 
				
			||||||
 | 
					echo_log ""
 | 
				
			||||||
 | 
					echo_log "----------"
 | 
				
			||||||
 | 
					echo_log "Statistics"
 | 
				
			||||||
 | 
					echo_log "----------"
 | 
				
			||||||
 | 
					echo_log
 | 
				
			||||||
 | 
					echo_log "${#lists_done[@]} lists successfully informed"
 | 
				
			||||||
 | 
					echo_log "${#lists_warn[@]} lists with warnings"
 | 
				
			||||||
 | 
					echo_log "${#lists_failed[@]} lists failed"
 | 
				
			||||||
 | 
					echo_log
 | 
				
			||||||
 | 
					if [[ ${#lists_failed[@]} -gt 0 ]]; then
 | 
				
			||||||
 | 
					   echo_log "Listadmin(s) not informed:"
 | 
				
			||||||
 | 
					   echo -e "\n   \033[1mListadmin(s) not informed:\033[m"
 | 
				
			||||||
 | 
					   for _list in "${lists_failed[@]}" ; do
 | 
				
			||||||
 | 
					      echo -e "      $_list"
 | 
				
			||||||
 | 
					       echo_log "   $_list"
 | 
				
			||||||
 | 
					   done
 | 
				
			||||||
 | 
					   echo_log
 | 
				
			||||||
 | 
					   info "See also log file: $log_file"
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					   info "See also script output at log file: $log_file"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo ""
 | 
				
			||||||
 | 
					clean_up 0
 | 
				
			||||||
 | 
						
 | 
				
			||||||
		Reference in New Issue
	
	Block a user