Article Figure 1 Listing 1 Listing 2 Listing 3
Listing 4 Listing 5 Listing 6 Listing 7 feb2006.tar

Listing 3 Queue.sh

#!/bin/bash
#
# Listing 3.
# Queue.sh
# 

echo ------------------------------
echo $0
echo ------------------------------

MAILFILE=$HOME/mail_from_yahoo.txt
      QUEUE=$HOME/queue.txt
 QUEUE_PASS=$HOME/queue_pass.txt
QUEUE_CHECK=$HOME/queue_check.txt
DELIM1="+"

export PATH=$PATH:/bin:/sbin:/usr/bin

[[ -e $MAILFILE  ]]  || { echo $0:$MAILFILE  does not exist ; exit 1; }
[[ -s $MAILFILE  ]] ||  { echo $0:$MAILFILE  is empty       ; exit 1; }



#######Functions################

function check_q_size {

QUEUE_SIZE=$(cat $QUEUE | wc -l)
MAX_CMD="10"

if [[ $QUEUE_SIZE -gt "$MAX_CMD" ]]; then
  echo too many in the Q 
  exit 1
fi

}



function seeq {

if [[ -e $QUEUE  ]];then
 echo
 echo Q:contents of Q
 cat $QUEUE
 echo 
else
  echo Q:$QUEUE  does not exist
fi

if [[ -e $QUEUE_PASS ]];then
 echo
 echo QP:contents of Qpass
 cat $QUEUE_PASS
 echo 
else
  echo QP:$QUEUE_PASS does not exist 
fi

if [[ -e $QUEUE_CHECK  ]];then
 echo
 echo QC:contents of Qcheck
 cat $QUEUE_CHECK
else
  echo QC:$QUEUE_CHECK  does not exist
fi


}


########Script###################

while read LINE; do 

        #A)Does Mail start with Subject:Cmd??
       if echo $LINE | grep -i Subject |grep -i Cmd > /dev/null ; then

          if [[ !  -s $QUEUE  ]]; then

            ID=1

          else

           ID=$(cat $QUEUE | tail -n 1 | cut -d "$DELIM1" -f1)
           ID=$(( $ID + 1 ))

          fi

          PASS=$(./rand.pl)
          COMMAND=$(echo $LINE | grep -i subject | cut -d "$DELIM1" \
            -f2 | tr  '[:upper:]' '[:lower:]')
          HOST=$(echo $LINE | grep -i subject | cut -d "$DELIM1" \
            -f3 | tr  '[:upper:]' '[:lower:]')

          echo $ID$DELIM1$PASS$DELIM1$COMMAND$DELIM1$HOST >> $QUEUE

          check_q_size


        #B)Is field starting with a number?
       elif echo $LINE | grep -i Subject | grep [0-9] > /dev/null ; then

            ID=$(echo $LINE | grep -i subject | sed s/" "//g | cut \
              -d "$DELIM1" -f1 | cut -d ":" -f2)
          PASS=$(echo $LINE | grep -i subject | cut -d "$DELIM1" -f2)

          echo $ID$DELIM1$PASS >> $QUEUE_PASS  


       fi



done < $MAILFILE

seeq

rm -v $MAILFILE
echo