Parent directory

_ufw

3861 bytes
  1#compdef ufw
  2#autoload
  3
  4typeset -A opt_args
  5
  6function _ufw_delete_rules {
  7  if ufw status &> /dev/null ; then
  8    ufw status numbered \
  9      | perl -n -e'/\[ +(\d+)\] +([^ ].+)/ && print "\"$1\[$2\]\" "'
 10  fi
 11}
 12
 13function _ufw_app_profiles {
 14  grep -rhoP "(?<=\[)[^\]]+" /etc/ufw/applications.d/ \
 15    | awk '{ print "\""$0"\""}' \
 16    | tr '\n' ' '
 17}
 18
 19local -a _1st_arguments
 20_1st_arguments=(
 21  'allow:add allow rule'
 22  'app:Application profile commands'
 23  'default:set default policy'
 24  'delete:delete RULE'
 25  'deny:add deny rule'
 26  'disable:disables the firewall'
 27  'enable:enables the firewall'
 28  'insert:insert RULE at NUM'
 29  'limit:add limit rule'
 30  'logging:set logging to LEVEL'
 31  'reject:add reject rule'
 32  'reload:reloads firewall'
 33  'reset:reset firewall'
 34  'route:add route rule'
 35  'show:show firewall report'
 36  'status:show firewall status'
 37  'version:display version information'
 38)
 39
 40local context state line curcontext="$curcontext"
 41
 42_arguments -C \
 43  '(--dry-run)--dry-run[dry run]' \
 44  '1:: :->cmds' \
 45  '2:: :->subcmds' \
 46  '3:: :->subsubcmds' \
 47  '4:: :->subsubsubcmds' \
 48&& return 0
 49
 50local rules
 51
 52case "$state" in
 53  (cmds)
 54    _describe -t commands "ufw commands" _1st_arguments
 55    return 0
 56    ;;
 57  (subcmds)
 58    case "$line[1]" in
 59      (app)
 60        _values 'app' \
 61          'list[list application profiles]' \
 62          'info[show information on PROFILE]' \
 63          'update[update PROFILE]' \
 64          'default[set default application policy]' \
 65        && ret=0
 66        ;;
 67      (status)
 68        _values 'status' \
 69          'numbered[show firewall status as numbered list of RULES]' \
 70          'verbose[show verbose firewall status]' \
 71        && ret=0
 72        ;;
 73      (logging)
 74        _values 'logging' \
 75          'on' 'off' 'low' 'medium' 'high' 'full' \
 76        && ret=0
 77        ;;
 78      (default)
 79        _values 'default' \
 80          'allow' 'deny' 'reject' \
 81        && ret=0
 82        ;;
 83      (show)
 84        _values 'show' \
 85          'raw' 'builtins' 'before-rules' 'user-rules' 'after-rules' 'logging-rules' 'listening' 'added' \
 86        && ret=0
 87        ;;
 88      (route)
 89        _values 'route' \
 90          'delete[delete route rule]' \
 91          'insert[insert route rule at NUM]' \
 92          'prepend[prepend route rule]' \
 93          'allow[add allow route rule]' \
 94          'deny[add deny route rule]' \
 95          'reject[add reject route rule]' \
 96          'limit[add limit route rule]' \
 97        && ret=0
 98        ;;
 99      (delete)
100        rules="$(_ufw_delete_rules)"
101        if [[ -n "$rules" ]] ; then
102          _values 'delete' \
103            ${(Q)${(z)"$(_ufw_delete_rules)"}} \
104          && ret=0
105        fi
106        ;;
107    esac
108    ;;
109  (subsubcmds)
110    case "$line[1]" in
111      (app)
112        case "$line[2]" in
113          (info|update)
114            _values 'profiles' \
115              ${(Q)${(z)"$(_ufw_app_profiles)"}} \
116            && ret=0
117            ;;
118        esac
119        ;;
120      (default)
121        _values 'default-direction' \
122          'incoming' 'outgoing' \
123        && ret=0
124        ;;
125      (route)
126        case "$line[2]" in
127          (delete|prepend)
128            _values 'route-action' \
129              'allow[route allow rule]' \
130              'deny[route deny rule]' \
131              'reject[route reject rule]' \
132              'limit[route limit rule]' \
133            && ret=0
134            ;;
135          (insert)
136            _message 'route rule number'
137            ;;
138        esac
139        ;;
140    esac
141    ;;
142  (subsubsubcmds)
143    case "$line[1]" in
144      (route)
145        case "$line[2]" in
146          (insert)
147            _values 'route-action' \
148              'allow[route allow rule]' \
149              'deny[route deny rule]' \
150              'reject[route reject rule]' \
151              'limit[route limit rule]' \
152            && ret=0
153            ;;
154        esac
155        ;;
156    esac
157esac
158
159return