mirror of
https://github.com/dracutdevs/dracut.git
synced 2024-10-27 09:25:21 +03:00
2c19a5fa78
By convention, strstr should be a literal string match. Previously, it would match as a glob pattern. Some code used that, so add new functions strglob and strglobin to do what that code expects, and specify them tightly too. strglob tests whether the glob pattern matches the entire string (the name strglob is also used in the yorick language, and that's what it does there), while strglobin tests whether the glob pattern matches anywhere in the string. Also tightens str_starts, str_ends, and str_replace to deal with literal strings only. In a quick grep I did not find code that depended on these functions matching globs. Changes the call sites where strstr was used with glob patterns to use strglobin or strglob as the intention seemed to be (or, in one case, strstr with the * removed as it did not affect the result anyway).
106 lines
3.1 KiB
Bash
Executable File
106 lines
3.1 KiB
Bash
Executable File
#!/bin/bash
|
|
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
|
|
# ex: ts=8 sw=4 sts=4 et filetype=sh
|
|
|
|
type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh
|
|
|
|
mkdir -m 0755 -p /run/initramfs/state/etc/sysconfig/network-scripts
|
|
|
|
function cms_write_config()
|
|
{
|
|
. /tmp/cms.conf
|
|
OLDIFS=$IFS
|
|
IFS=,
|
|
read -a subch_array <<< "indexzero,$SUBCHANNELS"
|
|
IFS=$OLDIFS
|
|
devbusid=${subch_array[1]}
|
|
if [ "$NETTYPE" = "ctc" ]; then
|
|
driver="ctcm"
|
|
else
|
|
driver=$NETTYPE
|
|
fi
|
|
|
|
DEVICE=$(cd /sys/devices/${driver}/$devbusid/net/ && set -- * && [ "$1" != "*" ] && echo $1)
|
|
|
|
uuid=$(cat /proc/sys/kernel/random/uuid)
|
|
|
|
IFCFGFILE=/run/initramfs/state/etc/sysconfig/network-scripts/ifcfg-$DEVICE
|
|
|
|
strglobin "$IPADDR" '*:*:*' && ipv6=1
|
|
|
|
# to please NetworkManager on startup in loader before loader reconfigures net
|
|
cat > /etc/sysconfig/network << EOF
|
|
HOSTNAME=$HOSTNAME
|
|
EOF
|
|
echo "$HOSTNAME" > /etc/hostname
|
|
if [ "$ipv6" ]; then
|
|
echo "NETWORKING_IPV6=yes" >> /etc/sysconfig/network
|
|
else
|
|
echo "NETWORKING=yes" >> /etc/sysconfig/network
|
|
fi
|
|
|
|
cat > $IFCFGFILE << EOF
|
|
DEVICE=$DEVICE
|
|
UUID=$uuid
|
|
ONBOOT=yes
|
|
BOOTPROTO=static
|
|
MTU=$MTU
|
|
SUBCHANNELS=$SUBCHANNELS
|
|
EOF
|
|
if [ "$ipv6" ]; then
|
|
cat >> $IFCFGFILE << EOF
|
|
IPV6INIT=yes
|
|
IPV6_AUTOCONF=no
|
|
IPV6ADDR=$IPADDR/$NETMASK
|
|
IPV6_DEFAULTGW=$GATEWAY
|
|
EOF
|
|
else
|
|
cat >> $IFCFGFILE << EOF
|
|
IPADDR=$IPADDR
|
|
NETMASK=$NETMASK
|
|
BROADCAST=$BROADCAST
|
|
GATEWAY=$GATEWAY
|
|
EOF
|
|
fi
|
|
if [ "$ipv6" ]; then
|
|
DNS1=$(set -- ${DNS/,/ }; echo $1)
|
|
DNS2=$(set -- ${DNS/,/ }; echo $2)
|
|
else
|
|
DNS1=$(set -- ${DNS/:/ }; echo $1)
|
|
DNS2=$(set -- ${DNS/:/ }; echo $2)
|
|
fi
|
|
# real DNS config for NetworkManager to generate /etc/resolv.conf
|
|
[ "$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
|
|
else
|
|
[ "$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
|
|
optstr=""
|
|
for option in LAYER2 PORTNO; do
|
|
[ -z "${!option}" ] && continue
|
|
[ -n "$optstr" ] && optstr=${optstr}" "
|
|
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
|
|
unset option
|
|
unset optstr
|
|
unset DNS1
|
|
unset DNS2
|
|
echo "files /etc/sysconfig/network-scripts" >> /run/initramfs/rwtab
|
|
echo "files /var/lib/dhclient" >> /run/initramfs/rwtab
|
|
}
|
|
|
|
[ -f /tmp/cms.conf ] && cms_write_config
|