#!/bin/sh # # slay 2.0 - kill all processes belonging to the specified user(s). # originally by Chris Ausbrooks <fish@bucket.ualr.edu> # based on kall (a script of unknown origin) # Heavily rewritten by Pawel Wiecek <coven@debian.org> for Debian # This is a free software distributed according to terms of GNU GPL # (see /usr/share/common-licenses/GPL) # Revision history: # 0.99 First attempt. # 1.0 Added Butthead. # 1.1 Added retribution. # 1.2 Added slayee notification. # 2.0 Completely rewritten # 2.1 Fix an *ugly* bug that caused slayer to be slain... USER=`whoami` SIGNAL=`echo $1 | grep '^\-.*'` ME=`basename $0` COOL='0' # this piece of nested ifs is added for Debian package only if [ -f /etc/slay_mode ] then if grep -q mean /etc/slay_mode then MODE='mean' fi if grep -q nice /etc/slay_mode then MODE='nice' fi if [ -z $SLAY_BUTTHEAD ] then if grep -q butthead /etc/slay_mode then SLAY_BUTTHEAD='on' fi if grep -q normal /etc/slay_mode then SLAY_BUTTHEAD='off' fi fi else MODE='mean' if [ -z $SLAY_BUTTHEAD ] then SLAY_BUTTHEAD='off' fi fi # Command line handling. if [ "$SIGNAL" != "" ] then shift else SIGNAL="-KILL" fi if [ "$SIGNAL" != "-clean" ] then SIGSHOW="$SIGNAL" else SIGSHOW="-TERM + -KILL" fi # Help for loosers. if [ "$1" = "" -o "$1" = "--help" ] then echo "usage: $ME [-signal] name [name...]" if [ "$SLAY_BUTTHEAD" = "on" ] then echo " Like, kills people and stuff." echo " With -clean kicks ass forst and then does real pain." else echo " Kills all processes belonging to any of the given names." echo " Use -clean as a signal name to kill with TERM first and then with KILL." fi exit -1 fi # Misuse trap. if [ "$USER" != "$1" ] then if [ "$USER" != "root" ] then if [ "$MODE" = "mean" ] then $0 -KILL $USER else if [ "$SLAY_BUTTHEAD" = "on" ] then echo "${ME}: Cut it out." else echo "${ME}: Only root gets to do that." fi fi exit 2 fi fi # Main body. while [ "$1" != "" ] do if [ "$1" = "$USER" ] then if [ "$SLAY_BUTTHEAD" = "on" ] then echo "${ME}: Beavis, don't make me have to smack you." else echo "${ME}: Illegal operation." fi fi COOL="1" if [ "$SLAY_BUTTHEAD" = "on" ] then echo "${ME}: $SIGSHOW is kicking $1's butt!" echo -e "\\n\\n\\nI'm kicking your butt.\\n\\n\\n" | write $1 2>/dev/null else echo "${ME}: Sending $SIGSHOW signal to $1's process(es)..." echo -e "\\n\\n\\nYour current session has been terminated.\\n\\n\\n" | \ write $1 2>/dev/null fi if [ "$SIGNAL" = "-clean" ] then su -m $1 -c "kill -TERM -1 2>/dev/null" sleep 10 su -m $1 -c "kill -KILL -1 2>/dev/null" else su -m $1 -c "kill $SIGNAL -1 2>/dev/null" fi shift done # Error message. if [ $COOL = "0" ] then if [ "$SLAY_BUTTHEAD" = "on" ] then echo "${ME}: How old are you, Beavis?" else echo "${ME}: Nothing done." fi exit 1 fi # Non-error message. if [ $COOL = "1" ] then if [ "$SLAY_BUTTHEAD" = "on" ] then echo "${ME}: Whoa, I have the power supreme." else echo "${ME}: Done." fi exit 0 fi