289 lines
11 KiB
Bash
Executable File
289 lines
11 KiB
Bash
Executable File
#!/bin/bash
|
|
# You can change the above to the good path to your "bash" binary if needed
|
|
#
|
|
# $Id: WipeUser.sh,v 1.7 2003/07/14 10:35:44 nighty Exp $
|
|
#
|
|
|
|
# some default script values
|
|
DBNAME="cservice"
|
|
DBHOST="127.0.0.1"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# I suggest you dont modify stuff below this point unless you know what you are doing ;P
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PSQLCMD=""
|
|
echo -n "Checking for 'psql' binary... "
|
|
if [ -x /usr/local/pgsql/bin/psql ]; then
|
|
PSQL="1"
|
|
PSQLCMD="/usr/local/pgsql/bin/psql"
|
|
else
|
|
PSQL="0"
|
|
if [ -x `which psql | head -n 1` ]; then
|
|
PSQL="1"
|
|
PSQLCMD="psql"
|
|
else
|
|
PSQL="0"
|
|
fi
|
|
fi
|
|
|
|
if [ "$PSQL" == "0" ]; then
|
|
echo "not found."
|
|
echo "--> Stopping..."
|
|
echo "--> exit(1)"
|
|
exit 1
|
|
else
|
|
echo "Ok."
|
|
fi
|
|
|
|
echo "***********************************************************************"
|
|
echo "* *"
|
|
echo "* GNUworld/mod.cservice Username Removal Tool *"
|
|
echo "* *"
|
|
echo "* With this script, you can totally remove a user's entry in your db *"
|
|
echo "* *"
|
|
echo "* Warning: This program stops on any input error. *"
|
|
echo "* *"
|
|
echo "***********************************************************************"
|
|
echo "\$Id: WipeUser.sh,v 1.7 2003/07/14 10:35:44 nighty Exp $"
|
|
echo "***********************************************************************"
|
|
echo "* Released under the GNU Public License *"
|
|
echo "***********************************************************************"
|
|
echo -n "<-- Database host/IP ? [$DBHOST] "
|
|
read -e NEWDBHOST
|
|
if [ "$NEWDBHOST" != "" ]; then
|
|
echo "--> Using custom: $NEWDBHOST"
|
|
DBHOST="$NEWDBHOST"
|
|
else
|
|
echo "--> Using default: $DBHOST"
|
|
fi
|
|
echo -n "<-- Database name ? [$DBNAME] "
|
|
read -e NEWDBNAME
|
|
if [ "$NEWDBNAME" != "" ]; then
|
|
echo "--> Using custom: $NEWDBNAME"
|
|
DBNAME="$NEWDBNAME"
|
|
else
|
|
echo "--> Using default: $DBNAME"
|
|
fi
|
|
echo -n "<-- User name to totally remove ? "
|
|
read -e REP2
|
|
if [ "$REP2" == "" ]; then
|
|
echo "--> ERROR: Invalid User name (blank)"
|
|
echo "--> Stopping..."
|
|
echo "--> exit(1)"
|
|
exit 1
|
|
fi
|
|
FORCEUSERNAME="$REP2"
|
|
if `echo -n "SELECT id FROM users WHERE lower(user_name)='$REP2'" | $PSQLCMD -h $DBHOST $DBNAME >/dev/null 2>&1`; then
|
|
USRID=`echo -n "SELECT id FROM users WHERE lower(user_name)='$REP2'" | $PSQLCMD -h $DBHOST $DBNAME | head -n 3 | tail -n 1 | awk '{ print $1 }'`
|
|
if [ "$USRID" == "(0" ]; then
|
|
echo "--> ERROR: Invalid User name (non existant)"
|
|
echo "--> Stopping..."
|
|
echo "--> exit(1)"
|
|
exit 1
|
|
fi
|
|
else
|
|
echo "--> ERROR: Credentials provided for database connection are either invalid or database setup isn't correct."
|
|
echo "--> ERROR: Connection to database '$DBNAME' at '$DBHOST' failed."
|
|
echo "--> Stopping..."
|
|
echo "--> exit(2)"
|
|
exit 2
|
|
fi
|
|
|
|
if [ "$USRID" == "1" ]; then
|
|
echo "--> ERROR: Cannot remove master user (ID = 1)"
|
|
echo "--> Stopping..."
|
|
echo "--> exit(1)"
|
|
exit 1
|
|
fi
|
|
|
|
QC001="SELECT COUNT(user_id) FROM userlog WHERE user_id=$USRID"
|
|
QC002="SELECT COUNT(user_id) FROM levels WHERE user_id=$USRID"
|
|
QC003="SELECT COUNT(user_id) FROM levels WHERE access=500 AND user_id=$USRID"
|
|
QC004="SELECT COUNT(user_id) FROM supporters WHERE user_id=$USRID"
|
|
QC005="SELECT COUNT(user_id) FROM objections WHERE user_id=$USRID"
|
|
QC006="SELECT COUNT(user_id) FROM users_lastseen WHERE user_id=$USRID"
|
|
QC007="SELECT COUNT(manager_id) FROM pending WHERE manager_id=$USRID"
|
|
QC008="SELECT COUNT(user_id) FROM pending_emailchanges WHERE user_id=$USRID"
|
|
QC009="SELECT COUNT(user_id) FROM pending_pwreset WHERE user_id=$USRID"
|
|
QC010="SELECT COUNT(user_id) FROM acl WHERE user_id=$USRID"
|
|
QC011="SELECT COUNT(manager_id) FROM pending_mgrchange WHERE manager_id=$USRID"
|
|
QC012="SELECT COUNT(new_manager_id) FROM pending_mgrchange WHERE new_manager_id=$USRID"
|
|
QC013="SELECT COUNT(user_id) FROM mailq WHERE user_id=$USRID"
|
|
QC014="SELECT COUNT(user_id) FROM notes WHERE user_id=$USRID or from_user_id=$USRID"
|
|
QC015="SELECT COUNT(user_id) FROM fraud_list_data WHERE user_id=$USRID"
|
|
QC016="SELECT COUNT(user_id) FROM notices WHERE user_id=$USRID"
|
|
|
|
echo "--> Counting records..."
|
|
|
|
CNT01=`echo -n "$QC001" | $PSQLCMD -h $DBHOST $DBNAME | head -n 3 | tail -n 1 | awk '{ print $1 }' | sed -e 's/(//'`
|
|
CNT02=`echo -n "$QC002" | $PSQLCMD -h $DBHOST $DBNAME | head -n 3 | tail -n 1 | awk '{ print $1 }' | sed -e 's/(//'`
|
|
CNT03=`echo -n "$QC003" | $PSQLCMD -h $DBHOST $DBNAME | head -n 3 | tail -n 1 | awk '{ print $1 }' | sed -e 's/(//'`
|
|
CNT04=`echo -n "$QC004" | $PSQLCMD -h $DBHOST $DBNAME | head -n 3 | tail -n 1 | awk '{ print $1 }' | sed -e 's/(//'`
|
|
CNT05=`echo -n "$QC005" | $PSQLCMD -h $DBHOST $DBNAME | head -n 3 | tail -n 1 | awk '{ print $1 }' | sed -e 's/(//'`
|
|
CNT06=`echo -n "$QC006" | $PSQLCMD -h $DBHOST $DBNAME | head -n 3 | tail -n 1 | awk '{ print $1 }' | sed -e 's/(//'`
|
|
CNT07=`echo -n "$QC007" | $PSQLCMD -h $DBHOST $DBNAME | head -n 3 | tail -n 1 | awk '{ print $1 }' | sed -e 's/(//'`
|
|
CNT08=`echo -n "$QC008" | $PSQLCMD -h $DBHOST $DBNAME | head -n 3 | tail -n 1 | awk '{ print $1 }' | sed -e 's/(//'`
|
|
CNT09=`echo -n "$QC009" | $PSQLCMD -h $DBHOST $DBNAME | head -n 3 | tail -n 1 | awk '{ print $1 }' | sed -e 's/(//'`
|
|
CNT10=`echo -n "$QC010" | $PSQLCMD -h $DBHOST $DBNAME | head -n 3 | tail -n 1 | awk '{ print $1 }' | sed -e 's/(//'`
|
|
CNT11=`echo -n "$QC011" | $PSQLCMD -h $DBHOST $DBNAME | head -n 3 | tail -n 1 | awk '{ print $1 }' | sed -e 's/(//'`
|
|
CNT12=`echo -n "$QC012" | $PSQLCMD -h $DBHOST $DBNAME | head -n 3 | tail -n 1 | awk '{ print $1 }' | sed -e 's/(//'`
|
|
CNT13=`echo -n "$QC013" | $PSQLCMD -h $DBHOST $DBNAME | head -n 3 | tail -n 1 | awk '{ print $1 }' | sed -e 's/(//'`
|
|
CNT14=`echo -n "$QC014" | $PSQLCMD -h $DBHOST $DBNAME | head -n 3 | tail -n 1 | awk '{ print $1 }' | sed -e 's/(//'`
|
|
CNT15=`echo -n "$QC015" | $PSQLCMD -h $DBHOST $DBNAME | head -n 3 | tail -n 1 | awk '{ print $1 }' | sed -e 's/(//'`
|
|
CNT16=`echo -n "$QC016" | $PSQLCMD -h $DBHOST $DBNAME | head -n 3 | tail -n 1 | awk '{ print $1 }' | sed -e 's/(//'`
|
|
|
|
echo "--> The following entries would be removed if confirmed :"
|
|
echo "-->"
|
|
echo "--> $CNT01 userlog entries"
|
|
echo "--> $CNT02 channel accesses ($CNT03 level 500 (channels would be PURGED))"
|
|
echo "--> $CNT04 channel support entries"
|
|
echo "--> $CNT05 application objections"
|
|
echo "--> $CNT06 last_seen entry"
|
|
echo "--> $CNT07 channel applications (old and present)"
|
|
echo "--> $CNT08 pending email change entries"
|
|
echo "--> $CNT09 pending verif q/a reset entries"
|
|
echo "--> $CNT10 ACL entry"
|
|
echo "--> $CNT11 pending manager changes (user is old manager, channel will be PURGED)"
|
|
echo "--> $CNT12 pending manager changes (user is temp manager, channel will be PURGED)"
|
|
echo "--> $CNT13 mailq entries"
|
|
echo "--> $CNT14 notes sent/received"
|
|
echo "--> $CNT15 fraud list entries"
|
|
echo "--> $CNT16 notices entries"
|
|
echo "--> 1 user entry"
|
|
echo "-->"
|
|
echo -n "<-- Are you sure you want to totally and definetively remove those entries from your databse [y/N] ? [N] "
|
|
read -e YOUSURE
|
|
if [ "$YOUSURE" != "y" ]; then
|
|
if [ "$YOUSURE" != "Y" ]; then
|
|
YOUSURE="N"
|
|
else
|
|
YOUSURE="Y"
|
|
fi
|
|
else
|
|
YOUSURE="Y"
|
|
fi
|
|
|
|
if [ "$YOUSURE" == "N" ]; then
|
|
echo "--> You're such a weenie ;P"
|
|
echo "--> Aborting upon user request (nothing was removed)"
|
|
echo "--> Stopping..."
|
|
echo "--> exit(0)"
|
|
exit 0
|
|
fi
|
|
|
|
echo "--> Removing entries..."
|
|
|
|
QR001="DELETE FROM userlog WHERE user_id=$USRID"
|
|
QR002="DELETE FROM levels WHERE user_id=$USRID AND (access!=500 OR channel_id=1)"
|
|
QR003="SELECT channel_id FROM levels WHERE access=500 AND user_id=$USRID" # first set of channels to purge
|
|
QR004="DELETE FROM supporters WHERE user_id=$USRID"
|
|
QR005="DELETE FROM objections WHERE user_id=$USRID"
|
|
QR006="DELETE FROM users_lastseen WHERE user_id=$USRID"
|
|
QR007="DELETE FROM pending WHERE manager_id=$USRID"
|
|
QR008="DELETE FROM pending_emailchanges WHERE user_id=$USRID"
|
|
QR009="DELETE FROM pending_pwreset WHERE user_id=$USRID"
|
|
QR010="DELETE FROM acl WHERE user_id=$USRID"
|
|
QR011="SELECT channel_id FROM pending_mgrchange WHERE manager_id=$USRID" # second set of channels to purge
|
|
QR012="DELETE FROM pending_mgrchange WHERE new_manager_id=$USRID"
|
|
QR013="DELETE FROM mailq WHERE user_id=$USRID"
|
|
QR014="DELETE FROM notes WHERE user_id=$USRID or from_user_id=$USRID"
|
|
QR015="DELETE FROM fraud_list_data WHERE user_id=$USRID"
|
|
QR016="DELETE FROM notices WHERE user_id=$USRID"
|
|
QR099="DELETE FROM users WHERE id=$USRID"
|
|
|
|
REM01=`echo -n "$QR001" | $PSQLCMD -h $DBHOST $DBNAME`
|
|
echo "--> DB: $REM01"
|
|
REM02=`echo -n "$QR002" | $PSQLCMD -h $DBHOST $DBNAME`
|
|
echo "--> DB: $REM02"
|
|
echo -n "$QR003" | $PSQLCMD -h $DBHOST $DBNAME | grep "." | grep -v -- "--" | grep -v "rows" | grep -v "channel_id" | awk '{ print "DELETE FROM levels WHERE channel_id=" $1 }' | $PSQLCMD -h $DBHOST $DBNAME | xargs echo "--> DB:"
|
|
echo -n "$QR003" | $PSQLCMD -h $DBHOST $DBNAME | grep "." | grep -v -- "--" | grep -v "rows" | grep -v "channel_id" | awk '{ print "DELETE FROM channels WHERE id=" $1 }' | $PSQLCMD -h $DBHOST $DBNAME | xargs echo "--> DB:"
|
|
REM04=`echo -n "$QR004" | $PSQLCMD -h $DBHOST $DBNAME`
|
|
echo "--> DB: $REM04"
|
|
REM05=`echo -n "$QR005" | $PSQLCMD -h $DBHOST $DBNAME`
|
|
echo "--> DB: $REM05"
|
|
REM06=`echo -n "$QR006" | $PSQLCMD -h $DBHOST $DBNAME`
|
|
echo "--> DB: $REM06"
|
|
REM07=`echo -n "$QR007" | $PSQLCMD -h $DBHOST $DBNAME`
|
|
echo "--> DB: $REM07"
|
|
REM08=`echo -n "$QR008" | $PSQLCMD -h $DBHOST $DBNAME`
|
|
echo "--> DB: $REM08"
|
|
REM09=`echo -n "$QR009" | $PSQLCMD -h $DBHOST $DBNAME`
|
|
echo "--> DB: $REM09"
|
|
REM10=`echo -n "$QR010" | $PSQLCMD -h $DBHOST $DBNAME`
|
|
echo "--> DB: $REM10"
|
|
echo -n "$QR011" | $PSQLCMD -h $DBHOST $DBNAME | grep "." | grep -v -- "--" | grep -v "rows" | grep -v "channel_id" | awk '{ print "DELETE FROM pending_mgrchanges WHERE channel_id=" $1 }' | $PSQLCMD -h $DBHOST $DBNAME | xargs echo "--> DB:"
|
|
echo -n "$QR011" | $PSQLCMD -h $DBHOST $DBNAME | grep "." | grep -v -- "--" | grep -v "rows" | grep -v "channel_id" | awk '{ print "DELETE FROM channels WHERE id=" $1 }' | $PSQLCMD -h $DBHOST $DBNAME | xargs echo "--> DB:"
|
|
REM12=`echo -n "$QR012" | $PSQLCMD -h $DBHOST $DBNAME`
|
|
echo "--> DB: $REM12"
|
|
REM13=`echo -n "$QR013" | $PSQLCMD -h $DBHOST $DBNAME`
|
|
echo "--> DB: $REM13"
|
|
REM14=`echo -n "$QR014" | $PSQLCMD -h $DBHOST $DBNAME`
|
|
echo "--> DB: $REM14"
|
|
REM15=`echo -n "$QR015" | $PSQLCMD -h $DBHOST $DBNAME`
|
|
echo "--> DB: $REM15"
|
|
REM16=`echo -n "$QR016" | $PSQLCMD -h $DBHOST $DBNAME`
|
|
echo "--> DB: $REM16"
|
|
|
|
REM99=`echo -n "$QR099" | $PSQLCMD -h $DBHOST $DBNAME`
|
|
echo "--> DB: $REM99"
|
|
|
|
echo "--> Username '$FORCEUSERNAME' has been totally removed."
|
|
|
|
echo "--> Job finished !"
|
|
echo "--> NOTICE: Remember your CService bot updates his cache on a regular basis"
|
|
echo "--> NOTICE: depending on your cservice.conf file this can take a few minutes for the changes/addition to be available on IRC."
|
|
echo "--> Stopping..."
|
|
echo "--> exit(0)"
|
|
|
|
exit 0
|
|
|
|
# EOF
|