# bash completion for firewall-cmd -*- shell-script -*- # Copyright (C) 2013 Red Hat, Inc. # # Authors: # Jiri Popelka <jpopelka@redhat.com> # # This program 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. # # This program 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 this program. If not, see <http://www.gnu.org/licenses/>. # # TODO: find a way how to get the following options from firewall-cmd OPTIONS_LOCKDOWN="--add-lockdown-whitelist-command= --remove-lockdown-whitelist-command= \ --query-lockdown-whitelist-command= --list-lockdown-whitelist-commands \ --add-lockdown-whitelist-context= --remove-lockdown-whitelist-context= \ --query-lockdown-whitelist-context= --list-lockdown-whitelist-contexts \ --add-lockdown-whitelist-uid= --remove-lockdown-whitelist-uid= \ --query-lockdown-whitelist-uid= --list-lockdown-whitelist-uids \ --add-lockdown-whitelist-user= --remove-lockdown-whitelist-user= \ --query-lockdown-whitelist-user= --list-lockdown-whitelist-users" # can be used as standalone or with --permanent OPTIONS_CONFIG="--get-zones --get-services --get-icmptypes --get-helpers \ ${OPTIONS_LOCKDOWN} --list-all-zones \ --info-zone= --info-service= --info-icmptype= \ --info-ipset= --info-helper=" OPTIONS_ZONE_INTERFACES_SOURCES="\ --add-interface= --remove-interface= --query-interface= \ --list-interfaces --change-interface= --change-zone= \ --add-source= --remove-source= --query-source= \ --change-source= --list-sources" OPTIONS_ZONE_ACTION_ACTION="--add-service= --remove-service= --query-service= \ --add-port= --remove-port= --query-port= \ --add-source-port= --remove-source-port= --query-source-port= \ --add-protocol= --remove-protocol= --query-protocol= \ --add-icmp-block= --remove-icmp-block= --query-icmp-block= \ --add-forward-port= --remove-forward-port= --query-forward-port=" OPTIONS_ZONE_ADAPT_QUERY="--add-rich-rule= --remove-rich-rule= --query-rich-rule= \ --add-icmp-block-inversion --remove-icmp-block-inversion \ --query-icmp-block-inversion \ --add-masquerade --remove-masquerade --query-masquerade \ --list-services --list-ports --list-protocols \ --list-source-ports --list-icmp-blocks \ --list-forward-ports --list-rich-rules --list-all" OPTIONS_ZONE_PERMANENT_ONLY="--get-description --get-short \ --set-description= --set-short=" OPTIONS_IPSET_ACTION_ACTION="--add-entry= --remove-entry= --query-entry= --add-entries-from-file= --remove-entries-from-file" OPTIONS_IPSET_ADAPT_QUERY="--list-entries" # can be used with/without preceding --zone=<zone> OPTIONS_ZONE="${OPTIONS_ZONE_INTERFACES_SOURCES} \ ${OPTIONS_ZONE_ACTION_ACTION} ${OPTIONS_ZONE_ADAPT_QUERY} ${OPTIONS_ZONE_PERMANENT_ONLY}" OPTIONS_IPSET="${OPTIONS_IPSETACTION_ACTION} ${OPTIONS_IPSET_ADAPT_QUERY}" OPTIONS_PERMANENT_ONLY="--new-icmptype= --new-icmptype-from-file= --delete-icmptype= \ --new-service= --new-service-from-file= --delete-service= \ --new-zone= --new-zone-from-file= --delete-zone= \ --new-ipset= --new-helper-from-file= --delete-ipset= \ --new-helper= --new-helper-from-file= --delete-helper= \ --get-target --set-target= \ --path-zone= --path-service= --path-icmptype= \ --path-ipset= --path-helper=" OPTIONS_NEW_IPSET="--type= --option=" OPTIONS_NEW_HELPER="--module= --family=" OPTIONS_HELPER="" # can be used after --permanent OPTIONS_PERMANENT="${OPTIONS_CONFIG} --zone= ${OPTIONS_ZONE} \ ${OPTIONS_PERMANENT_ONLY}" OPTIONS_DIRECT="--passthrough \ --add-chain --remove-chain --query-chain --get-chains --get-all-chains \ --add-rule --remove-rule --remove-rules --query-rule --get-rules --get-all-rules \ --add-passthrough --remove-passthrough \ --query-passthrough --get-passthroughs --get-all-passthroughs" # these all can be used as a "first" option OPTIONS_GENERAL="--help --version \ --state --reload --complete-reload \ --panic-on --panic-off --query-panic \ --get-log-denied --set-log-denied= --get-ipset-types \ --lockdown-on --lockdown-off --query-lockdown \ --get-default-zone --set-default-zone= --get-active-zones \ --get-zone-of-interface= --get-zone-of-interface= \ ${OPTIONS_CONFIG} \ --zone= ${OPTIONS_ZONE} \ --permanent --direct" _firewall_cmd() { local cur prev words cword split _init_completion -s || return case $prev in --*-entries-from-file|--new-*-from-file) _filedir return ;; --new-ipset*) if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W "${OPTIONS_NEW_IPSET}" -- "$cur") ) fi ;; --new-helper*) if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W "${OPTIONS_NEW_HELPER}" -- "$cur") ) fi ;; --new-*) ;; --zone|--set-default-zone|--info-zone|--path-zone) if [[ ${words[@]} == *--permanent* ]]; then COMPREPLY=( $( compgen -W '`firewall-cmd --permanent --get-zones`' -- "$cur" ) ) else COMPREPLY=( $( compgen -W '`firewall-cmd --get-zones`' -- "$cur" ) ) fi ;; --zone=*) COMPREPLY=( $( compgen -W "${OPTIONS_ZONE}" -- "$cur" ) ) ;; --ipset=*) COMPREPLY=( $( compgen -W "${OPTIONS_IPSET}" -- "$cur" ) ) ;; --*-ipset) if [[ ${words[@]} == *--permanent* ]]; then COMPREPLY=( $( compgen -W '`firewall-cmd --permanent --get-ipsets`' -- "$cur" ) ) else COMPREPLY=( $( compgen -W '`firewall-cmd --get-ipsets`' -- "$cur" ) ) fi ;; --*-service) if [[ ${words[@]} == *--permanent* ]]; then COMPREPLY=( $( compgen -W '`firewall-cmd --permanent --get-services`' -- "$cur" ) ) else COMPREPLY=( $( compgen -W '`firewall-cmd --get-services`' -- "$cur" ) ) fi ;; --helper|--info-helper|--path-helper) if [[ ${words[@]} == *--permanent* ]]; then COMPREPLY=( $( compgen -W '`firewall-cmd --permanent --get-helpers`' -- "$cur" ) ) else COMPREPLY=( $( compgen -W '`firewall-cmd --get-helpers`' -- "$cur" ) ) fi ;; --helper=*) COMPREPLY=( $( compgen -W "${OPTIONS_HELPER}" -- "$cur" ) ) ;; --*-icmp-block|--info-icmptype|--path-icmptype) if [[ ${words[@]} == *--permanent* ]]; then COMPREPLY=( $( compgen -W '`firewall-cmd --permanent --get-icmptypes`' -- "$cur" ) ) else COMPREPLY=( $( compgen -W '`firewall-cmd --get-icmptypes`' -- "$cur" ) ) fi ;; --list-services|--add-service=*|--remove-service=*|--query-service=*|\ --list-ports|--add-port=*|--remove-port=*|--query-port=*|\ --list-source-ports|--add-source-port=*|--remove-source-port=*|--query-source-port=*|\ --list-protocols|--add-protocol=*|--remove-protocol=*|--query-protocol=*|\ --list-icmp-blocks|--add-icmp-block=*|--remove-icmp-block=*|--query-icmp-block=*|\ --list-forward-ports|--add-forward-port=*|--remove-forward-port=*|--query-forward-port=*|\ --list-interfaces|--add-interface=*|--remove-interface=*|--query-interface=*|\ --list-sources|--add-source=*|--remove-source=*|--query-source=*|\ --add-masquerade|--remove-masquerade|--query-masquerade|--list-all|\ --get-description|--get-short|--set-description=*|--set-short=*) opts="" # --add and --remove can be used multiple times if [[ ( ${prev} == --add-* ) || ( ${prev} == --remove-* ) ]]; then [[ ${prev} == *=* ]] && opts="${prev%=*}=" || opts="${prev}" fi if [[ ! ${words[@]} == *--permanent* ]]; then opts="${opts} --permanent" [[ ${prev} == --add-* ]] && opts="${opts} --timeout=" fi [[ ! ${words[@]} == *--zone=* ]] && opts="${opts} --zone=" if [ -n "${opts}" ]; then COMPREPLY=( $( compgen -W "${opts}" -- "$cur" ) ) fi ;; --*-interface|--change-zone) _available_interfaces ;; --permanent) [[ ${words[@]} == *--direct* ]] && opts="${OPTIONS_DIRECT}" || opts="${OPTIONS_PERMANENT} --direct" COMPREPLY=( $( compgen -W "${opts}" -- "$cur" ) ) ;; --direct) [[ ${words[@]} == *--permanent* ]] && opts="${OPTIONS_DIRECT}" || opts="${OPTIONS_DIRECT} --permanent" COMPREPLY=( $( compgen -W "${opts}" -- "$cur" ) ) ;; --*-rich-rule) # to not be matched with --*-rule below return 0 ;; --passthrough|--*-chain|--get-chains|--*-rule|--get-rules|--remove-rules) COMPREPLY=( $( compgen -W 'ipv4 ipv6 eb' -- "$cur" ) ) ;; ipv4|ipv6|eb) if [[ ${words[@]} == *--passthrough* ]]; then return 0 else COMPREPLY=( $( compgen -W 'nat filter mangle' -- "$cur" ) ) fi ;; *) if [[ "$cur" == -* ]]; then if [[ ${words[@]} == *--new-ipset* ]]; then COMPREPLY=( $( compgen -W "${OPTIONS_NEW_IPSET}" -- "$cur") ) else COMPREPLY=( $( compgen -W "${OPTIONS_GENERAL}" -- "$cur") ) fi fi ;; esac # do not append a space to words that end with = [[ $COMPREPLY == *= ]] && compopt -o nospace } && complete -F _firewall_cmd firewall-cmd
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
addpart | File | 520 B | 0644 |
|
blkdiscard | File | 651 B | 0644 |
|
blkid | File | 1.47 KB | 0644 |
|
blockdev | File | 761 B | 0644 |
|
bootctl | File | 1.79 KB | 0644 |
|
busctl | File | 7.54 KB | 0644 |
|
cal | File | 404 B | 0644 |
|
cfdisk | File | 736 B | 0644 |
|
chcpu | File | 1.18 KB | 0644 |
|
chfn | File | 445 B | 0644 |
|
chrt | File | 800 B | 0644 |
|
chsh | File | 506 B | 0644 |
|
col | File | 460 B | 0644 |
|
colcrt | File | 484 B | 0644 |
|
colrm | File | 509 B | 0644 |
|
column | File | 725 B | 0644 |
|
coredumpctl | File | 3.34 KB | 0644 |
|
ctrlaltdel | File | 335 B | 0644 |
|
delpart | File | 649 B | 0644 |
|
dmesg | File | 1.03 KB | 0644 |
|
dracut | File | 3.5 KB | 0644 |
|
eject | File | 1.16 KB | 0644 |
|
fallocate | File | 593 B | 0644 |
|
fdformat | File | 414 B | 0644 |
|
fdisk | File | 1.05 KB | 0644 |
|
findmnt | File | 2.77 KB | 0644 |
|
firewall-cmd | File | 10.1 KB | 0644 |
|
flock | File | 860 B | 0644 |
|
fsck | File | 789 B | 0644 |
|
fsck.cramfs | File | 508 B | 0644 |
|
fsck.minix | File | 403 B | 0644 |
|
fsfreeze | File | 524 B | 0644 |
|
fstrim | File | 626 B | 0644 |
|
gapplication | File | 1.36 KB | 0644 |
|
gdbus | File | 935 B | 0644 |
|
getopt | File | 815 B | 0644 |
|
grub | File | 11.41 KB | 0644 |
|
gsettings | File | 2.76 KB | 0644 |
|
hexdump | File | 659 B | 0644 |
|
hostnamectl | File | 2.16 KB | 0644 |
|
hwclock | File | 937 B | 0644 |
|
ionice | File | 837 B | 0644 |
|
ipcrm | File | 1.39 KB | 0644 |
|
ipcs | File | 514 B | 0644 |
|
isosize | File | 426 B | 0644 |
|
journalctl | File | 5.4 KB | 0644 |
|
kernel-install | File | 1.75 KB | 0644 |
|
kmod | File | 3.16 KB | 0644 |
|
ldattach | File | 1.23 KB | 0644 |
|
localectl | File | 3.36 KB | 0644 |
|
logger | File | 1.13 KB | 0644 |
|
loginctl | File | 4.03 KB | 0644 |
|
look | File | 572 B | 0644 |
|
losetup | File | 1.47 KB | 0644 |
|
lsblk | File | 1.44 KB | 0644 |
|
lscpu | File | 829 B | 0644 |
|
lsinitrd | File | 2.05 KB | 0644 |
|
lslocks | File | 1002 B | 0644 |
|
machinectl | File | 3.12 KB | 0644 |
|
mcookie | File | 502 B | 0644 |
|
mkfs | File | 692 B | 0644 |
|
mkfs.cramfs | File | 821 B | 0644 |
|
mkfs.minix | File | 716 B | 0644 |
|
mkswap | File | 765 B | 0644 |
|
more | File | 528 B | 0644 |
|
mountpoint | File | 570 B | 0644 |
|
namei | File | 500 B | 0644 |
|
nmcli | File | 3.74 KB | 0644 |
|
nsenter | File | 955 B | 0644 |
|
partx | File | 1.07 KB | 0644 |
|
pivot_root | File | 387 B | 0644 |
|
prlimit | File | 1.16 KB | 0644 |
|
raw | File | 482 B | 0644 |
|
readprofile | File | 679 B | 0644 |
|
rename | File | 632 B | 0644 |
|
renice | File | 812 B | 0644 |
|
resizepart | File | 691 B | 0644 |
|
rev | File | 432 B | 0644 |
|
rpm | File | 9.77 KB | 0644 |
|
rtcwake | File | 841 B | 0644 |
|
runuser | File | 864 B | 0644 |
|
script | File | 667 B | 0644 |
|
scriptreplay | File | 592 B | 0644 |
|
semanage | File | 6.42 KB | 0644 |
|
setarch | File | 775 B | 0644 |
|
setpriv | File | 1.97 KB | 0644 |
|
setsebool | File | 1.77 KB | 0644 |
|
setsid | File | 433 B | 0644 |
|
setterm | File | 2.24 KB | 0644 |
|
sfdisk | File | 1.41 KB | 0644 |
|
su | File | 864 B | 0644 |
|
swaplabel | File | 635 B | 0644 |
|
swapon | File | 1.32 KB | 0644 |
|
systemctl | File | 12.29 KB | 0644 |
|
systemd-analyze | File | 3.9 KB | 0644 |
|
systemd-cat | File | 1.87 KB | 0644 |
|
systemd-cgls | File | 1.75 KB | 0644 |
|
systemd-cgtop | File | 1.32 KB | 0644 |
|
systemd-delta | File | 1.91 KB | 0644 |
|
systemd-detect-virt | File | 1.29 KB | 0644 |
|
systemd-nspawn | File | 5.74 KB | 0644 |
|
systemd-run | File | 3.51 KB | 0644 |
|
tailf | File | 530 B | 0644 |
|
taskset | File | 1.06 KB | 0644 |
|
tc | File | 26.41 KB | 0644 |
|
timedatectl | File | 2.52 KB | 0644 |
|
tuned-adm | File | 511 B | 0644 |
|
udevadm | File | 3.64 KB | 0644 |
|
ul | File | 655 B | 0644 |
|
unshare | File | 496 B | 0644 |
|
utmpdump | File | 466 B | 0644 |
|
uuidgen | File | 384 B | 0644 |
|
wdctl | File | 1.17 KB | 0644 |
|
whereis | File | 535 B | 0644 |
|
wipefs | File | 760 B | 0644 |
|
write | File | 494 B | 0644 |
|
yum | File | 11.23 KB | 0644 |
|
yummain.py | File | 11.23 KB | 0644 |
|
zramctl | File | 1.18 KB | 0644 |
|