You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
115 lines
2.6 KiB
115 lines
2.6 KiB
#compdef ufw |
|
#autoload |
|
|
|
typeset -A opt_args |
|
|
|
function _ufw_delete_rules { |
|
if ufw status &> /dev/null ; then |
|
ufw status numbered \ |
|
| perl -n -e'/\[ +(\d+)\] +([^ ].+)/ && print "\"$1\[$2\]\" "' |
|
fi |
|
} |
|
|
|
function _ufw_app_profiles { |
|
grep -rhoP "(?<=\[)[^\]]+" /etc/ufw/applications.d/ \ |
|
| awk '{ print "\""$0"\""}' \ |
|
| tr '\n' ' ' |
|
} |
|
|
|
local -a _1st_arguments |
|
_1st_arguments=( |
|
'allow:add allow rule' |
|
'app:Application profile commands' |
|
'default:set default policy' |
|
'delete:delete RULE' |
|
'deny:add deny rule' |
|
'disable:disables the firewall' |
|
'enable:enables the firewall' |
|
'insert:insert RULE at NUM' |
|
'limit:add limit rule' |
|
'logging:set logging to LEVEL' |
|
'reject:add reject rule' |
|
'reload:reloads firewall' |
|
'reset:reset firewall' |
|
'show:show firewall report' |
|
'status:show firewall status' |
|
'version:display version information' |
|
) |
|
|
|
local context state line curcontext="$curcontext" |
|
|
|
_arguments -C \ |
|
'(--dry-run)--dry-run[dry run]' \ |
|
'1:: :->cmds' \ |
|
'2:: :->subcmds' \ |
|
'3:: :->subsubcmds' \ |
|
&& return 0 |
|
|
|
local rules |
|
|
|
case "$state" in |
|
(cmds) |
|
_describe -t commands "ufw commands" _1st_arguments |
|
return 0 |
|
;; |
|
(subcmds) |
|
case "$line[1]" in |
|
(app) |
|
_values 'app' \ |
|
'list[list application profiles]' \ |
|
'info[show information on PROFILE]' \ |
|
'update[update PROFILE]' \ |
|
'default[set default application policy]' \ |
|
&& ret=0 |
|
;; |
|
(status) |
|
_values 'status' \ |
|
'numbered[show firewall status as numbered list of RULES]' \ |
|
'verbose[show verbose firewall status]' \ |
|
&& ret=0 |
|
;; |
|
(logging) |
|
_values 'logging' \ |
|
'on' 'off' 'low' 'medium' 'high' 'full' \ |
|
&& ret=0 |
|
;; |
|
(default) |
|
_values 'default' \ |
|
'allow' 'deny' 'reject' \ |
|
&& ret=0 |
|
;; |
|
(show) |
|
_values 'show' \ |
|
'raw' 'builtins' 'before-rules' 'user-rules' 'after-rules' 'logging-rules' 'listening' 'added' \ |
|
&& ret=0 |
|
;; |
|
(delete) |
|
rules="$(_ufw_delete_rules)" |
|
if [[ -n "$rules" ]] ; then |
|
_values 'delete' \ |
|
${(Q)${(z)"$(_ufw_delete_rules)"}} \ |
|
&& ret=0 |
|
fi |
|
;; |
|
esac |
|
;; |
|
(subsubcmds) |
|
case "$line[1]" in |
|
(app) |
|
case "$line[2]" in |
|
(info|update) |
|
_values 'profiles' \ |
|
${(Q)${(z)"$(_ufw_app_profiles)"}} \ |
|
&& ret=0 |
|
;; |
|
esac |
|
;; |
|
(default) |
|
_values 'default-direction' \ |
|
'incoming' 'outgoing' \ |
|
&& ret=0 |
|
;; |
|
esac |
|
esac |
|
|
|
return
|
|
|