From 82f8f5e744b6e3303a30c55af86a64053fbf4670 Mon Sep 17 00:00:00 2001 From: Chris Baal Date: Mon, 8 Dec 2014 14:31:19 -0500 Subject: [PATCH] Add support for updating edb from git --- searchsploit | 51 ++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 44 insertions(+), 7 deletions(-) diff --git a/searchsploit b/searchsploit index 166ae4764..b3abef171 100755 --- a/searchsploit +++ b/searchsploit @@ -1,14 +1,21 @@ #!/bin/bash # exploitdb CLI search tool -# Version 2 +# Version 3 # Written by Unix-Ninja -csvpath=/usr/share/exploitdb/files.csv +gitremote=https://github.com/offensive-security/exploit-database.git +gitpath=/usr/share/exploitdb +csvpath=${gitpath}/files.csv progname=`basename $0` TAGS= SCASE='-i' +UPDATE=0 VERBOSE=0 +# NOTE: +# Exit code 0 means finished normally +# Exit code 6 means updated from github + # if files.csv is in the searchsploit path, use that if [ -f "$( dirname $0 )/files.csv" ]; then csvpath="$( dirname $0 )/files.csv" @@ -24,11 +31,12 @@ function usage() echo "Options" echo "=======" echo - echo " -c Perform case-sensitive searches; by default, searches will" - echo " try to be greedy" + echo " -c Perform case-sensitive searches; by default, searches will" + echo " try to be greedy" echo " -h, --help Show help screen" - echo " -v By setting verbose output, description lines are allowed to" - echo " overflow their columns" + echo " -u Update db from git" + echo " -v By setting verbose output, description lines are allowed to" + echo " overflow their columns" echo echo "*NOTES*" echo "Use any number of search terms you would like (minimum of one)." @@ -61,18 +69,47 @@ for param in $@; do done # parse short arguments -while getopts "chv" arg $ARGS; do +while getopts "chuv" arg $ARGS; do if [ "$arg" = "?" ]; then usage >&2; fi case $arg in c) SCASE='';; h) usage >&2;; + u) UPDATE=1;; v) VERBOSE=1;; esac shift $((OPTIND-1)) done +# was an update requested? +if [ "$UPDATE" -eq 1 ]; then + cd $gitpath + # make sure a git repo is init before updating + if [ "$(git rev-parse --is-inside-work-tree)" != "true" ]; then + if [ "$(ls)" = "" ]; then + #if directory is empty, just clone + git clone $gitremote . + else + # if not empty, init and add remote + git init > /dev/null + git remote add origin $gitremote + fi + fi + # make sure to prep checkout first + git checkout -- . + # update from github + git pull origin master + # if conflicts, clean and try again + if [ "$?" -ne 0 ]; then + git clean -d -fx "" + git pull origin master + fi + + echo "Update finished." + exit 6 +fi + # print header printf "%-${COL1}s %s" " Description" echo " Path"