Skip to content

Commit 1c379df

Browse files
authored
Merge pull request #1573 from blomber666/busybox-improvements
More support for busybox devices
2 parents 3c9b379 + 9270ab0 commit 1c379df

File tree

4 files changed

+35
-25
lines changed

4 files changed

+35
-25
lines changed

extras/build-lynis.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@
238238

239239
echo "[*] Starting with DEB building process"
240240

241-
DEBCHANGELOGFULLVERSION=$(head -1 ../debian/changelog | awk '{ print $2 }' | sed 's/(//' | sed 's/)//')
241+
DEBCHANGELOGFULLVERSION=$(head -n 1 ../debian/changelog | awk '{ print $2 }' | sed 's/(//' | sed 's/)//')
242242
DEBCHANGELOGVERSION=$(echo ${DEBCHANGELOGFULLVERSION} | awk -F- '{ print $1 }')
243243
DEBCHANGELOGVERSIONREV=$(echo ${DEBCHANGELOGFULLVERSION} | awk -F- '{ print $2 }')
244244
if [ "${LYNIS_VERSION}" = "${DEBCHANGELOGVERSION}" ]; then
@@ -251,7 +251,7 @@
251251
# BZRSTATUS=$(${BZRBINARY} status . 2>&1 > /dev/null; echo $?)
252252
# if [ "${BZRSTATUS}" = "0" ]; then
253253
# echo "[V] bzr has proper directory tree"
254-
# DEBCHANGELOGFULLVERSION=$(head -1 debian/changelog | awk '{ print $2 }' | sed 's/(//' | sed 's/)//')
254+
# DEBCHANGELOGFULLVERSION=$(head -n 1 debian/changelog | awk '{ print $2 }' | sed 's/(//' | sed 's/)//')
255255
# DEBCHANGELOGVERSION=$(echo ${DEBCHANGELOGFULLVERSION} | awk -F- '{ print $1 }')
256256
# DEBCHANGELOGVERSIONREV=$(echo ${DEBCHANGELOGFULLVERSION} | awk -F- '{ print $2 }')
257257
# echo "[=] Version in Debian changelog: ${DEBCHANGELOGVERSION} (revision: ${DEBCHANGELOGVERSIONREV})"

include/functions

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -968,7 +968,7 @@
968968
;;
969969

