Configuration Information [Automatically generated, do not change]: Machine: x86_64 OS: linux-gnu Compiler: gcc Compilation CFLAGS: -g -O2 -fdebug-prefix-map=/build/bash-a6qmCk/bash-5.0=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -Wno-parentheses -Wno-format-security uname output: Linux ubandroid 5.8.0-53-generic #60~20.04.1-Ubuntu SMP Thu May 6 09:52:46 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux Machine Type: x86_64-pc-linux-gnu
Machine: aarch64 OS: linux-gnu Compiler: gcc Compilation CFLAGS: -g -O2 -fdebug-prefix-map=/build/bash-i8mNiV/bash-5.0=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -Wno-parentheses -Wno-format-security uname output: Linux it4us.top 5.4.0-1035-raspi #38-Ubuntu SMP PREEMPT Tue Apr 20 21:37:03 UTC 2021 aarch64 aarch64 aarch64 GNU/Linux Machine Type: aarch64-unknown-linux-gnu Bash Version: 5.0 Patch Level: 17 Release Status: release Configuration Information [Automatically generated, do not change]: Machine: x86_64 OS: linux-gnu Compiler: gcc Compilation CFLAGS: -DPROGRAM='bash' -DCONF_HOSTTYPE='x86_64' -DCONF_OSTYPE='linux-gnu' -DCONF_MACHTYPE='x86_64-redhat-linux-gnu' -DCONF_VENDOR='redhat' -DLOCALEDIR='/usr/share/locale' -DPACKAGE='bash' -DSHELL -DHAVE_CONFIG_H -I. -I. -I./include -I./lib -D_GNU_SOURCE -DRECYCLES_PIDS -DDEFAULT_PATH_VALUE='/usr/local/bin:/usr/bin' -DSYSLOG_HISTORY -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -Wno-parentheses -Wno-format-security uname output: Linux localhost.localdomain 4.18.0-240.22.1.el8_3.x86_64 #1 SMP Thu Apr 8 19:01:30 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux Machine Type: x86_64-redhat-linux-gnu Bash Version: 4.4 Patch Level: 19 Release Status: release Description: --------------------------first script where declare -x -g works #!/usr/bin/bash xas(){ [[ $cnt == 1 ]] && declare -g -x ThreeNestedbug="not a 3-nested variable-bug !!" [[ $cnt == 2 ]] && ThreeNestedbug="" } bar(){ [[ $cnt == 1 ]] && declare -g -x nestedbug="not a nested variable-bug !!" [[ $cnt == 2 ]] && nestedbug="" xas } foo(){ [[ $cnt == 0 ]] && declare -g -x bug="not a variable-bug !!" [[ $cnt == 1 ]] && bar && echo ${nestedbug:?"variable should be shown"} [[ $cnt == 2 ]] && bar && echo ${nestedbug} " nestedbug variable should be not shown" [[ $cnt == 3 ]] && bug="" } cnt=0 foo echo ${bug:?"variable should be shown"} cnt=$(( $cnt + 1)) foo echo ${ThreeNestedbug:?"variable should be shown"} echo ${nestedbug:?"variable not shown"} cnt=$(( $cnt + 1)) foo echo ${ThreeNestedbug} "ThreeNestedbug variable should not be shown" echo ${nestedbug} "variable not shown" cnt=$(( $cnt + 1)) foo echo ${bug:?"yes - variable should not be shown"} ---------------------end of working script ------------------------------------------------ --------------------------begin of not working script ------------------------------------ #!/usr/bin/bash doTrap(){ cd ${OPWD} exit $1 } doExit(){ bannerPrint $1 kill -15 $$ } bannerPrint(){ printf "\n\n$*\n\n" } mkMasterKey(){ : } mkSubmissionMsg(){ submissionMsg="\n\ e-mail certificate request file ${PWD}/certreqs/${1}.${sExt}.csr.pem to $_WWW service provider at $_EMAIL .\n\ If you did not receive and answer within a short time, your certificate might have been rejected\n\ because of incorrect data, such as mismatched e-mail address, implausible country or postal code.\n\ $_WWW needs to be able to contact certificate holder for security and business reasons.\n\ Only the ${1} 'id' will be stored in the signed certificate.\n\ The remaining data stays in your certificate signig request (csr).\n\ It will be needed to sign additional future communication.\n\ Keep backed up!" echo ${submissionMsg} } mkPersonalCsr(){ umask 0077 sExt=p bannerPrint Generating CSR for ${2} PS3="Enter corresponding number of chosen key - control-d (^D) to request a new one: " select key in $( ls -1 ${SAFE_STORE}/private/*.key.pem ); do break; done #read -s -p "enter password for newly created key $key: " passw1 && export passw1 if [[ "#${key}#" = "##" || ${key} = "0" ]] then key=$PWD/private/$2.${sExt}.key.pem _key=$(basename $key) openssl req -new -subject -newhdr ${passw1:+-passout env:passw1} -verbose -subj "${1}/UID=skey:${_key}" -keyout ${key} -out ${SAFE_STORE}/certreqs/${2}.${sExt}.csr.pem || \ doExit "Exiting from line number ${LINENO}" $? else _key=$(basename $key) openssl req -new -subject -newhdr -verbose -subj "${1}/UID=skey:${_key}" -key ${key} ${passw1:+-passout env:passw1} -out ${SAFE_STORE}/certreqs/${2}.${sExt}.csr.pem || \ doExit "Exiting from line number ${LINENO}" $? fi bannerPrint $( mkSubmissionMsg $2 ${_key} ) } mkDeviceCsr(){ umask 0077 sExt=d bannerPrint Generating CSR for ${2} PS3="Enter corresponding number of chosen key - control-d (^D) to request a new one: " select key in $( ls -1 ${SAFE_STORE}/private/*.key.pem ); do break; done if [[ "#${key}#" = "##" || ${key} = "0" ]] then read -s -e -p "enter password for newly created key $key: " passw1 && export passw1 openssl req -new -subject -newhdr -verbose -passout env:passw1 -subj "${1}/UID=skey:${2}.${sExt}" -keyout $PWD/private/${2}.${sExt}.key.pem -out ${SAFE_STORE}/certreqs/${2}.${sExt}.csr.pem || \ doExit "Exiting from line number ${LINENO}" $? fi if [ "#${key}#" != "##" ] then read -s -e -p "enter password for existing key $key: " passw1 && export passw1 openssl req -new -subject -newhdr -verbose -passout env:passw1 -subj "${1}/UID=skey:${2}.${sExt}" -keyin ${SAFE_STORE}/private/${key} -out ${SAFE_STORE}/certreqs/${2}.${sExt}.csr.pem || \ doExit "Exiting from line number ${LINENO}" $? fi bannerPrint $( mkSubmissionMsg $2 ${key} ) } mkServerCsr(){ umask 0077 sExt=s bannerPrint Generating CSR for ${2} PS3="Enter corresponding number of chosen key - control-d (^D) to request a new one: " select key in $( ls -1 ${SAFE_STORE}/private/*.key.pem ); do break; done if [[ "#${key}#" = "##" || ${key} = "0" ]] then read -s -e -p "enter password for newly created key $key: " passw1 && export passw1 openssl req -new -subject -newhdr -verbose -passout env:passw1 -subj "${1}/UID=skey:${2}.${sExt}" -keyout $PWD/private/${2}.${sExt}.key.pem -out ${SAFE_STORE}/certreqs/${2}.${sExt}.csr.pem || \ doExit "Exiting from line number ${LINENO}" $? fi if [ "#${key}#" != "##" ] then read -s -e -p "enter password for existing key $key: " passw1 && export passw1 openssl req -new -subject -newhdr -verbose -passout env:passw1 -subj "${1}/UID=skey:${2}.${sExt}" -keyin ${SAFE_STORE}/private/${key} -out ${SAFE_STORE}/certreqs/${2}.${sExt}.csr.pem || \ doExit "Exiting from line number ${LINENO}" $? fi bannerPrint $( mkSubmissionMsg $2 ${key}) } makeCsrSubjectString(){ uCN=${1^^} shift uUIDORG=${1^^} shift uFN=${1^^} shift uMN=${1^^} shift uLN=${1^^} shift uA=${1^^} shift uL=${1^^} shift uST=${1^^} shift uC=${1^^} uC=${uC:?"country is required"} shift uZIP=${1^^} uZIP=${uZIP:?"postalCode is required"} shift lEMAIL=${1,,} lEMAIL=${lEMAIL:?"email is required"} shift uFDQN=${1^^} lFDQN=${1,,} IFS=. read -a uaFDQN <<< ${uFDQN} IFS=. read -a laFDQN <<< ${lFDQN} uORG=${uaFDQN[-1]} lORG=${laFDQN[-1]} uDQN=${uFDQN%.${uORG}} dashWWW=${1//./-} udashWWW=${dashWWW^^} ldashWWW=${dashWWW,,} uO=${uDQN} O=${uFDQN} shift www="${lFDQN}" sub="\ /CN=${uCN}\ /UID=${uFN:+firstName:$uFN}\ /UID=${uMN:+middleName:$uMN}\ /UID=${uLN:+lastName:$uLN}\ /UID=${uUIDORG:+organization:$uUIDORG}\ /UID=${uA:+streetAddress:$uA}\ /L=${uL}/ST=${uST}\ /C=${uC}\ /UID=${uZIP:+postalCode:$uZIP}\ /DC=${uO}\ /DC=${uORG}\ /emailAddress=${lEMAIL}" } doOptions(){ declare -g -x nestedbug="NOT BUG" return 0 while getopts "dk:psu:x" opts $@ do OPTIND=1 case ${opts} in d) echo Device;; k) shift;keyIn=$1;; p) echo Personal;; s) echo Server;; u) shift;declare -g -x tmpuuid=$1;; x) set -x 2> /dev/null ;; # *) doExit $helpMsg 1;; esac shift done } doRun(){ #run=$( doOptions -p -u sdfgsdfgsdf -d -s -x ) run=$( doOptions $* ) echo ${nestedbug:?error} [[ "#${tmpuuid}#" == "##" ]] && typeset -p && exit 0 [[ "#${tmpuuid}#" == "##" ]] && tmpuuid=$( uuidgen -r ) PS3="Select certificate type: " [ "#${run}#" = "##" ] && select run in Device Personal Server; do break; done _WWW=VBOX.ORG #set to ca-organization sigining this certificate _EMAIL=webmas...@it4us.top SAFE_STORE="$HOME/.${_WWW}.store" #to your secret but separate safe storage area [ -d ${SAFE_STORE}/private ] || mkdir -p ${SAFE_STORE}/{certreqs,certs,crl,newcerts,private} cd ${SAFE_STORE} || doExit "Failed to create ${SAFE_STORE} directory." ${LINENO} 1 shift if [ $# -lt 10 ] then read -p 'Enter your Organization: ' ORGN || doExit "Exiting from line number ${LINENO}" $? read -p 'Enter your first name: ' FIRSTN || doExit "Exiting from line number ${LINENO}" $? read -p 'Enter your middle name: ' MIDDLEN || doExit "Exiting from line number ${LINENO}" $? read -p 'Enter your last name: ' LASTN || doExit "Exiting from line number ${LINENO}" $? read -p 'Enter your Address: ' A || doExit "Exiting from line number ${LINENO}" $? read -p 'Enter City/Locality: ' L || doExit "Exiting from line number ${LINENO}" $? read -p 'Enter State/Province: ' ST || doExit "Exiting from line number ${LINENO}" $? while [ "#${C}#" = "##" ] do read -p 'Enter your two lettered Country abbreviation [Required]: ' C || doExit "Exiting from line number ${LINENO}" $? done while [ "#${ZIP}#" = "##" ] do read -p 'Enter Postal Code [Required]: ' ZIP || doExit "Exiting from line number ${LINENO}" $? done while [ "#${EMAIL}#" = "##" ] do read -p 'Enter the complete e-mail for this identity ( e.g first.l...@emailaddress.org) [Required]: ' EMAIL || doExit "Exiting from line number ${LINENO}" $? done makeCsrSubjectString "${tmpuuid}" "$ORGN" "$FIRSTN" "$MIDDLEN" "$LASTN" "$A" "$L" "$ST" "$C" "$ZIP" "$EMAIL" "$_WWW" && "mk${run}Csr" "${sub}" "${tmpuuid}" else makeCsrSubjectString "${tmpuuid}" "$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9" "${10}" "$_WWW" && "mk${run}Csr" "${sub}" "${tmpuuid}" fi } testIt(){ #doRun -p "" "" "" "" "" "" "" us postalcode email #<< this would generate a csr with the minimally required data doRun "" "" "" "" "" "" "" us postalcode email #<< this should result in interactive data collection #doRun -p "" "" "" "" "" "" "" country postalcode email #<< this should result in error #doRun -p "" "" "" "" "" "" "" "" postalcode email #<< this should result in error #doRun -p "" "" "" "" "" "" "" country "" email #<< this should result in error #doRun -p "" "" "" "" "" "" "" country postalcode "" #<< this should result in error } #main program below OPWD=$PWD helpMsg=" $0 \n create certificate request for \n -d device \n -p person \n -s server \n " trap doTrap SIGHUP SIGINT SIGQUIT SIGPIPE SIGTERM #doRun -p "Your Org" First Middle Last "street address" city state/province country postalcode email #doRun -p "Super Computer Solutions, Inc." Charles 'K.' Wonder "100 Main Street #100A" cheyenne wy us 82001 charles-won...@secretmail.io #testIt doRun "-p $@" cd ${OPWD} --------------------end of not working script ------------------------------------------- [Detailed description of the problem, suggestion, or complaint.] ----------------------------------------------begin excerpt of execution log of no working script ----------------------- doOptions(){ declare -g -x nestedbug="NOT BUG" return 0 while getopts "dk:psu:x" opts $@ do OPTIND=1 case ${opts} in d) echo Device;; k) shift;keyIn=$1;; p) echo Personal;; s) echo Server;; u) shift;declare -g -x tmpuuid=$1;; x) set -x 2> /dev/null ;; # *) doExit $helpMsg 1;; esac shift done } doRun(){ #run=$( doOptions -p -u sdfgsdfgsdf -d -s -x ) run=$( doOptions $* ) echo ${nestedbug:?error} [[ "#${tmpuuid}#" == "##" ]] && typeset -p && exit 0 #main program below OPWD=$PWD + OPWD=/home/vbox/gits/vbox-docs helpMsg=" $0 \n create certificate request for \n -d device \n -p person \n -s server \n " + helpMsg=' make-bug-csr.sh \n create certificate request for \n -d device \n -p person \n -s server \n ' trap doTrap SIGHUP SIGINT SIGQUIT SIGPIPE SIGTERM + trap doTrap SIGHUP SIGINT SIGQUIT SIGPIPE SIGTERM #doRun -p "Your Org" First Middle Last "street address" city state/province country postalcode email #doRun -p "Super Computer Solutions, Inc." Charles 'K.' Wonder "100 Main Street #100A" cheyenne wy us 82001 charles-won...@secretmail.io #testIt doRun "-p $@" + doRun '-p -u' trwretwer ++ doOptions -p -u trwretwer ++ declare -g -x 'nestedbug=NOT BUG' ++ return 0 + run= make-bug-csr.sh: line 173: nestedbug: error ------------------------------------------------------end bug.log ------------------------------------------------- Repeat-By: [Describe the sequence of events that causes the problem to occur.] bash.bug.sh bash -x -v make-bug-csr.sh -u trwretwer > bug.log 2>&1