]> git.ipfire.org Git - thirdparty/dracut.git/commitdiff
dracut-functions.sh: avoid tokenizing ldconfig output with 'read'
authorLubomir Rintel <lkundrak@v3.sk>
Tue, 23 Dec 2014 21:03:10 +0000 (22:03 +0100)
committerHarald Hoyer <harald@redhat.com>
Fri, 25 Sep 2015 16:48:55 +0000 (12:48 -0400)
The space does not separate the elements reliably, spaces can be
embedded in parenthesized expressions too:

  libgmpxx.so.4 (libc6, hwcap: 0x0000000004000000) => /lib/sse2/libgmpxx.so.4
  libgmp.so.10 (libc6, hwcap: 0x0000000004000000) => /lib/sse2/libgmp.so.10

This results in dracut creating '0x0000000004000000' and '=>'
directories in the initramfs image.

(cherry picked from commit c59779cf9337bc0fc48c7a4d8437f7253f6822c3)

dracut-functions.sh

index 585b68365f54635425f5cfb5b16ecf0a2abfc56d..9218779ca86fbd5924dfb4a0fe35720c759439c8 100755 (executable)
@@ -97,17 +97,7 @@ fi
 
 ldconfig_paths()
 {
-    local a i
-    declare -A a
-    for i in $(
-        ldconfig -pN 2>/dev/null | grep -F '=>' | grep -E -v '/(lib|lib64|usr/lib|usr/lib64)/[^/]*$' | while read a b c d; do
-            d=${d%/*}
-            printf "%s\n" "$d";
-        done
-    ); do
-        a["$i"]=1;
-    done;
-    printf "%s\n" ${!a[@]}
+    ldconfig -pN 2>/dev/null | grep -E -v '/(lib|lib64|usr/lib|usr/lib64)/[^/]*$' | sed -n 's,.* => \(.*\)/.*,\1,p' | sort | uniq
 }
 
 # Detect lib paths