970970
"DragonFly" | "FreeBSD")
971-
FIND=$(${IFCONFIGBINARY} | grep ether | head -1 | awk '{ print $2 }' | tr '[:upper:]' '[:lower:]')
971+
FIND=$(${IFCONFIGBINARY} | grep ether | head -n 1 | awk '{ print $2 }' | tr '[:upper:]' '[:lower:]')
972972
if HasData "${FIND}"; then
973973
HOSTID=$(echo ${FIND} | sha1)
974974
else
@@ -996,7 +996,7 @@
996996
for INTERFACE in ${NET_INTERFACES}; do
997997
if grep -q -s 'up' "/sys/class/net/${INTERFACE}/operstate"; then
998998
LogText "Interface '${INTERFACE}' is up, fetching MAC address"
999-
FIND=$(head -1 "/sys/class/net/${INTERFACE}/address" | tr '[:upper:]' '[:lower:]')
999+
FIND=$(head -n 1 "/sys/class/net/${INTERFACE}/address" | tr '[:upper:]' '[:lower:]')
10001000
if HasData "${FIND}"; then
10011001
HOSTID_GEN="linux-sys-interface-up"
10021002
break
@@ -1010,7 +1010,7 @@
10101010
LogText "Info: trying output from 'ip' to generate HostID"
10111011
# Determine if we have the common available eth0 interface. If so, give that priority.
10121012
# Note: apply sorting in case there would be multiple MAC addresses linked to increase predictable end result
1013-
FIND=$(${IPBINARY} addr show eth0 2> /dev/null | grep -E "link/ether " | awk '{ print $2 }' | tr '[:upper:]' '[:lower:]' | sort | head -1)
1013+
FIND=$(${IPBINARY} addr show eth0 2> /dev/null | grep -E "link/ether " | awk '{ print $2 }' | tr '[:upper:]' '[:lower:]' | sort | head -n 1)
10141014
if HasData "${FIND}"; then
10151015
HOSTID_GEN="linux-ip-interface-eth0"
10161016
else
@@ -1020,7 +1020,7 @@
10201020
# 3) Convert everything to lowercase
10211021
# 4) Sort the entries, so that the output is more predictable between runs when the same interfaces are available
10221022
# 5) Select first entry
1023-
FIND=$(${IPBINARY} -family link addr show up 2> /dev/null | awk '{if($1=="link/ether" && $2 !~ "^02:42:"){print $2}}' | tr '[:upper:]' '[:lower:]' | sort | head -1)
1023+
FIND=$(${IPBINARY} -family link addr show up 2> /dev/null | awk '{if($1=="link/ether" && $2 !~ "^02:42:"){print $2}}' | tr '[:upper:]' '[:lower:]' | sort | head -n 1)
10241024
if HasData "${FIND}"; then
10251025
HOSTID_GEN="linux-ip-interface-up-other"
10261026
else
@@ -1049,7 +1049,7 @@
10491049
HOSTID_GEN="linux-ifconfig-interface-eth0-ether"
10501050
fi
10511051
else
1052-
FIND=$(${IFCONFIGBINARY} 2> /dev/null | grep "ether " | awk '{ print $2 }' | head -1 | tr '[:upper:]' '[:lower:]')
1052+
FIND=$(${IFCONFIGBINARY} 2> /dev/null | grep "ether " | awk '{ print $2 }' | head -n 1 | tr '[:upper:]' '[:lower:]')
10531053
if IsEmpty "${FIND}"; then
10541054
ReportException "GetHostID" "No eth0 found (and no ether was found with ifconfig)"
10551055
else
@@ -1058,7 +1058,7 @@
10581058
fi
10591059
fi
10601060
else
1061-
FIND=$(${IFCONFIGBINARY} 2> /dev/null | grep HWaddr | head -1 | awk '{ print $5 }' | tr '[:upper:]' '[:lower:]')
1061+
FIND=$(${IFCONFIGBINARY} 2> /dev/null | grep HWaddr | head -n 1 | awk '{ print $5 }' | tr '[:upper:]' '[:lower:]')
10621062
HOSTID_GEN="linux-ifconfig-interface-first-hwaddr"
10631063
fi
10641064
else
@@ -1077,7 +1077,7 @@
10771077
;;
10781078

10791079
"macOS")
1080-
FIND=$(${IFCONFIGBINARY} en0 | grep ether | head -1 | awk '{ print $2 }' | tr '[:upper:]' '[:lower:]')
1080+
FIND=$(${IFCONFIGBINARY} en0 | grep ether | head -n 1 | awk '{ print $2 }' | tr '[:upper:]' '[:lower:]')
10811081
if [ ! "${FIND}" = "" ]; then
10821082
HOSTID=$(echo ${FIND} | shasum | awk '{ print $1 }')
10831083
else
@@ -1099,7 +1099,7 @@
10991099
;;
11001100

11011101
"NetBSD")
1102-
FIND=$(${IFCONFIGBINARY} -a | grep "address:" | head -1 | awk '{ print $2 }' | tr '[:upper:]' '[:lower:]')
1102+
FIND=$(${IFCONFIGBINARY} -a | grep "address:" | head -n 1 | awk '{ print $2 }' | tr '[:upper:]' '[:lower:]')
11031103
if HasData "${FIND}"; then
11041104
HOSTID=$(echo ${FIND} | sha1)
11051105
else
@@ -1108,7 +1108,7 @@
11081108
;;
11091109

