]> git.ipfire.org Git - thirdparty/dracut.git/commitdiff
fix(cms): shellcheck for modules.d/80cms
authorHarald Hoyer <harald@redhat.com>
Fri, 26 Mar 2021 09:29:17 +0000 (10:29 +0100)
committerHarald Hoyer <harald@hoyer.xyz>
Mon, 29 Mar 2021 08:43:55 +0000 (10:43 +0200)
modules.d/80cms/.shchkdir [new file with mode: 0644]
modules.d/80cms/cms-write-ifcfg.sh
modules.d/80cms/cmsifup.sh
modules.d/80cms/cmssetup.sh
modules.d/80cms/module-setup.sh

diff --git a/modules.d/80cms/.shchkdir b/modules.d/80cms/.shchkdir
new file mode 100644 (file)
index 0000000..e69de29
index 1f8496b9afff5a9d034e6e7ed2c4a3315cd58f23..f73296f6d680616224e7f6bbc254e83c03500c60 100755 (executable)
@@ -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
index a8e686001235210deb621063824da8d97ac349fa..a319227a6b369241fb26f81541671abd538a04dc 100755 (executable)
@@ -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
 
index 3b3cdb4ed16e57d8d5e6f8a83ecde142c3b6c45f..68e45632fe0492dc4f52957a24adfd4388215400 100755 (executable)
@@ -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
index 780d0c49a0bbbc220f0547dabe2f2b01fc13e902..539085622223250410d40117bd6db34df174d8b8 100755 (executable)
@@ -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