#!/bin/sh
#
# --------------------------------------------------
# sendit.sh - send an email using vpopmail/tmda
# Version - 0.001
# Author - Jesse D. Guardiani
# Created - 01/31/03
# Modified - 01/31/03
# --------------------------------------------------
# Usage: sqwebmail calls this script automatically.
# Place this script here:
#
# /usr/local/share/sqwebmail/sendit.sh
#
# Note: This script ONLY works if QMail is your MTA.
#
# ChangeLog
# ---------
#
# 01/31/03 - JDG
# --------------
# - Created
# --------------------------------------------------
#
# Copyright (C) 2003 Jesse D. Guardiani <jesse@wingnet.net>
#
# This file is part of TMDA.
#
# TMDA 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. A copy of this license should
# be included in the file COPYING.
#
# TMDA 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 TMDA; if not, write to the Free Software Foundation, Inc.,
# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# --------------------------------------------------
# The following comments have been taken from the
# original sendit.sh that comes with sqwebmail.
# --------------------------------------------------
#
# This is a sample sendit wrapper for sqwebmail. sqwebmail will invoke this
# wrapper script to send an email message. The complete message will be
# provided on standard input.
#
# $1 will contain the return (or bounce) address for this mailboxid, as
# specified by auth.c
#
# $2 will contain the sqwebmail mailboxid of the sender (note that we're
# executing under whatever id auth.c sets for this mailboxid). Furthermore,
# $REMOTE_ADDR will contain the IP address where the client is coming from
# (the rest of the CGI vars are available too).
#
# The environment variable DSN will contain any requested -N option to
# sendmail (not used by qmail).
#
# You may modify the message in whatever fashion before passing it on to the
# MTA.
#
# exec /usr/sbin/sendmail -oi -t -f "$1"
PATH=~/bin
PATH="$PATH:/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin:/usr/contrib/bin"
export PATH
# Set up some globals
TMDA_HOME=/usr/local/tmda
USERNAME=`echo "$1" | cut -f 1 -d @`
LOG_FILE_PATH='sendit.log'
DEBUG=0
WHOAMI=""
# Basic debug output function
debug_log(){
if [ $DEBUG > 0 ]; then
# make sure file exists
if [ ! -f $LOG_FILE_PATH ]; then
touch $LOG_FILE_PATH
fi
# write log entry
echo "$1" >> $LOG_FILE_PATH
fi
}
# Basic return code error message function
die_rcode() {
EXIT_CODE=$1
ERROR_MSG=$2
if [ $EXIT_CODE -ne '0' ]; then
echo "$ERROR_MSG" 1>&2
echo "Exiting!" 1>&2
exit "$BAD_EXIT_CODE"
fi
}
# Determine if we are indeed running as the vpopmail user
WHOAMI=`whoami`
exit_code="$?"
die_rcode $exit_code "Error: 'whoami' call failed."
# These are the primary variables we want to keep track of
debug_log "\$DSN: $DSN \$1: $1 \$2: $2 \$WHOAMI: $WHOAMI \$USERNAME: $USERNAME"
# Vpopmail/TMDA specific code
if [ "$WHOAMI" = "vpopmail" ];then
debug_log "attempting to run vpopmail specific code:"
# Vpopmail specific variables
VPOPMAIL_HOME=~vpopmail
VUSERINFO_PATH="${VPOPMAIL_HOME}/bin/vuserinfo"
TMDA_SENDMAIL_PATH="${TMDA_HOME}/bin/tmda-sendmail"
VHOMEDIR=""
# Get vpopmail homedir for user by sending $1 to vuserinfo
VHOMEDIR=`${VUSERINFO_PATH} -d $1`
exit_code="$?"
die_rcode $exit_code "Error: 'vuserinfo' call failed."
debug_log " \$VHOMEDIR: $VHOMEDIR"
# Let vpopmail know what this user's home directory is
HOME=$VHOMEDIR
export HOME
# Check for TMDA
if [ -r "${VHOMEDIR}/../.qmail-${USERNAME}" ]; then
GREP_OUT=`grep "tmda-filter" "${VHOMEDIR}/../.qmail-${USERNAME}" | wc -l`
debug_log " examining 'wc' output... \$GREP_OUT=$GREP_OUT"
# If we're piping through tmda-filter, then user must be using TMDA.
if [ $GREP_OUT -gt 0 ]; then
debug_log " sending to tmda-sendmail"
# send message through tmda
exec $TMDA_SENDMAIL_PATH -oi -f "$1"
debug_log "Error: tmda-sendmail exec failed! Msg: $?"
exit '0'
fi
fi
else
debug_log "attempting to use tmda-sendmail with a non-virtual user:"
# Non-virtual user TMDA code
# If a .tmda directory exists, then our user probably has TMDA
USERDIR=~${USERNAME}/
# NOTE: This check isn't fool proof. It's just the only method I
# could think of at the moment.
if [ -d "${USERDIR}.tmda" ]; then
debug_log " sending to tmda-sendmail"
# send message through tmda
exec $TMDA_SENDMAIL_PATH -oi -f "$1"
debug_log "Error: tmda-sendmail exec failed! Msg: $?"
exit '0'
fi
fi
debug_log "sending to the real sendmail"
# Well, we're still here, so send it to the 'real' sendmail.
exec /usr/sbin/sendmail -oi -t $DSN -f "$1"
debug_log "Error: 'real' sendmail exec failed! Msg: $?"
syntax highlighted by Code2HTML, v. 0.9.1