xref: /netbsd-src/external/bsd/openldap/dist/tests/scripts/relay (revision e670fd5c413e99c2f6a37901bb21c537fcd322d2)
12de962bdSlukem#! /bin/sh
2d11b170bStron# $OpenLDAP$
32de962bdSlukem## This work is part of OpenLDAP Software <http://www.openldap.org/>.
42de962bdSlukem##
5*e670fd5cSchristos## Copyright 1998-2021 The OpenLDAP Foundation.
62de962bdSlukem## All rights reserved.
72de962bdSlukem##
82de962bdSlukem## Redistribution and use in source and binary forms, with or without
92de962bdSlukem## modification, are permitted only as authorized by the OpenLDAP
102de962bdSlukem## Public License.
112de962bdSlukem##
122de962bdSlukem## A copy of this license is available in the file LICENSE in the
132de962bdSlukem## top-level directory of the distribution or, alternatively, at
142de962bdSlukem## <http://www.OpenLDAP.org/license.html>.
152de962bdSlukem
162de962bdSlukemecho "Using $RELAY backend..."
172de962bdSlukemecho ""
182de962bdSlukem
192de962bdSlukemecho "Starting slapd on TCP/IP port $PORT1..."
202de962bdSlukemecho "======== Starting slapd with $RELAY backend ========" >> $LOG1
21*e670fd5cSchristos. $CONFFILTER $BACKEND < $RELAYCONF > $CONF1
22*e670fd5cSchristos$SLAPD -f $CONF1 -h $URI1 -d $LVL >> $LOG1 2>&1 &
232de962bdSlukemPID=$!
242de962bdSlukemif test $WAIT != 0 ; then
252de962bdSlukem    echo PID $PID
262de962bdSlukem    read foo
272de962bdSlukemfi
282de962bdSlukemKILLPIDS="$PID"
292de962bdSlukem
302de962bdSlukemsleep 1
312de962bdSlukem
322de962bdSlukemecho "Using ldapsearch to check that slapd is running..."
332de962bdSlukemfor i in 0 1 2 3 4 5; do
34*e670fd5cSchristos	$LDAPSEARCH -s base -b "$MONITOR" -H $URI1 \
352de962bdSlukem		'objectclass=*' > /dev/null 2>&1
362de962bdSlukem	RC=$?
372de962bdSlukem	if test $RC = 0 ; then
382de962bdSlukem		break
392de962bdSlukem	fi
402de962bdSlukem	echo "Waiting 5 seconds for slapd to start..."
412de962bdSlukem	sleep 5
422de962bdSlukemdone
432de962bdSlukemif test $RC != 0 ; then
442de962bdSlukem	echo "ldapsearch failed ($RC)!"
452de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
462de962bdSlukem	exit $RC
472de962bdSlukemfi
482de962bdSlukem
492de962bdSlukemecho "Using ldapadd to populate the database..."
50*e670fd5cSchristos$LDAPADD -D "$MANAGERDN" -H $URI1 -w $PASSWD < \
512de962bdSlukem	$LDIFORDERED > $TESTOUT 2>&1
522de962bdSlukemRC=$?
532de962bdSlukemif test $RC != 0 ; then
542de962bdSlukem	echo "ldapadd failed ($RC)!"
552de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
562de962bdSlukem	exit $RC
572de962bdSlukemfi
582de962bdSlukem
592de962bdSlukemcat /dev/null > $SEARCHOUT
602de962bdSlukem
612de962bdSlukemBASEDN="dc=example,dc=com"
622de962bdSlukemecho "Searching base=\"$BASEDN\"..."
632de962bdSlukemecho "# searching base=\"$BASEDN\"..." >> $SEARCHOUT
64*e670fd5cSchristos$LDAPSEARCH -S '' -H $URI1 -b "$BASEDN" >> $SEARCHOUT 2>&1
652de962bdSlukemRC=$?
662de962bdSlukemif test $RC != 0 ; then
672de962bdSlukem	echo "Search failed ($RC)!"
682de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
692de962bdSlukem	exit $RC
702de962bdSlukemfi
712de962bdSlukem
722de962bdSlukemBASEDN="o=Example,c=US"
732de962bdSlukemecho "Searching base=\"$BASEDN\"..."
742de962bdSlukemecho "# searching base=\"$BASEDN\"..." >> $SEARCHOUT
75*e670fd5cSchristos$LDAPSEARCH -S '' -H $URI1 -b "$BASEDN" >> $SEARCHOUT 2>&1
762de962bdSlukemRC=$?
772de962bdSlukemif test $RC != 0 ; then
782de962bdSlukem	echo "Search failed ($RC)!"
792de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
802de962bdSlukem	exit $RC
812de962bdSlukemfi
822de962bdSlukem
832de962bdSlukemBASEDN="o=Esempio,c=IT"
842de962bdSlukemecho "Searching base=\"$BASEDN\"..."
852de962bdSlukemecho "# searching base=\"$BASEDN\"..." >> $SEARCHOUT
86*e670fd5cSchristos$LDAPSEARCH -S '' -H $URI1 -b "$BASEDN" >> $SEARCHOUT 2>&1
872de962bdSlukemRC=$?
882de962bdSlukemif test $RC != 0 ; then
892de962bdSlukem	echo "Search failed ($RC)!"
902de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
912de962bdSlukem	exit $RC
922de962bdSlukemfi
932de962bdSlukem
942de962bdSlukemBASEDN="o=Beispiel,c=DE"
952de962bdSlukemecho "Searching base=\"$BASEDN\"..."
962de962bdSlukemecho "# searching base=\"$BASEDN\"..." >> $SEARCHOUT
97*e670fd5cSchristos$LDAPSEARCH -S '' -H $URI1 -b "$BASEDN" >> $SEARCHOUT 2>&1
982de962bdSlukemRC=$?
992de962bdSlukemif test $RC != 0 ; then
1002de962bdSlukem	echo "Search failed ($RC)!"
1012de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
1022de962bdSlukem	exit $RC
1032de962bdSlukemfi
1042de962bdSlukem
1052de962bdSlukem#
1062de962bdSlukem# Do some modifications
1072de962bdSlukem#
1082de962bdSlukem
1092de962bdSlukemBASEDN="o=Beispiel,c=DE"
1102de962bdSlukemecho "Modifying database \"$BASEDN\"..."
111*e670fd5cSchristos$LDAPMODIFY -v -D "cn=Manager,$BASEDN" -H $URI1 -w $PASSWD \
1122de962bdSlukem	-M >> $TESTOUT 2>&1 << EOMODS
1132de962bdSlukemdn: cn=Added User,ou=Alumni Association,ou=People,$BASEDN
1142de962bdSlukemchangetype: add
1152de962bdSlukemobjectClass: OpenLDAPperson
1162de962bdSlukemcn: Added User
1172de962bdSlukemsn: User
1182de962bdSlukemuid: auser
1192de962bdSlukemseealso: cn=All Staff,ou=Groups,$BASEDN
1202de962bdSlukemhomephone: +49 1234567890
1212de962bdSlukemdrink: Beer
1222de962bdSlukemmail: auser@mail.alumni.example.com
1232de962bdSlukemtelephonenumber: +49 1234-567-890
1242de962bdSlukemdescription: Just added in o=Beispiel,c=DE naming context
1252de962bdSlukem
1262de962bdSlukemdn: cn=Ursula Hampster,ou=Alumni Association,ou=People,$BASEDN
1272de962bdSlukemchangetype: modify
1282de962bdSlukemadd: seeAlso
1292de962bdSlukemseeAlso: cn=Ursula Hampster,ou=Alumni Association,ou=People,$BASEDN
1302de962bdSlukem-
1312de962bdSlukemadd: description
1322de962bdSlukemdescription: Just added self to seeAlso in $BASEDN virtual naming context
1332de962bdSlukem-
1342de962bdSlukem
1352de962bdSlukemdn: cn=Mark Elliot,ou=Alumni Association,ou=People,$BASEDN
1362de962bdSlukemchangetype: delete
1372de962bdSlukem
1382de962bdSlukemdn: cn=John Doe,ou=Information Technology Division,ou=People,$BASEDN
1392de962bdSlukemchangetype: modrdn
1402de962bdSlukemnewrdn: cn=John P. Doe
1412de962bdSlukemdeleteoldrdn: 1
1422de962bdSlukem
1432de962bdSlukemdn: cn=Jane Doe,ou=Alumni Association,ou=People,$BASEDN
1442de962bdSlukemchangetype: modrdn
1452de962bdSlukemnewrdn: cn=Jane Q. Doe
1462de962bdSlukemdeleteoldrdn: 1
1472de962bdSlukemnewsuperior: ou=Information Technology Division,ou=People,$BASEDN
1482de962bdSlukem
1492de962bdSlukemdn: cn=Jane Q. Doe,ou=Information Technology Division,ou=People,$BASEDN
1502de962bdSlukemchangetype: modify
1512de962bdSlukemadd: cn
1522de962bdSlukemcn: Jane Qissapaolo Doe
1532de962bdSlukem-
1542de962bdSlukem# This operation (delete of DN-valued attribute) triggered ITS#3498
1552de962bdSlukemdelete: seeAlso
1562de962bdSlukem-
1572de962bdSlukem
1582de962bdSlukemdn: cn=Jane Q. Doe,ou=Information Technology Division,ou=People,$BASEDN
1592de962bdSlukemchangetype: modify
1602de962bdSlukemadd: seeAlso
1612de962bdSlukemseeAlso: cn=All Staff,ou=Groups,$BASEDN
1622de962bdSlukem-
1632de962bdSlukem
1642de962bdSlukemdn: ou=Referrals,$BASEDN
1652de962bdSlukemchangetype: add
1662de962bdSlukemobjectclass: referral
1672de962bdSlukemobjectclass: extensibleObject
1682de962bdSlukemou: Referrals
1692de962bdSlukemref: ldap://localhost.localdomain/ou=Referrals,$BASEDN
1702de962bdSlukemdescription: Just added as ldap://localhost.localdomain:389/ou=Referrals,$BASEDN
1712de962bdSlukem
1722de962bdSlukemdn: ou=Referrals,$BASEDN
1732de962bdSlukemchangetype: modify
1742de962bdSlukemreplace: ref
1752de962bdSlukemref: ldap://localhost:9012/ou=Referrals,$BASEDN
1762de962bdSlukem-
1772de962bdSlukemadd: description
1782de962bdSlukemdescription: ...and modified as ldap://localhost:9012/ou=Referrals,$BASEDN
1792de962bdSlukem-
1802de962bdSlukemEOMODS
1812de962bdSlukem
1822de962bdSlukemRC=$?
1832de962bdSlukemif test $RC != 0 ; then
1842de962bdSlukem	echo "Modify failed ($RC)!"
1852de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
1862de962bdSlukem	exit $RC
1872de962bdSlukemfi
1882de962bdSlukem
1892de962bdSlukemBASEDN="o=Example,c=US"
1902de962bdSlukemecho "Modifying database \"$BASEDN\"..."
191*e670fd5cSchristos$LDAPMODIFY -v -D "cn=Manager,$BASEDN" -H $URI1 -w $PASSWD \
1922de962bdSlukem	-M >> $TESTOUT 2>&1 << EOMODS
1932de962bdSlukem# These operations (updates with objectClass mapping) triggered ITS#3499
1942de962bdSlukemdn: cn=Added Group,ou=Groups,$BASEDN
1952de962bdSlukemchangetype: add
1962de962bdSlukemobjectClass: groupOfNames
1972de962bdSlukemobjectClass: uidObject
1982de962bdSlukemcn: Added Group
1992de962bdSlukemmember: cn=Added Group,ou=Groups,$BASEDN
2002de962bdSlukemuid: added
2012de962bdSlukem
2022de962bdSlukemdn: cn=Another Added Group,ou=Groups,$BASEDN
2032de962bdSlukemchangetype: add
2042de962bdSlukemobjectClass: groupOfNames
2052de962bdSlukemcn: Another Added Group
2062de962bdSlukemmember: cn=Added Group,ou=Groups,$BASEDN
2072de962bdSlukemmember: cn=Another Added Group,ou=Groups,$BASEDN
2082de962bdSlukem
2092de962bdSlukemdn: cn=Another Added Group,ou=Groups,$BASEDN
2102de962bdSlukemchangetype: modify
2112de962bdSlukemadd: objectClass
2122de962bdSlukemobjectClass: uidObject
2132de962bdSlukem-
2142de962bdSlukemadd: uid
2152de962bdSlukemuid: added
2162de962bdSlukem-
2172de962bdSlukem
2182de962bdSlukemdn: cn=Added Group,ou=Groups,$BASEDN
2192de962bdSlukemchangetype: modify
2202de962bdSlukemdelete: objectClass
2212de962bdSlukemobjectClass: uidObject
2222de962bdSlukem-
2232de962bdSlukemdelete: uid
2242de962bdSlukem-
2252de962bdSlukemEOMODS
2262de962bdSlukem
2272de962bdSlukemRC=$?
2282de962bdSlukemif test $RC != 0 ; then
2292de962bdSlukem	echo "Modify failed ($RC)!"
2302de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
2312de962bdSlukem	exit $RC
2322de962bdSlukemfi
2332de962bdSlukem
2342de962bdSlukemecho "Searching base=\"$BASEDN\"..."
2352de962bdSlukemecho "# searching base=\"$BASEDN\"..." >> $SEARCHOUT
236*e670fd5cSchristos$LDAPSEARCH -S '' -H $URI1 -b "$BASEDN" >> $SEARCHOUT 2>&1
2372de962bdSlukemRC=$?
2382de962bdSlukemif test $RC != 0 ; then
2392de962bdSlukem	echo "Search failed ($RC)!"
2402de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
2412de962bdSlukem	exit $RC
2422de962bdSlukemfi
2432de962bdSlukem
2442de962bdSlukemBASEDN="o=Esempio,c=IT"
2452de962bdSlukemecho "Searching base=\"$BASEDN\"..."
2462de962bdSlukemecho "# searching base=\"$BASEDN\"..." >> $SEARCHOUT
247*e670fd5cSchristos$LDAPSEARCH -S '' -H $URI1 -b "$BASEDN" >> $SEARCHOUT 2>&1
2482de962bdSlukemRC=$?
2492de962bdSlukemif test $RC != 0 ; then
2502de962bdSlukem	echo "Search failed ($RC)!"
2512de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
2522de962bdSlukem	exit $RC
2532de962bdSlukemfi
2542de962bdSlukem
2552de962bdSlukemFILTER="(objectClass=referral)"
2562de962bdSlukemecho "Searching filter=\"$FILTER\""
2572de962bdSlukemecho "	attrs=\"'*' ref\""
2582de962bdSlukemecho "# searching filter=\"$FILTER\"" >> $SEARCHOUT
2592de962bdSlukemecho "# 	attrs=\"'*' ref\"" >> $SEARCHOUT
2602de962bdSlukem
2612de962bdSlukemBASEDN="dc=example,dc=com"
2622de962bdSlukemecho "	base=\"$BASEDN\"..."
2632de962bdSlukemecho "# 	base=\"$BASEDN\"..." >> $SEARCHOUT
264*e670fd5cSchristos$LDAPSEARCH -S '' -H $URI1 -b "$BASEDN" -M "$FILTER" '*' ref \
2652de962bdSlukem	>> $SEARCHOUT 2>&1
2662de962bdSlukemRC=$?
2672de962bdSlukemif test $RC != 0 ; then
2682de962bdSlukem	echo "Search failed ($RC)!"
2692de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
2702de962bdSlukem	exit $RC
2712de962bdSlukemfi
2722de962bdSlukem
2732de962bdSlukemBASEDN="o=Example,c=US"
2742de962bdSlukemecho "	base=\"$BASEDN\"..."
2752de962bdSlukemecho "# 	base=\"$BASEDN\"..." >> $SEARCHOUT
276*e670fd5cSchristos$LDAPSEARCH -S '' -H $URI1 -b "$BASEDN" -M "$FILTER" '*' ref \
2772de962bdSlukem	>> $SEARCHOUT 2>&1
2782de962bdSlukemRC=$?
2792de962bdSlukemif test $RC != 0 ; then
2802de962bdSlukem	echo "Search failed ($RC)!"
2812de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
2822de962bdSlukem	exit $RC
2832de962bdSlukemfi
2842de962bdSlukem
2852de962bdSlukemBASEDN="o=Esempio,c=IT"
2862de962bdSlukemecho "	base=\"$BASEDN\"..."
2872de962bdSlukemecho "# 	base=\"$BASEDN\"..." >> $SEARCHOUT
288*e670fd5cSchristos$LDAPSEARCH -S '' -H $URI1 -b "$BASEDN" -M "$FILTER" '*' ref \
2892de962bdSlukem	>> $SEARCHOUT 2>&1
2902de962bdSlukemRC=$?
2912de962bdSlukemif test $RC != 0 ; then
2922de962bdSlukem	echo "Search failed ($RC)!"
2932de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
2942de962bdSlukem	exit $RC
2952de962bdSlukemfi
2962de962bdSlukem
2972de962bdSlukemBASEDN="o=Example,c=US"
2982de962bdSlukemFILTER="(seeAlso=cn=all staff,ou=Groups,$BASEDN)"
2992de962bdSlukemecho "Searching filter=\"$FILTER\""
3002de962bdSlukemecho "	attrs=\"seeAlso\""
3012de962bdSlukemecho "	base=\"$BASEDN\"..."
3022de962bdSlukemecho "# searching filter=\"$FILTER\"" >> $SEARCHOUT
3032de962bdSlukemecho "# 	attrs=\"seeAlso\"" >> $SEARCHOUT
3042de962bdSlukemecho "# 	base=\"$BASEDN\"..." >> $SEARCHOUT
305*e670fd5cSchristos$LDAPSEARCH -S '' -H $URI1 -b "$BASEDN" "$FILTER" seeAlso \
3062de962bdSlukem	>> $SEARCHOUT 2>&1
3072de962bdSlukemRC=$?
3082de962bdSlukemif test $RC != 0 ; then
3092de962bdSlukem	echo "Search failed ($RC)!"
3102de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
3112de962bdSlukem	exit $RC
3122de962bdSlukemfi
3132de962bdSlukem
3142de962bdSlukemFILTER="(uid=example)"
3152de962bdSlukemecho "Searching filter=\"$FILTER\""
3162de962bdSlukemecho "	attrs=\"uid\""
3172de962bdSlukemecho "	base=\"$BASEDN\"..."
3182de962bdSlukemecho "# searching filter=\"$FILTER\"" >> $SEARCHOUT
3192de962bdSlukemecho "# 	attrs=\"uid\"" >> $SEARCHOUT
3202de962bdSlukemecho "# 	base=\"$BASEDN\"..." >> $SEARCHOUT
321*e670fd5cSchristos$LDAPSEARCH -S '' -H $URI1 -b "$BASEDN" "$FILTER" uid \
3222de962bdSlukem	>> $SEARCHOUT 2>&1
3232de962bdSlukemRC=$?
3242de962bdSlukemif test $RC != 0 ; then
3252de962bdSlukem	echo "Search failed ($RC)!"
3262de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
3272de962bdSlukem	exit $RC
3282de962bdSlukemfi
3292de962bdSlukem
3302de962bdSlukemFILTER="(member=cn=Another Added Group,ou=Groups,$BASEDN)"
3312de962bdSlukemecho "Searching filter=\"$FILTER\""
3322de962bdSlukemecho "	attrs=\"member\""
3332de962bdSlukemecho "	base=\"$BASEDN\"..."
3342de962bdSlukemecho "# searching filter=\"$FILTER\"" >> $SEARCHOUT
3352de962bdSlukemecho "# 	attrs=\"member\"" >> $SEARCHOUT
3362de962bdSlukemecho "# 	base=\"$BASEDN\"..." >> $SEARCHOUT
337*e670fd5cSchristos$LDAPSEARCH -S '' -H $URI1 -b "$BASEDN" "$FILTER" member \
3382de962bdSlukem	>> $SEARCHOUT 2>&1
3392de962bdSlukemRC=$?
3402de962bdSlukemif test $RC != 0 ; then
3412de962bdSlukem	echo "Search failed ($RC)!"
3422de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
3432de962bdSlukem	exit $RC
3442de962bdSlukemfi
3452de962bdSlukem
3462de962bdSlukemecho "Filtering ldapsearch results..."
347ef2f90d3Sadam$LDIFFILTER < $SEARCHOUT > $SEARCHFLT
3482de962bdSlukemecho "Filtering original ldif used to create database..."
349ef2f90d3Sadam$LDIFFILTER < $RELAYOUT > $LDIFFLT
3502de962bdSlukemecho "Comparing filter output..."
3512de962bdSlukem$CMP $SEARCHFLT $LDIFFLT > $CMPOUT
3522de962bdSlukem
3532de962bdSlukemif test $? != 0 ; then
3542de962bdSlukem	echo "comparison failed - relay search/modification didn't succeed"
3552de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
3562de962bdSlukem	exit 1
3572de962bdSlukemfi
3582de962bdSlukem
3592de962bdSlukemBASEDN="o=Example,c=US"
3602de962bdSlukemecho "Changing password to database \"$BASEDN\"..."
361*e670fd5cSchristos$LDAPPASSWD -H $URI1 -D "cn=Manager,$BASEDN" -w $PASSWD \
3622de962bdSlukem	-s $PASSWD "cn=Added User,ou=Alumni Association,ou=People,$BASEDN" \
3632de962bdSlukem	>> $TESTOUT 2>&1
3642de962bdSlukemRC=$?
3652de962bdSlukemif test $RC != 0 ; then
3662de962bdSlukem	echo "Passwd ExOp failed ($RC)!"
3672de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
3682de962bdSlukem	exit $RC
3692de962bdSlukemfi
3702de962bdSlukem
3712de962bdSlukemBASEDN="o=Beispiel,c=DE"
3722de962bdSlukemecho "Binding with newly changed password to database \"$BASEDN\"..."
373*e670fd5cSchristos$LDAPWHOAMI -H $URI1 \
3742de962bdSlukem	-D "cn=Added User,ou=Alumni Association,ou=People,$BASEDN" \
3752de962bdSlukem	-w $PASSWD >> $TESTOUT 2>&1
3762de962bdSlukemRC=$?
3772de962bdSlukemif test $RC != 0 ; then
3782de962bdSlukem	echo "WhoAmI failed ($RC)!"
3792de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
3802de962bdSlukem	exit $RC
3812de962bdSlukemfi
3822de962bdSlukem
3832de962bdSlukemBASEDN="o=Esempio,c=IT"
3842de962bdSlukemecho "Comparing to database \"$BASEDN\"..."
385*e670fd5cSchristos$LDAPCOMPARE -H $URI1 \
3862de962bdSlukem	"cn=Added User,ou=Alumni Association,ou=People,$BASEDN" \
3872de962bdSlukem	"seeAlso:cn=All Staff,ou=Groups,$BASEDN" >> $TESTOUT 2>&1
3882de962bdSlukemRC=$?
389ef2f90d3Sadamif test $RC != 6 && test $RC,$BACKEND != 5,null ; then
3902de962bdSlukem	echo "Compare failed ($RC)!"
3912de962bdSlukem	test $KILLSERVERS != no && kill -HUP $KILLPIDS
392ef2f90d3Sadam	exit 1
3932de962bdSlukemfi
3942de962bdSlukem
3952de962bdSlukemtest $KILLSERVERS != no && kill -HUP $KILLPIDS
396