confirmd request protocol handler. First cut, not yet complete.
This commit is contained in:
parent
6f5719745a
commit
8d58ee719d
142
handlers/crp
Executable file
142
handlers/crp
Executable file
|
@ -0,0 +1,142 @@
|
|||
#!/bin/bash
|
||||
|
||||
#########################################################################
|
||||
# #
|
||||
# Project: Gild #
|
||||
# crp #
|
||||
# #
|
||||
# Purpose: CRP/1.0 handler for GILD. #
|
||||
# #
|
||||
# Author : Simon Brooke #
|
||||
# Copyright: (c) Simon Brooke 1997 #
|
||||
# Version : 0.1 #
|
||||
# Created : 17th October 1997 #
|
||||
# #
|
||||
#########################################################################
|
||||
|
||||
# $Header$
|
||||
|
||||
SERVER_ROOT="/usr/local/etc/gild/crp"
|
||||
AGENT_NAME="GILD_crp_handler/0.1"
|
||||
PROTOCOL="CRP/1.0"
|
||||
TMP=$SERVER_ROOT/tmp/crp$$
|
||||
HOST_NAME=`hostname -f`
|
||||
|
||||
now=`date "+%d %b %Y %k-%M-%S"` # time stamp for this request
|
||||
id_date=`date "+%s"`
|
||||
id_tag="$$-$id_date" # unique tag for this request
|
||||
|
||||
read identifier client # Read the protocol and client
|
||||
# identifiers...
|
||||
|
||||
identifier=`echo $identifier | stripctrl`
|
||||
client=`echo $client | stripctrl` # and strip annoying control chars!
|
||||
|
||||
check=`echo $identifier | awk 'BEGIN { FS = "/" } \
|
||||
$1 != "CRP" { print "410 Bad Protocol" } \
|
||||
$2 >= 2 { printf "411 Cannot handle protocol version (max 1.0)" }'`
|
||||
# can we handle it?
|
||||
|
||||
echo "$PROTOCOL $AGENT_NAME" # Print our protocol and agent
|
||||
# identifiers
|
||||
|
||||
if [ "$check" != "" ] # Whoops! Can't handle that
|
||||
then # Whinge to the client...
|
||||
echo $check
|
||||
result=`echo $check | awk '{print $1}'`
|
||||
echo "$now: $id_tag: $result: $REMOTE_HOST: $client: - : -" >> \
|
||||
$SERVER_ROOT/log # Log the result...
|
||||
exit 1 # and die.
|
||||
fi
|
||||
|
||||
done=false # Haven't read all the headers yet...
|
||||
read token value # So start reading
|
||||
|
||||
while [ "$done" = "false" ]
|
||||
do
|
||||
token=`echo $token | stripctrl` # Strip those ****** control chars...
|
||||
value=`echo $value | stripctrl`
|
||||
|
||||
case $token in # Sort the header
|
||||
"Request:"|"REQUEST:"|"request:" ) p_request=$value;;
|
||||
"User:"|"USER:"|"user:" ) p_user=$value;;
|
||||
"Class:"|"CLASS:"|"class:" ) p_class=$value;;
|
||||
"Mod:"|"MOD:"|"mod:" ) p_mod=$value;;
|
||||
"End."|"END."|"end."|"" ) done=true;;
|
||||
# yes, I know we're supposed to handle arbitrary numbers of MOD lines
|
||||
esac
|
||||
|
||||
read token value # Get the next token/value pair
|
||||
done
|
||||
|
||||
result=200
|
||||
|
||||
if [ "$p_request" = "" ] # Do we have a request?
|
||||
then
|
||||
echo "402 Insufficient information supplied"
|
||||
result=402
|
||||
fi
|
||||
|
||||
if [ "$p_user" = "" ] # Do we have a user?
|
||||
then
|
||||
echo "402 Insufficient information supplied"
|
||||
result=402
|
||||
fi
|
||||
|
||||
if [ "$p_class" = "" ] # Do we have a class?
|
||||
then
|
||||
echo "402 Insufficient information supplied"
|
||||
result=402
|
||||
fi
|
||||
|
||||
if [ $result -eq 200 ]
|
||||
then
|
||||
p_mail=`ldapsearch -h caleddon -b "c=SCOT" "cn=$p_user" mail |\
|
||||
grep '^mail=' | awk -F= '{print $2}'`
|
||||
|
||||
if [ "$p_mail" = "" ]
|
||||
then
|
||||
echo "400 User unknown"
|
||||
result=400
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ $result -eq 200 ]
|
||||
then
|
||||
if [ ! -f $SERVER_ROOT/classes/$p_class ]
|
||||
then
|
||||
echo "401 Class unknown"
|
||||
result=401
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ $result -eq 200 ]
|
||||
then
|
||||
echo "To: $p_mail" > $TMP
|
||||
echo "Reply_to: confirmd@$HOST_NAME" >> $TMP
|
||||
echo "Subject: Please confirm your request" >> $TMP
|
||||
echo "" >> $TMP
|
||||
echo "Dear $p_user" >> $TMP
|
||||
echo "" >> $TMP
|
||||
sed "s=$p_mod=g" $SERVER_ROOT/classes/$p_class >> $TMP
|
||||
echo "" >> $TMP
|
||||
echo "Reply to this mail with an 'x' in the box below" >> $TMP
|
||||
echo "to confirm this request:" >> $TMP
|
||||
echo "[ ] Yes, please carry out request $id_tag " >> $TMP
|
||||
|
||||
/usr/lib/sendmail simon@jasmine.org.uk < $TMP
|
||||
|
||||
if [ $? -eq 0 ]
|
||||
then
|
||||
echo "200 Request accepted"
|
||||
else
|
||||
echo "500 Server error"
|
||||
result=500
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "$now: $id_tag: $result: $REMOTE_HOST: $client: $p_class: $p_user" >> \
|
||||
$SERVER_ROOT/log
|
||||
|
||||
exit 0 # yes, I know it _shouldn't_ be necessary
|
||||
|
Loading…
Reference in a new issue