11101110
"OpenBSD")
1111-
FIND=$(${IFCONFIGBINARY} | grep "lladdr " | head -1 | awk '{ print $2 }' | tr '[:upper:]' '[:lower:]')
1111+
FIND=$(${IFCONFIGBINARY} | grep "lladdr " | head -n 1 | awk '{ print $2 }' | tr '[:upper:]' '[:lower:]')
11121112
if HasData "${FIND}"; then
11131113
HOSTID=$(echo ${FIND} | sha1)
11141114
else
@@ -1164,7 +1164,7 @@
11641164
# Optional: DBUS creates ID as well with dbus-uuidgen and is stored in /var/lib/dbus-machine-id (might be symlinked to /etc/machine-id)
11651165
sMACHINEIDFILE="/etc/machine-id"
11661166
if [ -f ${sMACHINEIDFILE} ]; then
1167-
FIND=$(head -1 ${sMACHINEIDFILE} | grep "^[a-f0-9]")
1167+
FIND=$(head -n 1 ${sMACHINEIDFILE} | grep "^[a-f0-9]")
11681168
if [ "${FIND}" = "" ]; then
11691169
MACHINEID="${FIND}"
11701170
fi
@@ -1336,6 +1336,8 @@
13361336
# busybox does not support format
13371337
if [ ${SHELL_IS_BUSYBOX} -eq 0 ]; then
13381338
DATA=$(${STATBINARY} --format=%a ${CHECKFILE})
1339+
else
1340+
DATA=$(${STATBINARY} -c %a ${CHECKFILE})
13391341
fi
13401342
;;
13411343
esac
@@ -1349,12 +1351,16 @@
13491351
;;
13501352
*)
13511353
# Only use find when OS is NOT AIX and binaries are NOT busybox
1354+
if [ -d "${CHECKFILE}" ]; then
1355+
MAXDEPTH="-maxdepth 0"
1356+
else
1357+
MAXDEPTH=""
1358+
fi
1359+
13521360
if [ ${SHELL_IS_BUSYBOX} -eq 0 ]; then
1353-
if [ -d ${CHECKFILE} ]; then
1354-
DATA=$(${FINDBINARY} ${CHECKFILE} -maxdepth 0 -printf "%m")
1355-
else
1356-
DATA=$(${FINDBINARY} ${CHECKFILE} -printf "%m")
1357-
fi
1361+
DATA=$(${FINDBINARY} "${CHECKFILE}" ${MAXDEPTH} -printf "%m")
1362+
else
1363+
DATA=$(${FINDBINARY} "${CHECKFILE}" ${MAXDEPTH} -exec stat -c %a {} \;)
13581364
fi
13591365
;;
13601366
esac
@@ -1872,7 +1878,7 @@
18721878
# FreeBSD: hw.hv_vendor (remains empty for VirtualBox)
18731879
# NetBSD: machdep.dmi.system-product
18741880
# OpenBSD: hw.product
1875-
FIND=$(sysctl -a 2> /dev/null | grep -E "(hw.product|machdep.dmi.system-product)" | head -1 | sed 's/ = /=/' | awk -F= '{ print $2 }')
1881+
FIND=$(sysctl -a 2> /dev/null | grep -E "(hw.product|machdep.dmi.system-product)" | head -n 1 | sed 's/ = /=/' | awk -F= '{ print $2 }')
18761882
if [ ! "${FIND}" = "" ]; then
18771883
SHORT="${FIND}"
18781884
fi
@@ -3049,7 +3055,8 @@
30493055
# By default remove only control characters
30503056
if [ $# -eq 1 ]; then
30513057
input="$1"
3052-
cleaned=$(echo ${input} | tr -d '[:cntrl:]')
3058+
# cleaned=$(echo ${input} | tr -d '[:cntrl:]')
3059+
cleaned=$(echo "$input" | sed 's/[^a-zA-Z0-9_-]//g')
30533060
# If know what to test against, then see if input matches the specified class
30543061
elif [ $# -eq 2 ]; then
30553062
input="$1"

include/osdetection

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -836,7 +836,7 @@
836836
if tail -1 < /etc/release | xargs | grep "^Solaris " > /dev/null; then
837837
OS_FULLNAME=$(tail -1 < /etc/release | xargs)
838838
else
839-
OS_FULLNAME=$(head -1 < /etc/release | xargs)
839+
OS_FULLNAME=$(head -n 1 < /etc/release | xargs)
840840
fi
841841
OS_VERSION=$(echo "$OS_FULLNAME" | cut -d ' ' -f 2,3)
842842
else # Old behaviour
@@ -929,6 +929,9 @@
929929
ShowSymlinkPath /bin/ps
930930
if [ "${SYMLINK}" = "/bin/busybox" ]; then
931931
SHELL_IS_BUSYBOX=1
932+
LogText "Result: The device is using Busybox."
933+
else
934+
LogText "Result: The device is NOT using Busybox."
932935
fi
933936
fi
934937
fi

plugins/plugin_systemd_phase1

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,13 @@
4747
if [ -n "${SYSTEMCTLBINARY}" -a ${SYSTEMD_RUNNING} -eq 1 ]; then PREQS_MET="YES"; else PREQS_MET="NO"; fi
4848
Register --test-no PLGN-3802 --preqs-met ${PREQS_MET} --weight L --network NO --description "Query systemd version and options" --progress
4949
if [ ${SKIPTEST} -eq 0 ]; then
50-
FIND=$(${SYSTEMCTLBINARY} --version 2> /dev/null | ${AWKBINARY} '{ if ($1=="systemd") { print $2 } }' | grep "^[1-9][0-9][0-9]$" | head -1)
50+
FIND=$(${SYSTEMCTLBINARY} --version 2> /dev/null | ${AWKBINARY} '{ if ($1=="systemd") { print $2 } }' | grep "^[1-9][0-9][0-9]$" | head -n 1)
5151
if [ -n "${FIND}" ]; then
5252
SYSTEMD_VERSION=${FIND}
5353
Report "systemd_version=${FIND}"
5454
LogText "Result: found systemd version ${FIND}"
5555
fi
56-
FIND=$(${SYSTEMCTLBINARY} --version 2> /dev/null | grep "^[-+]" | sed 's/[[:space:]]/,/g' | head -1)
56+
FIND=$(${SYSTEMCTLBINARY} --version 2> /dev/null | grep "^[-+]" | sed 's/[[:space:]]/,/g' | head -n 1)
5757
if [ -n "${FIND}" ]; then
5858
Report "systemd_builtin_components=${FIND}"
5959
LogText "Result: found builtin components list"
@@ -101,7 +101,7 @@
101101
if [ -f ${ROOTDIR}etc/machine-id -a ${SYSTEMD_RUNNING} -eq 1 ]; then PREQS_MET="YES"; else PREQS_MET="NO"; fi
102102
Register --test-no PLGN-3808 --preqs-met ${PREQS_MET} --weight L --network NO --description "Gather systemd machine ID" --progress
103103
if [ ${SKIPTEST} -eq 0 ]; then
104-
FIND=$(cat ${ROOTDIR}etc/machine-id | head -1)
104+
FIND=$(cat ${ROOTDIR}etc/machine-id | head -n 1)
105105
if [ -n "${FIND}" ]; then
106106
SYSTEMD_MACHINEID="${FIND}"
107107
LogText "Result: found machine ID: ${SYSTEMD_MACHINEID}"
@@ -134,7 +134,7 @@
134134
FIND=$(${JOURNALCTLBINARY} --list-boots | wc -l)
135135
LogText "Output: number of boots listed in journal is ${FIND}"
136136
if [ -n "${FIND}" ]; then Report "journal_bootlogs=${FIND}"; fi
137-
FIND=$(${JOURNALCTLBINARY} --list-boots | head -1 | awk '{ print $4 }')
137+
FIND=$(${JOURNALCTLBINARY} --list-boots | head -n 1 | awk '{ print $4 }')
138138
LogText "Output: oldest boot date in journal is ${FIND}"
139139
if [ -n "${FIND}" ]; then Report "journal_oldest_bootdate=${FIND}"; fi
140140
fi
@@ -204,7 +204,7 @@
204204
if [ -n "${SYSTEMCTLBINARY}" -a ${SYSTEMD_RUNNING} -eq 1 -a ${SYSTEMD_VERSION} -ge 215 ]; then PREQS_MET="YES"; else PREQS_MET="NO"; fi
205205
Register --test-no PLGN-3830 --preqs-met ${PREQS_MET} --weight L --network NO --description "Query systemd status" --progress
206206
if [ ${SKIPTEST} -eq 0 ]; then
207-
FIND=$(${SYSTEMCTLBINARY} is-system-running 2> /dev/null | head -1)
207+
FIND=$(${SYSTEMCTLBINARY} is-system-running 2> /dev/null | head -n 1)
208208
if [ -n "${FIND}" ]; then
209209
Report "systemd_status=${FIND}"
210210
LogText "Result: found systemd status = ${FIND}"

0 commit comments

Comments
 (0)