Listing 5 - /opt/sysadmin/unsecure_mconnect
#!/bin/sh

CGIPATH=/cgi-bin
MPATH=/opt/sysadmin
MAILHOST=mailhost

# Information pertaining to local mail aliases
LOCALDOMAIN=localcompany.com
LOCALCOM1=@${LOCALDOMAIN}
LOCALCOM2=@mailhost.${LOCALDOMAIN}

# Email aliases to be ignored
IGNORE1=devnull@
IGNORE2=vacation-responder@

html_header() {
   echo 'Content-type: text/html'
   echo ''
   echo '<HTML>'
   echo '<HEAD>'
   echo '<TITLE>MCONNECT</TITLE>'
   echo '<ISINDEX>'
   echo '</HEAD>'
   echo '<BODY>'
}

# Expand email alias using /usr/bin/mconnect,
# trim unnecessary information from the output,
# and update alias the database file.

eval_alias() {
   # Parameters: aliasname mailhost alias_database_file
   ANAME=$1
   MHOST=$2
   AFILE=$3

   (echo "expn ${ANAME}" ;echo "quit") | \
       /usr/bin/mconnect ${MHOST} | \
       sed \
        -e '/^220/d' \
        -e '/^221/d' \
        -e '/^connect/d' \
        -e "/${IGNORE1}/d" \
        -e "/${IGNORE2}/d" \
        -e 's/^250[- ]//' \
        -e "s/${LOCALCOM1}//" \
        -e "s/${LOCALCOM2}//" \
        -e 's/[  ]*</</' \
        -e 's/ /_/g' \
        -e 's/
//' \
        -e 's?\(.*\)<\(..*\)@\(..*\)>?\1|\2|\3?' \
        -e 's?\(.*\)<\(..*\)>?\1|\2|?' | \
        sort -t\| +1 > $AFILE
}

# Generate a database of aliases to determine 
# which aliases a user may be included upon

generate_db() {
   DBPATH=${MPATH}/ALIAS_DB
   
   echo 'Generating Email Alias Database'
   STARTTIME=`date`
   DIRDATE=`date +%y%m%d%H%M%S`
   mkdir -p ${DBPATH}/$DIRDATE
  # Generate List of aliases from NIS
  #   for ALIAS in `ypcat -k aliases | awk '{print $1}' | sort`
  # Generate List of aliases from /etc/mail/aliases
  #   for ALIAS in `cat /etc/mail/aliases | grep -v # | grep : | du -d: -f1`
  # Use List of aliases provided in $MPATH/aliases_list
   for ALIAS in `cat $MPATH/alias_list`
   do
      echo "Generating list for: ${ALIAS}"
      eval_alias $ALIAS $MAILHOST ${DBPATH}/${DIRDATE}/${ALIAS}
      sleep 1
   done

   rm ${DBPATH}/today
   ln -s ${DBPATH}/$DIRDATE ${DBPATH}/today
   echo `date` >! ${DBPATH}/last_gen
   
   chown -R nobody $DBPATH
   echo "Start Time: $STARTTIME"
   echo "Completion Time: `date`"
}

if [ $# -ne 1 ]
then

   html_header

   echo "<H1>Email Alias Search</H1>"
   echo "<H2>Enter the name of an email alias in the search field above.<P></H2>"
   if [ -f $MPATH/alias_list ]
   then
         echo "<H3>Example email aliases might include:</H3>"
         echo '<PRE>'
         awk '{printf("<A HREF=\"${CGIPATH}/mconnect?%s\">%s</A>",$1,$1)}'
$MPATH/alias_list
         echo '</PRE>'
   fi
   echo '</BODY></HTML>'
else
   ALIASN=$1

   if [ $ALIASN = 'create_alias_db' ]
   then
      generate_db
   else

      html_header

      MFILE=${MPATH}/ALIAS_DB/today/${ALIASN}

      echo "<H5>Evaluating \"${ALIASN}@${MAILHOST}\" </H5>"
      eval_alias $ALIASN $MAILHOST $MFILE

     # Show number of people on aliases
     # The following table will take a few seconds to 
     # display if the list is large
      MSIZE=`cat $MFILE | wc -l`
      echo "<H5>Number of users on alias: ${MSIZE}</H5>"
     # Print a table of two columns showing individuals on an alias
     # allowing users to send mail to the individual or 
     # see which other aliases they are included upon
     #
      echo "<H1>People included on the <i>$ALIASN</i> alias</H1>"
      echo '<TABLE WIDTH="760" COLS=2>'
      echo '<TR><TD WIDTH="350"><B>Included Individuals</B></TD>'
      echo '    <TD WIDTH="350"><B>Send Mail To        </B></TD></TR>'

      /bin/awk -F\| '
          {
               NAME = $1;
               LOGIN = $2;
               COM = $3;

               printf("<TR>");
               printf("<TD WIDTH=350>");
              # Uncomment when image is available
              # printf("<IMG SRC=/images/look.gif> ");
               if (COM == "") printf("<A
HREF=\"/cgi-bin/sysadmin/aliases?%s\">%s</A>",LOGIN,LOGIN);
               else printf("<A
HREF=\"/cgi-bin/sysadmin/aliases?%s@%s\">%s@%s</A>",LOGIN,COM,LOGIN,COM);
               printf(" %s",NAME);
               printf("</TD>");

               printf("<TD WIDTH=350>");
              # Uncomment when image is available
              # printf("<IMG SRC=/images/mail.gif> ");
               if (COM == "") printf("<A HREF=\"mailto: %s\">%s</A>",LOGIN,LOGIN);
               else  printf("<A HREF=\"mailto: %s@%s\">%s@%s</A>",LOGIN,COM,LOGIN,COM);
               printf("</TD>");
               printf("</TR>\n");
          }' $MFILE
   
      echo "</TABLE>"

      echo "<HR>"
      
     # Send Mail to each individual on alias
     # This allows people to be removed from an alias
     # For such occasions as a surprise party
     #
     # Uncomment when image is available
     # echo -n '<IMG SRC="/images/mail.gif"> '
      echo '<A HREF="mailto:'
      cat $MFILE | \
           sed -e "s/|$/|${LOCALDOMAIN}/" | \
           awk -F\| '{printf("%s@%s, ",$2,$3)}'
      echo '" > Send mail to individuals included on '
      echo "<i>$ALIASN</i></A>"

      echo '</BODY></HTML>'
   fi
fi


