From b90c59e9fc75847bca3fa23c3b1a088f553aeb61 Mon Sep 17 00:00:00 2001 From: Oliver Kiddle Date: Sat, 31 Mar 2018 10:04:56 +0200 Subject: 42571: new completion for FreeBSD jail command --- ChangeLog | 5 ++++ Completion/BSD/Command/_jail | 53 +++++++++++++++++++++++++++++++++++++++++++ Completion/BSD/Command/_jexec | 2 +- 3 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 Completion/BSD/Command/_jail diff --git a/ChangeLog b/ChangeLog index 500b6a644..0a3594ee2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2018-03-31 Oliver Kiddle + + * 42571: Completion/BSD/Command/_jail, + Completion/BSD/Command/_jexec: new completion for FreeBSD jail + 2018-03-30 Oliver Kiddle * 42568: Completion/Unix/Command/_shutdown: new completion diff --git a/Completion/BSD/Command/_jail b/Completion/BSD/Command/_jail new file mode 100644 index 000000000..26d0a6a87 --- /dev/null +++ b/Completion/BSD/Command/_jail @@ -0,0 +1,53 @@ +#compdef jail + +local curcontext="$curcontext" ret=1 +local -a state state_descr line jails running alts suf +local -A opt_args + +_arguments -C -s \ + '-c[create a new jail]' \ + '-m[modify an existing jail]' \ + '-r[remove specified jail]' \ + '-d[allow changes to a dying jail]' \ + '-f+[specify configuration file]:config file [/etc/jail.conf]:_files' \ + '-h[resolve host.hostname and use IP addresses for the jail]' \ + '(-q)-i[output jail ID of new jails]' \ + '-J+[write a file containing parameters used to start the jail]:file:_files' \ + '-p+[limit the number of commands from exec.* that can run simultaneously]:limit' \ + '(-i -v)-q[suppress the message printed when a jail is created, modified or removed]' \ + '-R[remove jail without using the configuration file]' \ + '(-q)-v[print a message on every operation]' \ + '!-n+:name' '!-l' '!-s+:secure level' \!-{u,U}'+:user:_users' \ + '*:: :->args' && ret=0 + +if [[ -n $state ]]; then + if compset -P 1 '(^name)='; then + case ${IPREFIX%=} in + command|exec.*st(art|op)*) _cmdstring && ret=0 ;; + depend) _jails && ret=0 ;; + path) _directories && ret=0 ;; + host|vnet) alts=( 'values:value:(inherit new)' ) ;; + ip[46]) alts=( 'values:value:(inherit new disable)' ) ;; + *_user) _users && ret=0 ;; + *) _message -e values 'value' ;; + esac + elif compset -P name= || [[ $#line = 1 ]]; then + if (( $+opt_args[-r] || $+opt_args[-m] )); then + alts=( 'jails:jail:_jails' ) + elif (( $+opt_args[-c] )); then + running=( ${${(f)"$(_call_program jails jls name)"}/ /:} ) + jails=( ${${(M)${(f)"$(<${opt_args[-f]:-/etc/jail.conf})"}:#[a-z]# #\{#(#e)}%% *} ) + alts=( "jails:jail:compadd - ${jails:|running}" ) + fi + fi + if [[ -z $IPREFIX ]]; then + compset -S '=*' || suf=( -qS = ) + alts+=( + 'parameters:parameter:compadd -r "\n\t\- =" - persist allow.{set_hostname,sysvipc,raw_sockets,chflags,mount{,.devfs,.fdescfs,.nullfs,.procfs,.linprocfs,.linsysfs,.tmpfs,.zfs},quotas,socket_af} mount.{devfs,fdescfs,procfs}' + 'parameters:parameter:compadd $suf - jid name path ip{4,6}{,.addr{,sel}} vnet host.hostname host securelevel devfs_ruleset children.{max,cur} enforce_statfs cpuset.id osrelease osreldate command exec.{{,pre,post}{start,stop},clean,jail_user,system{,_jail}_user,timeout,consolelog,fib} stop.timeout {vnet.,}interface ip_hostname mount{,.fstab} depend' + ) + fi + (( $#alts )) && _alternative $alts && ret=0 +fi + +return ret diff --git a/Completion/BSD/Command/_jexec b/Completion/BSD/Command/_jexec index 85829d10e..6a2d05a81 100644 --- a/Completion/BSD/Command/_jexec +++ b/Completion/BSD/Command/_jexec @@ -4,7 +4,7 @@ _jexec_normal() { local PATH=$PATH local -a _comp_priv_prefix # relative paths are relative to the jail's root - path=( "$(command jls -j $words[1] path)"/$^path ) + path=( "$(_call_program paths jls -j $words[1] path)"/$^path ) shift 1 words; (( CURRENT-- )) _normal } -- cgit 1.4.1