From: Harald Hoyer Date: Fri, 26 Mar 2021 09:29:17 +0000 (+0100) Subject: fix(cms): shellcheck for modules.d/80cms X-Git-Tag: 054~242 X-Git-Url: http://git.ipfire.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=e08c644ee6bf5205713322fa5e19761aaa245dab;p=thirdparty%2Fdracut.git fix(cms): shellcheck for modules.d/80cms --- diff --git a/modules.d/80cms/.shchkdir b/modules.d/80cms/.shchkdir new file mode 100644 index 000000000..e69de29bb diff --git a/modules.d/80cms/cms-write-ifcfg.sh b/modules.d/80cms/cms-write-ifcfg.sh index 1f8496b9a..f73296f6d 100755 --- a/modules.d/80cms/cms-write-ifcfg.sh +++ b/modules.d/80cms/cms-write-ifcfg.sh @@ -2,14 +2,17 @@ type getarg > /dev/null 2>&1 || . /lib/dracut-lib.sh -mkdir -m 0755 -p /run/initramfs/state/etc/sysconfig/network-scripts +OLD_UMASK=$(umask) +umask 0022 +mkdir -p /run/initramfs/state/etc/sysconfig/network-scripts +umask "$OLD_UMASK" function cms_write_config() { . /tmp/cms.conf - SUBCHANNELS="$(echo $SUBCHANNELS | sed 'y/ABCDEF/abcdef/')" + SUBCHANNELS="$(echo "$SUBCHANNELS" | sed 'y/ABCDEF/abcdef/')" OLDIFS=$IFS IFS=, - read -a subch_array <<< "indexzero,$SUBCHANNELS" + read -ra subch_array <<< "indexzero,$SUBCHANNELS" IFS=$OLDIFS devbusid=${subch_array[1]} if [ "$NETTYPE" = "ctc" ]; then @@ -18,7 +21,7 @@ function cms_write_config() { driver=$NETTYPE fi - DEVICE=$(cd /sys/devices/${driver}/$devbusid/net/ && set -- * && [ "$1" != "*" ] && echo $1) + DEVICE=$(cd "/sys/devices/${driver}/$devbusid/net/" && set -- * && [ "$1" != "*" ] && echo "$1") uuid=$(cat /proc/sys/kernel/random/uuid) @@ -37,7 +40,7 @@ EOF echo "NETWORKING=yes" >> /etc/sysconfig/network fi - cat > $IFCFGFILE << EOF + cat > "$IFCFGFILE" << EOF DEVICE=$DEVICE UUID=$uuid ONBOOT=yes @@ -46,14 +49,14 @@ MTU=$MTU SUBCHANNELS=$SUBCHANNELS EOF if [ "$ipv6" ]; then - cat >> $IFCFGFILE << EOF + cat >> "$IFCFGFILE" << EOF IPV6INIT=yes IPV6_AUTOCONF=no IPV6ADDR=$IPADDR/$NETMASK IPV6_DEFAULTGW=$GATEWAY EOF else - cat >> $IFCFGFILE << EOF + cat >> "$IFCFGFILE" << EOF IPADDR=$IPADDR NETMASK=$NETMASK BROADCAST=$BROADCAST @@ -61,41 +64,28 @@ GATEWAY=$GATEWAY EOF fi if [ "$ipv6" ]; then - DNS1=$( - set -- ${DNS/,/ } - echo $1 - ) - DNS2=$( - set -- ${DNS/,/ } - echo $2 - ) + # shellcheck disable=SC2153 + IFS="," read -r DNS1 DNS2 _ <<< "$DNS" else - DNS1=$( - set -- ${DNS/:/ } - echo $1 - ) - DNS2=$( - set -- ${DNS/:/ } - echo $2 - ) + IFS=":" read -r DNS1 DNS2 _ <<< "$DNS" fi # real DNS config for NetworkManager to generate /etc/resolv.conf - [ "$DNS1" != "" ] && echo "DNS1=$DNS1" >> $IFCFGFILE - [ "$DNS2" != "" ] && echo "DNS2=$DNS2" >> $IFCFGFILE + [[ $DNS1 ]] && echo "DNS1=$DNS1" >> "$IFCFGFILE" + [[ $DNS2 ]] && echo "DNS2=$DNS2" >> "$IFCFGFILE" # just to please loader's readNetInfo && writeEnabledNetInfo # which eats DNS1,DNS2,... and generates it themselves based on DNS - if [ "$ipv6" ]; then - [ "$DNS" != "" ] && echo "DNS=\"$DNS\"" >> $IFCFGFILE + if [[ $ipv6 ]]; then + [[ $DNS ]] && echo "DNS=\"$DNS\"" >> "$IFCFGFILE" else - [ "$DNS" != "" ] && echo "DNS=\"${DNS/:/,}\"" >> $IFCFGFILE + [[ $DNS ]] && echo "DNS=\"${DNS/:/,}\"" >> "$IFCFGFILE" fi # colons in SEARCHDNS already replaced with spaces above for /etc/resolv.conf - [ "$SEARCHDNS" != "" ] && echo "DOMAIN=\"$SEARCHDNS\"" >> $IFCFGFILE - [ "$NETTYPE" != "" ] && echo "NETTYPE=$NETTYPE" >> $IFCFGFILE - [ "$PEERID" != "" ] && echo "PEERID=$PEERID" >> $IFCFGFILE - [ "$PORTNAME" != "" ] && echo "PORTNAME=$PORTNAME" >> $IFCFGFILE - [ "$CTCPROT" != "" ] && echo "CTCPROT=$CTCPROT" >> $IFCFGFILE - [ "$MACADDR" != "" ] && echo "MACADDR=$MACADDR" >> $IFCFGFILE + [[ $SEARCHDNS ]] && echo "DOMAIN=\"$SEARCHDNS\"" >> "$IFCFGFILE" + [[ $NETTYPE ]] && echo "NETTYPE=$NETTYPE" >> "$IFCFGFILE" + [[ $PEERID ]] && echo "PEERID=$PEERID" >> "$IFCFGFILE" + [[ $PORTNAME ]] && echo "PORTNAME=$PORTNAME" >> "$IFCFGFILE" + [[ $CTCPROT ]] && echo "CTCPROT=$CTCPROT" >> "$IFCFGFILE" + [[ $MACADDR ]] && echo "MACADDR=$MACADDR" >> "$IFCFGFILE" optstr="" for option in LAYER2 PORTNO; do [ -z "${!option}" ] && continue @@ -103,7 +93,7 @@ EOF optstr=${optstr}$(echo ${option} | sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/')"="${!option} done # write single quotes since network.py removes double quotes but we need quotes - echo "OPTIONS='$optstr'" >> $IFCFGFILE + echo "OPTIONS='$optstr'" >> "$IFCFGFILE" unset option unset optstr unset DNS1 diff --git a/modules.d/80cms/cmsifup.sh b/modules.d/80cms/cmsifup.sh index a8e686001..a319227a6 100755 --- a/modules.d/80cms/cmsifup.sh +++ b/modules.d/80cms/cmsifup.sh @@ -17,23 +17,10 @@ if [ "$ipv6" ] && ! str_starts "$GATEWAY" "["; then fi if [ "$ipv6" ]; then - DNS1=$( - set -- ${DNS/,/ } - echo $1 - ) - DNS2=$( - set -- ${DNS/,/ } - echo $2 - ) + # shellcheck disable=SC2153 + IFS="," read -r DNS1 DNS2 _ <<< "$DNS" else - DNS1=$( - set -- ${DNS/:/ } - echo $1 - ) - DNS2=$( - set -- ${DNS/:/ } - echo $2 - ) + IFS=":" read -r DNS1 DNS2 _ <<< "$DNS" fi { @@ -43,7 +30,7 @@ fi done } > /etc/cmdline.d/80-cms.conf -[ -e "/tmp/net.ifaces" ] && read IFACES < /tmp/net.ifaces +[ -e "/tmp/net.ifaces" ] && read -r IFACES < /tmp/net.ifaces IFACES="$IFACES $DEVICE" echo "$IFACES" >> /tmp/net.ifaces diff --git a/modules.d/80cms/cmssetup.sh b/modules.d/80cms/cmssetup.sh index 3b3cdb4ed..68e45632f 100755 --- a/modules.d/80cms/cmssetup.sh +++ b/modules.d/80cms/cmssetup.sh @@ -15,21 +15,21 @@ function sysecho() { fi done local status - read status < "$file" - if [[ $status != $* ]]; then - [ -f "$file" ] && echo $* > "$file" + read -r status < "$file" + if [[ $status != "$*" ]]; then + [ -f "$file" ] && echo "$*" > "$file" fi } function dasd_settle() { local dasd_status=/sys/bus/ccw/devices/$1/status - if [ ! -f $dasd_status ]; then + if [ ! -f "$dasd_status" ]; then return 1 fi local i=1 while [ $i -le 60 ]; do local status - read status < $dasd_status + read -r status < "$dasd_status" case $status in online | unformatted) return 0 @@ -44,8 +44,8 @@ function dasd_settle() { } function dasd_settle_all() { - for dasdccw in $(while read line || [ -n "$line" ]; do echo "${line%%(*}"; done < /proc/dasd/devices); do - if ! dasd_settle $dasdccw; then + for dasdccw in $(while read -r line || [ -n "$line" ]; do echo "${line%%(*}"; done < /proc/dasd/devices); do + if ! dasd_settle "$dasdccw"; then echo $"Could not access DASD $dasdccw in time" return 1 fi @@ -71,36 +71,36 @@ function readcmsfile() { # $1=dasdport $2=filename local ret=0 if [ $# -ne 2 ]; then return; fi # precondition: udevd created dasda block device node - if ! dasd_cio_free -d $1; then + if ! dasd_cio_free -d "$1"; then echo $"DASD $1 could not be cleared from device blacklist" return 1 fi - modprobe dasd_mod dasd=$CMSDASD + modprobe dasd_mod dasd="$CMSDASD" modprobe dasd_eckd_mod udevadm settle # precondition: dasd_eckd_mod driver incl. dependencies loaded, # dasd_mod must be loaded without setting any DASD online - dev=$(canonicalize_devno $1) + dev=$(canonicalize_devno "$1") numcpus=$( - while read line || [ -n "$line" ]; do + while read -r line || [ -n "$line" ]; do if strstr "$line" "# processors"; then - echo ${line##*:} + echo "${line##*:}" break fi done < /proc/cpuinfo ) - if [ ${numcpus} -eq 1 ]; then - echo 1 > /sys/bus/ccw/devices/$dev/online + if [ "${numcpus}" -eq 1 ]; then + echo 1 > /sys/bus/ccw/devices/"$dev"/online else - if ! sysecho /sys/bus/ccw/devices/$dev/online 1; then + if ! sysecho /sys/bus/ccw/devices/"$dev"/online 1; then echo $"DASD $dev could not be set online" return 1 fi udevadm settle - if ! dasd_settle $dev; then + if ! dasd_settle "$dev"; then echo $"Could not access DASD $dev in time" return 1 fi @@ -109,15 +109,15 @@ function readcmsfile() { # $1=dasdport $2=filename udevadm settle devname=$( - cd /sys/bus/ccw/devices/$dev/block + cd /sys/bus/ccw/devices/"$dev"/block || exit set -- * - [ -b /dev/$1 ] && echo $1 + [ -b /dev/"$1" ] && echo "$1" ) devname=${devname:-dasda} [[ -d /mnt ]] || mkdir -p /mnt - if cmsfs-fuse --to=UTF-8 -a /dev/$devname /mnt; then - cat /mnt/$2 > /run/initramfs/$2 + if cmsfs-fuse --to=UTF-8 -a /dev/"$devname" /mnt; then + cat /mnt/"$2" > /run/initramfs/"$2" umount /mnt || umount -l /mnt udevadm settle else @@ -125,7 +125,7 @@ function readcmsfile() { # $1=dasdport $2=filename ret=1 fi - if ! sysecho /sys/bus/ccw/devices/$dev/online 0; then + if ! sysecho /sys/bus/ccw/devices/"$dev"/online 0; then echo $"DASD $dev could not be set offline again" #return 1 fi @@ -133,8 +133,8 @@ function readcmsfile() { # $1=dasdport $2=filename # unbind all dasds to unload the dasd modules for a clean start ( - cd /sys/bus/ccw/drivers/dasd-eckd - for i in *.*; do echo $i > unbind; done + cd /sys/bus/ccw/drivers/dasd-eckd || exit + for i in *.*; do echo "$i" > unbind; done ) udevadm settle modprobe -r dasd_eckd_mod @@ -148,11 +148,11 @@ function readcmsfile() { # $1=dasdport $2=filename processcmsfile() { source /tmp/cms.conf - SUBCHANNELS="$(echo $SUBCHANNELS | sed 'y/ABCDEF/abcdef/')" + SUBCHANNELS="$(echo "$SUBCHANNELS" | sed 'y/ABCDEF/abcdef/')" if [[ $NETTYPE ]]; then ( - echo -n $NETTYPE,$SUBCHANNELS + echo -n "$NETTYPE","$SUBCHANNELS" [[ $PORTNAME ]] && echo -n ",portname=$PORTNAME" [[ $LAYER2 ]] && echo -n ",layer2=$LAYER2" [[ $NETTYPE == "ctc" ]] && [[ $CTCPROT ]] && echo -n ",protocol=$CTCPROT" @@ -161,7 +161,7 @@ processcmsfile() { OLDIFS=$IFS IFS=, - read -a subch_array <<< "indexzero,$SUBCHANNELS" + read -r -a subch_array <<< "indexzero,$SUBCHANNELS" IFS=$OLDIFS devbusid=${subch_array[1]} if [ "$NETTYPE" = "ctc" ]; then @@ -170,9 +170,11 @@ processcmsfile() { driver=$NETTYPE fi + # shellcheck disable=SC2016 printf 'SUBSYSTEM=="net", ACTION=="add", DRIVERS=="%s", KERNELS=="%s", ENV{INTERFACE}=="?*", RUN+="/sbin/initqueue --onetime --unique --name cmsifup-$name /sbin/cmsifup $name"\n' "$driver" "$devbusid" > /etc/udev/rules.d/99-cms.rules # remove the default net rules rm -f -- /etc/udev/rules.d/91-default-net.rules + # shellcheck disable=SC2016 [[ -f /etc/udev/rules.d/90-net.rules ]] \ || printf 'SUBSYSTEM=="net", ACTION=="online", RUN+="/sbin/initqueue --onetime --env netif=$name source_hook initqueue/online"\n' >> /etc/udev/rules.d/99-cms.rules udevadm control --reload @@ -180,14 +182,14 @@ processcmsfile() { fi if [[ $DASD ]] && [[ $DASD != "none" ]]; then - echo $DASD | normalize_dasd_arg > /etc/dasd.conf + echo "$DASD" | normalize_dasd_arg > /etc/dasd.conf echo "options dasd_mod dasd=$DASD" > /etc/modprobe.d/dasd_mod.conf dasd_cio_free fi unset _do_zfcp for i in ${!FCP_*}; do - echo "${!i}" | while read port rest || [ -n "$port" ]; do + echo "${!i}" | while read -r port rest || [ -n "$port" ]; do case $port in *.*.*) ;; @@ -198,7 +200,7 @@ processcmsfile() { port="0.0.$port" ;; esac - echo $port $rest >> /etc/zfcp.conf + echo "$port" "$rest" >> /etc/zfcp.conf done _do_zfcp=1 done @@ -211,9 +213,9 @@ processcmsfile() { # Parse configuration if [ -n "$CMSDASD" -a -n "$CMSCONFFILE" ]; then - if readcmsfile $CMSDASD $CMSCONFFILE; then - ln -s /run/initramfs/$CMSCONFFILE /tmp/$CMSCONFFILE - ln -s /run/initramfs/$CMSCONFFILE /tmp/cms.conf + if readcmsfile "$CMSDASD" "$CMSCONFFILE"; then + ln -s /run/initramfs/"$CMSCONFFILE" /tmp/"$CMSCONFFILE" + ln -s /run/initramfs/"$CMSCONFFILE" /tmp/cms.conf processcmsfile fi fi diff --git a/modules.d/80cms/module-setup.sh b/modules.d/80cms/module-setup.sh index 780d0c49a..539085622 100755 --- a/modules.d/80cms/module-setup.sh +++ b/modules.d/80cms/module-setup.sh @@ -25,6 +25,7 @@ install() { inst_hook pre-trigger 30 "$moddir/cmssetup.sh" inst_hook pre-pivot 95 "$moddir/cms-write-ifcfg.sh" inst_script "$moddir/cmsifup.sh" /sbin/cmsifup + # shellcheck disable=SC2046 inst_multiple /etc/cmsfs-fuse/filetypes.conf /etc/udev/rules.d/99-fuse.rules /etc/fuse.conf \ cmsfs-fuse fusermount ulockmgr_server bash insmod rmmod cat normalize_dasd_arg sed \ $(rpm -ql s390utils-base) awk getopt