]> git.ipfire.org Git - thirdparty/dracut.git/commitdiff
fix(dracut-functions.sh): ip route parsing
authorMartin Wilck <mwilck@suse.com>
Fri, 21 Jan 2022 20:25:54 +0000 (21:25 +0100)
committerJóhann B. Guðmundsson <johannbg@gmail.com>
Fri, 4 Feb 2022 18:35:33 +0000 (18:35 +0000)
The code for determining local interface and address works
only for peers that are reachable in a single hop.

This is parsed correctly:
192.168.110.1 dev br0 src 192.168.110.160 uid 0 \    cache

But this isn't:
192.168.1.4 via 192.168.110.1 dev br0 src 192.168.110.160 uid 0 \    cache

Fix it.

Fixes: ceca74cc ("dracut-functions: add ip_params_for_remote_addr() helper")
dracut-functions.sh

index 63b6c892d433475772679966e987c86455449f4a..8503c22f6a3f63ebbe2f3821e59b66af306ebda6 100755 (executable)
@@ -783,13 +783,29 @@ btrfs_devs() {
 iface_for_remote_addr() {
     # shellcheck disable=SC2046
     set -- $(ip -o route get to "$1")
-    echo "$3"
+    while [ $# -gt 0 ]; do
+        case $1 in
+            dev)
+                echo "$2"
+                return
+                ;;
+        esac
+        shift
+    done
 }
 
 local_addr_for_remote_addr() {
     # shellcheck disable=SC2046
     set -- $(ip -o route get to "$1")
-    echo "$5"
+    while [ $# -gt 0 ]; do
+        case $1 in
+            src)
+                echo "$2"
+                return
+                ;;
+        esac
+        shift
+    done
 }
 
 peer_for_addr() {