D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
usr
/
bin
/
Filename :
bf_compact-bdb
back
Copy
#! /bin/sh # bf_compact source_dir [wordlist_name...] # # use to compact wordlist.db # replaces original directory with new one # renames original directory with '.old' extension # $Id: bf_compact.in 6749 2008-10-15 23:08:06Z clint $ set -e # die on errors : ${BOGOFILTER:=bogofilter} : ${BOGOUTIL:=bogoutil} if [ -z "$1" ] ; then echo 'usage: bf_compact source_dir [wordlist_name...]' exit 1 fi # extract home directory BOGOHOME="$1" shift if [ ! -d "$BOGOHOME" ] ; then echo "$BOGOHOME must be a directory, not a file" exit 1 fi # strip trailing slashes while true; do case "$BOGOHOME" in */) BOGOHOME=${BOGOHOME%/} ;; *) break ;; esac done export BOGOHOME # find wordlists if [ -n "$1" ] ; then FILES="$@" else DIR=$($BOGOFILTER -QQ | grep ^bogofilter_dir | awk '{print $3}') if [ "$BOGOHOME" != "$DIR" ] ; then FILES=$(ls "$BOGOHOME"/*.db) else FILES=$($BOGOFILTER -QQ | grep ^wordlist | cut -f3 -d,) fi fi BOGOTEMP="bf_compact.$$" mkdir "$BOGOTEMP" || { echo "Cannot create directory $BOGOTEMP. Abort." exit 1 } # copy Berkeley DB configuration if present if test -f "$BOGOHOME"/DB_CONFIG ; then cp -p "$BOGOHOME"/DB_CONFIG "$BOGOTEMP"/ fi case "$($BOGOFILTER -V | grep Database:)" in *"Berkeley DB"*) # determine transactions if test "$(find "$BOGOHOME/" -name "log.??????????" -print)" = "" ; then TXN=no else TXN=yes fi ;; *) TXN=noarg ;; esac # reload files for FILE in $FILES ; do NAME="$(basename $FILE)" $BOGOUTIL --db-verify "$FILE" \ || { echo "$FILE corrupted, aborting." ; rm -r "$BOGOTEMP" ; exit 1 ; } $BOGOUTIL -d "$FILE" | case $TXN in no|yes) $BOGOUTIL --db-transaction=no -l "$BOGOTEMP/$NAME" ;; noarg) $BOGOUTIL -l "$BOGOTEMP/$NAME" ;; esac done if [ $TXN = "yes" ] ; then #create database environment files $BOGOFILTER -e -C -d "$BOGOTEMP" --db-transaction=yes < /dev/null fi # remove $BOGOHOME.old so we don't move the new backup *into* it # rather than renaming the backup to it. rm -rf "$BOGOHOME.old" mv "$BOGOHOME" "$BOGOHOME.old" mv "$BOGOTEMP" "$BOGOHOME"