From 92dff6d645b26ce35c09689e654c2a4c6fb656c9 Mon Sep 17 00:00:00 2001 From: Steven Hiscocks Date: Mon, 6 May 2013 20:17:26 +0100 Subject: [PATCH 1/3] DOC: Added bash-completion script --- files/bash-completion | 152 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100644 files/bash-completion diff --git a/files/bash-completion b/files/bash-completion new file mode 100644 index 00000000..25ccbc30 --- /dev/null +++ b/files/bash-completion @@ -0,0 +1,152 @@ +# fail2ban bash-completion -*- shell-script -*- +# +# This file is part of Fail2Ban. +# +# Fail2Ban is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# Fail2Ban is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Fail2Ban; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +__sudo () { + sudo -n "$@" 2>/dev/null || return 0 +} +__fail2ban_jails () { + __sudo "$1" status | awk -F"\t+" '/Jail list/{print $2}' | sed 's/, / /g' +} + +_fail2ban () { + local cur prev words cword + _init_completion || return + + case $prev in + -V|--version|-h|--help) + return 0 # No further completion valid + ;; + -c) + _filedir -d # Directories + return 0 + ;; + -s|-p) + _filedir # Files + return 0 + ;; + *) + if [[ "$cur" == "-"* ]];then + COMPREPLY=( $( compgen -W \ + "$( _parse_help "$1" --help 2>/dev/null) -V" \ + -- "$cur") ) + return 0 + fi + ;; + esac + + if [[ "$1" == *"fail2ban-regex" ]];then + _filedir + return 0 + elif [[ "$1" == *"fail2ban-client" ]];then + local cmd jail + case $prev in + "$1") + COMPREPLY=( $( compgen -W \ + "$( "$1" --help 2>/dev/null | awk '/^ [a-z]+/{print $1}')" \ + -- "$cur") ) + return 0 + ;; + start|reload|stop|status) + COMPREPLY=( $(compgen -W "$(__fail2ban_jails "$1")" -- "$cur" ) ) + return 0 + ;; + set|get) + COMPREPLY=( $( compgen -W \ + "$( "$1" --help 2>/dev/null | awk '/^ '$prev' [^<]/{print $2}')" \ + -- "$cur") ) + COMPREPLY+=( $(compgen -W "$(__fail2ban_jails "$1")" -- "$cur" ) ) + return 0 + ;; + *) + if [[ "${words[$cword-2]}" == "add" ]];then + COMPREPLY=( $( compgen -W "auto polling gamin pyinotify" -- "$cur" ) ) + return 0 + elif [[ "${words[$cword-2]}" == "set" || "${words[$cword-2]}" == "get" ]];then + cmd="${words[cword-2]}" + # Handle in section below + elif [[ "${words[$cword-3]}" == "set" || "${words[$cword-3]}" == "get" ]];then + cmd="${words[$cword-3]}" + jail="${words[$cword-2]}" + # Handle in section below + fi + ;; + esac + + if [[ -z "$jail" && -n "$cmd" ]];then + case $prev in + loglevel) + if [[ "$cmd" == "set" ]];then + COMPREPLY=( $( compgen -W "0 1 2 3 4" -- "$cur" ) ) + fi + return 0 + ;; + logtarget) + if [[ "$cmd" == "set" ]];then + COMPREPLY=( $( compgen -W "STDOUT STDERR SYSLOG" -- "$cur" ) ) + _filedir # And files + fi + return 0 + ;; + *) # Jail name + COMPREPLY=( $( compgen -W \ + "$( "$1" --help 2>/dev/null | awk '/^ '${cmd}' /{print $3}')" \ + -- "$cur") ) + return 0 + ;; + esac + elif [[ -n "$jail" && "$cmd" == "set" ]];then + case $prev in + addlogpath) + _filedir + return 0 + ;; + dellogpath|delignoreip) + COMPREPLY=( $( compgen -W \ + "$( __sudo "$1" get "$jail" "${prev/del/}" | awk -F- '{print $2}')" \ + -- "$cur" ) ) + if [[ -z "$COMPREPLY" && "$prev" == "dellogpath" ]];then + _filedir + fi + return 0 + ;; + delfailregex|delignoregex) + COMPREPLY=( $( compgen -W \ + "$( __sudo "$1" get "$jail" "${prev/del/}" | awk -F"[][]" '{print $2}')" \ + -- "$cur" ) ) + return 0 + ;; + unbanip) + COMPREPLY=( $( compgen -W \ + "$( __sudo "$1" status "$jail" | awk -F"\t+" '/IP list:/{print $2}')" \ + -- "$cur" ) ) + return 0 + ;; + idle) + COMPREPLY=( $( compgen -W "on off" -- "$cur" ) ) + return 0 + ;; + usedns) + COMPREPLY=( $( compgen -W "yes no warn" -- "$cur" ) ) + return 0 + ;; + esac + fi + + fi # fail2ban-client +} && +complete -F _fail2ban fail2ban-client fail2ban-server fail2ban-regex From 95726b3976500b3d51d74ea24f0cb4640c79aaed Mon Sep 17 00:00:00 2001 From: Steven Hiscocks Date: Mon, 6 May 2013 20:37:58 +0100 Subject: [PATCH 2/3] DOC: Drop sudo from bash-completion --- files/bash-completion | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/files/bash-completion b/files/bash-completion index 25ccbc30..7a42bd1e 100644 --- a/files/bash-completion +++ b/files/bash-completion @@ -16,11 +16,8 @@ # along with Fail2Ban; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -__sudo () { - sudo -n "$@" 2>/dev/null || return 0 -} __fail2ban_jails () { - __sudo "$1" status | awk -F"\t+" '/Jail list/{print $2}' | sed 's/, / /g' + "$1" status 2>/dev/null | awk -F"\t+" '/Jail list/{print $2}' | sed 's/, / /g' } _fail2ban () { @@ -117,7 +114,7 @@ _fail2ban () { ;; dellogpath|delignoreip) COMPREPLY=( $( compgen -W \ - "$( __sudo "$1" get "$jail" "${prev/del/}" | awk -F- '{print $2}')" \ + "$( "$1" get "$jail" "${prev/del/}" 2>/dev/null | awk -F- '{print $2}')" \ -- "$cur" ) ) if [[ -z "$COMPREPLY" && "$prev" == "dellogpath" ]];then _filedir @@ -126,13 +123,13 @@ _fail2ban () { ;; delfailregex|delignoregex) COMPREPLY=( $( compgen -W \ - "$( __sudo "$1" get "$jail" "${prev/del/}" | awk -F"[][]" '{print $2}')" \ + "$( "$1" get "$jail" "${prev/del/}" 2>/dev/null | awk -F"[][]" '{print $2}')" \ -- "$cur" ) ) return 0 ;; unbanip) COMPREPLY=( $( compgen -W \ - "$( __sudo "$1" status "$jail" | awk -F"\t+" '/IP list:/{print $2}')" \ + "$( "$1" status "$jail" 2>/dev/null | awk -F"\t+" '/IP list:/{print $2}')" \ -- "$cur" ) ) return 0 ;; From b3f11df317ac199a62fbd577d93ae6452a780692 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Wed, 8 May 2013 08:27:38 +1000 Subject: [PATCH 3/3] BF: add bash-completion to MANIFEST --- MANIFEST | 1 + 1 file changed, 1 insertion(+) diff --git a/MANIFEST b/MANIFEST index 364c0b08..a9375268 100644 --- a/MANIFEST +++ b/MANIFEST @@ -144,3 +144,4 @@ files/cacti/cacti_host_template_fail2ban.xml files/cacti/README files/nagios/check_fail2ban files/nagios/f2ban.txt +files/bash-completion