[Bash-completion-commits] ./current r1268: new standalone completion for openssl

Guillaume Rousse guillomovitch at zarb.org
Mon Jan 19 20:35:37 UTC 2009


------------------------------------------------------------
revno: 1268
committer: Guillaume Rousse <guillomovitch at zarb.org>
branch nick: current
timestamp: Mon 2009-01-19 21:35:37 +0100
message:
  new standalone completion for openssl
added:
  to_review/openssl
-------------- next part --------------
=== added file 'to_review/openssl'
--- a/to_review/openssl	1970-01-01 00:00:00 +0000
+++ b/to_review/openssl	2009-01-19 20:35:37 +0000
@@ -0,0 +1,291 @@
+# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*-
+# ex: ts=8 sw=8 noet filetype=sh
+#
+# bash completion for openssl
+
+have openssl && {
+_openssl_sections()
+{
+	local config
+
+	# start with default configuration
+	config=/etc/pki/tls/openssl.cnf
+
+	# check if a specific configuration file is used
+	for (( i=2; i < COMP_CWORD; i++ )); do
+		if [[ "${COMP_WORDS[i]}" == -config ]]; then
+			config=${COMP_WORDS[i+1]}
+			break
+		fi
+	done
+
+	[ ! -f $config ] && return 0
+
+	COMPREPLY=( $( awk '/\[.*\]/ {print $2} ' $config | grep "^$cur" ) )
+}
+
+_openssl()
+{
+	local cur prev commands command options formats
+
+	COMPREPLY=()
+	cur=`_get_cword`
+
+	commands='asn1parse ca ciphers crl crl2pkcs7 dgst dh dhparam dsa \
+		dsaparam ec ecparam enc engine errstr gendh gendsa genrsa \
+		nseq ocsp passwd pkcs12 pkcs7 pkcs8 prime rand req rsa \
+		rsautl s_client s_server s_time sess_id smime speed spkac \
+		verify version x509 md2 md4 md5 rmd160 sha sha1 aes-128-cbc \
+		aes-128-ecb aes-192-cbc aes-192-ecb aes-256-cbc aes-256-ecb \
+		base64 bf bf-cbc bf-cfb bf-ecb bf-ofb camellia-128-cbc \
+		camellia-128-ecb camellia-192-cbc camellia-192-ecb \
+		camellia-256-cbc camellia-256-ecb cast cast-cbc cast5-cbc \
+		cast5-cfb cast5-ecb cast5-ofb des des-cbc des-cfb des-ecb \
+		des-ede des-ede-cbc des-ede-cfb des-ede-ofb des-ede3 \
+		des-ede3-cbc des-ede3-cfb des-ede3-ofb des-ofb des3 desx rc2 \
+		rc2-40-cbc rc2-64-cbc rc2-cbc rc2-cfb rc2-ecb rc2-ofb rc4 \
+		rc4-40'
+
+	if [ $COMP_CWORD -eq 1 ]; then
+		COMPREPLY=( $( compgen -W "$commands" -- $cur ) )
+	else
+		command=${COMP_WORDS[1]}
+		prev=${COMP_WORDS[COMP_CWORD-1]}
+		case $prev in
+			-@(CA|CAfile|CAkey|CAserial|cert|certfile|config|content|dcert|dkey|dhparam|extfile|in|inkey|kfile|key|keyout|out|oid|prvrify|rand|recip|revoke|sess_in|sess_out|spkac|sign|signkey|signer|signature|ss_cert|untrusted|verify))
+				_filedir
+				return 0
+				;;
+			-@(outdir|CApath))
+				_filedir -d
+				return 0
+				;;
+			-@(name|crlexts|extensions))
+				_openssl_sections
+				return 0
+				;;
+			-@(in|out|key|cert|CA|CAkey|dkey|dcert)form)
+				formats='DER PEM'
+				case $command in
+					x509)
+						formats="$formats NET"
+						;;
+					smime)
+						formats="$formats SMIME"
+						;;
+				esac
+				COMPREPLY=( $( compgen -W "$formats" -- $cur ) )
+				return 0
+				;;
+			-connect)
+				_known_hosts
+				return 0
+				;;
+			-starttls)
+				COMPREPLY=( $( compgen -W 'smtp pop3 imap ftp' \
+					-- $cur ) )
+				return 0
+				;;
+			-cipher)
+				COMPREPLY=( $( compgen -W "$(openssl ciphers | \
+					tr ':' '\n')" -- $cur ) )
+				return 0
+				;;
+		esac
+
+		if [[ "$cur" == -* ]]; then
+			# possible options for the command
+			case $command in
+				asn1parse)
+					options='-inform -in -out -noout \
+						-offset -length -i -oid \
+						-strparse'
+					;;
+				ca)
+					options='-verbose -config -name \
+						-gencrl -revoke -crl_reason \
+						-crl_hold -crl_compromise \
+						-crl_CA_compromise -crldays \
+						-crlhours -crlexts -startdate \
+						-enddate -days -md -policy \
+						-keyfile -key -passin -cert \
+						-selfsig -in -out -notext \
+						-outdir -infiles -spkac \
+						-ss_cert -preserveDN \
+						-noemailDN -batch -msie_hack \
+						-extensions -extfile -engine \
+						-subj -utf8 -multivalue-rdn'
+						;;
+				ciphers)
+					options='-v -ssl2 -ssl3 -tls1'
+					;;
+				crl)
+					options='-inform -outform -text -in \
+						-out -noout -hash -issuer \
+						-lastupdate -nextupdate \
+						-CAfile -CApath'
+					;;
+				crl2pkcs7)
+					options='-inform -outform -in -out \
+						-print_certs'
+					;;
+				dgst)
+					options='-md5 -md4 -md2 -sha1 -sha \
+						-mdc2 -ripemd160 -dss1 -c -d \
+						-hex -binary -out -sign \
+						-verify -prverify -signature'
+					;;
+				dsa)
+					options='-inform -outform -in -passin \
+						-out -passout -des -des3 -idea \
+						-text -noout -modulus -pubin \
+						-pubout'
+					;;
+				dsaparam)
+					options='-inform -outform -in -out \
+						-noout -text -C -rand -genkey'
+					;;
+				enc)
+					options='-ciphername -in -out -pass \
+						-e -d -a -A -k -kfile -S -K \
+						-iv -p -P -bufsize -debug'
+					;;
+				dhparam)
+					options='-inform -outform -in -out \
+						-dsaparam -noout -text -C -2 \
+						-5 -rand'
+					;;
+				gendsa)
+					options='-out -des -des3 -idea -rand'
+					;;
+				genrsa)
+					options='-out -passout -des -des3 \
+						-idea -f4 -3 -rand'
+					;;
+				pkcs7)
+					options='-inform -outform -in -out \
+						-print_certs -text -noout'
+					;;
+				rand)
+					options='-out -rand -base64'
+					;;
+				req)
+					options='-inform -outform -in -passin \
+						-out -passout -text -noout \
+						-verify -modulus -new -rand \
+						-newkey -newkey -nodes -key \
+						-keyform -keyout -md5 -sha1 \
+						-md2 -mdc2 -config -x509 \
+						-days -asn1-kludge -newhdr \
+						-extensions -reqexts section'
+					;;
+				rsa)
+					options='-inform -outform -in -passin \
+						-out -passout -sgckey -des \
+						-des3 -idea -text -noout \
+						-modulus -check -pubin -pubout \
+						-engine'
+					;;
+				rsautl)
+					options='-in -out -inkey -pubin \
+						-certin -sign -verify -encrypt \
+						-decrypt -pkcs -ssl -raw \
+						-hexdump -asn1parse'
+					;;
+				s_client)
+					options='-connect -verify -cert \
+						-certform -key -keyform -pass \
+						-CApath -CAfile -reconnect \
+						-pause -showcerts -debug -msg \
+						-nbio_test -state -nbio -crlf \
+						-ign_eof -quiet -ssl2 -ssl3 \
+						-tls1 -no_ssl2 -no_ssl3 \
+						-no_tls1 -bugs -cipher \
+						-starttls -engine -tlsextdebug \
+						-no_ticket -sess_out -sess_in \
+						-rand' 
+					;;
+				s_server)
+					options='-accept -context -verify \
+						-Verify -crl_check \
+						-crl_check_all -cert -certform \
+						-key -keyform -pass -dcert \
+						-dcertform -dkey -dkeyform \
+						-dpass -dhparam -nbio 
+						-nbio_test -crlf -debug -msg \
+						-state -CApath -CAfile -nocert \
+						-cipher -quiet -no_tmp_rsa \
+						-ssl2 -ssl3 -tls1 -no_ssl2 \
+						-no_ssl3 -no_tls1 -no_dhe \
+						-bugs -hack -www -WWW -HTTP \
+						-engine -tlsextdebug \
+						-no_ticket -id_prefix -rand'
+					;;
+				s_time)
+					options='-connect -www -cert -key \
+						-CApath -CAfile -reuse -new \
+						-verify -nbio -time -ssl2 \
+						-ssl3 -bugs -cipher'
+					;;
+				sess_id)
+					options='-inform -outform -in -out \
+						-text -noout -context ID'
+					;;
+				smime)
+					options='-encrypt -decrypt -sign \
+						-verify -pk7out -des -des3 \
+						-rc2-40 -rc2-64 -rc2-128 \
+						-aes128 -aes192 -aes256 -in \
+						-certfile -signer -recip \
+						-inform -passin -inkey -out \
+						-outform -content -to -from \
+						-subject -text -rand'
+					;;
+				speed)
+					options='-engine'
+					;;
+				verify)
+					options='-CApath -CAfile -purpose \
+						-untrusted -help \
+						-issuer_checks -verbose \
+						-certificates'
+					;;
+				x509)
+					options='-inform -outform -keyform \
+						-CAform -CAkeyform -in -out \
+						-serial -hash -subject-hash \
+						-issuer_hash -subject -issuer \
+						-nameopt -email -startdate \
+						-enddate -purpose -dates \
+						-modulus -fingerprint -alias \
+						-noout -trustout -clrtrust \
+						-clrreject -addtrust \
+						-addreject -setalias -days \
+						-set_serial -signkey \
+						-x509toreq -req -CA -CAkey \
+						-CAcreateserial -CAserial \
+						-text -C -md2 -md5 -sha1 -mdc2 \
+						-clrext -extfile -extensions \
+						-engine'
+					;;
+				@(md5|md4|md2|sha1|sha|mdc2|ripemd160))
+					options='-c -d'
+					;;
+			esac
+			COMPREPLY=( $( compgen -W "$options" -- $cur ) )
+		else
+			if [[ "$command" == speed ]]; then
+				COMPREPLY=( $( compgen -W 'md2 mdc2 md5 hmac \
+					sha1 rmd160 idea-cbc rc2-cbc rc5-cbc \
+					bf-cbc des-cbc des-ede3 rc4 rsa512 \
+					rsa1024 rsa2048 rsa4096 dsa512 dsa1024 \
+					dsa2048 idea rc2 des rsa blowfish' -- \
+					$cur ) )
+			else
+				_filedir
+			fi
+		fi
+	fi
+}
+complete -F _openssl $default openssl
+}



More information about the Bash-completion-commits mailing list