File dbmail-cleaning.cron of Package dbmail3

#!/bin/sh
#
# Script for cleaning old messages form dbmail
#
# Copyright (c) 2009 Centar Novih Tehnlogija doo, Ruma, Serbia.
#
# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
# Foundation; either version 2 of the License, or (at your option) any later
# version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along with
# this program; if not, write to the Free Software Foundation, Inc., 59 Temple
# Place, Suite 330, Boston, MA 02111-1307 USA
#
# Author: Baji Zsolt <bajizs@cnt.rs>
#
# /etc/cron.daily/dbmail-cleaning
#

# The dbmail Configuration file
CONFIG_FILE=/etc/dbmail.conf


# Function: get_config_list config_file
          # Purpose : Print the list of configs from config file
get_config_list()
{
   typeset config_file=$1

   awk -F '[][]' '
      NF==3 && $0 ~ /^\[.*\]/ { print $2 }
   ' ${config_file}
}

# Function : set_config_vars config_file config [var_prefix]
# Purpose  : Set variables (optionaly prefixed by var_prefix) from config in config file
set_config_vars()
{
   typeset config_file=$1
   typeset config=$2
   typeset var_prefix=$3
   typeset config_vars

   config_vars=$( 
        awk -F= -v Config="${config}" -v Prefix="${var_prefix}" '
        BEGIN { 
           Config = toupper(Config);
           patternConfig = "\\[" Config "]";
        }
        toupper($0)  ~ patternConfig,(/\[/ && toupper($0) !~ patternConfig)  { 
           if (/\[/ || NF <2) next;
           if (/^#/) next;
           sub(/^[[:space:]]*/, "");
           sub(/[[:space:]]*=[[:space:]]*/, "=\"");
           sub(/$/, "\"");
           print Prefix $0;
        } ' ${config_file} )

   eval "${config_vars}"
}

# Set variables for all config from config file
set_config_vars $CONFIG_FILE DBMAIL CFG_DBMAIL_
set_config_vars $CONFIG_FILE CLEANING CFG_CLEANING_


# cleaning dbmail database
# first cleaning, if an error expected with sql, we have 24 hour tocorect it
if [ "$CFG_CLEANING_UTIL_CLEANING" == "yes" ]
then
  dbmail-util $CFG_CLEANING_UTIL_PARAMS
fi

if [ "$CFG_CLEANING_AUTO_CLEANING" == "no" ]
then
  exit
fi

if [ "$CFG_DBMAIL_driver" == "mysql" ]
then
  # building the query
  Q1=$(set | awk '
	  BEGIN {
	    FS = "=";
	    OS = " ";
	    ORS = " OR ";
	    i = 0;
	  }
	  {
	    if ($0 !~ /^(CFG_CLEANING_FOLDER_|CFG_CLEANING_DAY_)/) next;
	    sub(/^CFG_CLEANING_/, "");
	    if (/^FOLDER_/) {
	      sub(/^FOLDER_/, "");
	      sub(/^\x27/, "", $2);
	      sub(/\x27$/, "", $2);
	      names[$1] = $2;
	    } else {
	      sub(/^DAY_/, "");
	      days[$1] = $2;
	    }
	  }
	  END {
	    for (x in names) 
	      if(days[x])
		print "(dp.`internal_date`  < DATE_SUB(NOW(), INTERVAL " days[x] " DAY) AND da.`name` = \"" names[x] "\")";
	  }' )

  #execute the query
  mysql --host=$CFG_DBMAIL_host --user=$CFG_DBMAIL_user --password=$CFG_DBMAIL_pass --database=$CFG_DBMAIL_db --port=$CFG_DBMAIL_sqlport <<EOF
START TRANSACTION;
UPDATE ${CFG_DBMAIL_table_prefix}messages d, ${CFG_DBMAIL_table_prefix}mailboxes da, ${CFG_DBMAIL_table_prefix}physmessage dp
SET d.status = 2 WHERE  d.mailbox_idnr=da.mailbox_idnr AND d.physmessage_id=dp.id AND (
$Q1 0
);
COMMIT;

EOF

fi # end of mysql section

openSUSE Build Service is sponsored by