[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH v2] tools/hotplug: Fix dhcpd symlink removal in vif-nat


  • To: xen-devel@xxxxxxxxxxxxxxxxxxxx
  • From: Diego Sueiro <diego.sueiro@xxxxxxx>
  • Date: Wed, 9 Sep 2020 13:35:56 +0100
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=iQhQSBd+zyOcko0gnIGa8KrVyolNQndWmjqfwG4y5Hs=; b=LU6AixTDktRu6/Fakpk8CT3KTubKtuu60yu0ZgfCQc+qDL2kg4VSJd/VwAMe7/EdSc02HcyffWw7WVy66E3800ipYCRJluQcsmFV62r7CtXFpqI2NdtCtOwvD3+RbaBF4dlKGNkqP36TQ/lhwJoknNB6eJOb4LKU05fJ6Y2AtImZ+k0rLR1sa0qVqTwJm0KuDEzwlBNMG4QELwWeAOBIQ2W8dMtaFYGmWIw7qVRAbconClerUbHEWPjgyLHp5ixyEEKi31scjsKs/QzxKOVCMLpodj5IPlI8URnM+7y+5Js4p1BwYzgdTCBCFlvX9x7mwGf9tQGwx+Rt7QW3PZRiwg==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=K3l+Na3pX/RtjSi1nTr2OY9fJEvYCkjf7ZiO4Nj8+xGlpcAF4rOAWkTKFqa+6YQSrVI6zPMEy/dWtahR/lxTF8MYXxbNk5ouqZjwqb6Q7o2DWkva551SjOJakeKcu8uzq6wWLM6HflgO88jl6yyG+lRXS//WNuW0ODr0+9i/j9cko6cEZy7MYDPZHF0ZRr0GVFxAf5i03UNj+SJBXwQixvwEg89JvsJJ65CUk0hwEInVihxC0Om/lfcdj4uaABRN0bdf8PDe0M0Jf1jBGS8D0/48VCLq4vDoTdByCxjRZqYEMxV4j5ZmufQ46jiGq3L4ksKNY7tLoiAcDBbiOyOiiw==
  • Authentication-results-original: lists.xenproject.org; dkim=none (message not signed) header.d=none; lists.xenproject.org; dmarc=none action=none header.from=arm.com;
  • Cc: nd@xxxxxxx, Diego Sueiro <diego.sueiro@xxxxxxx>, Ian Jackson <ian.jackson@xxxxxxxxxxxxx>, Wei Liu <wl@xxxxxxx>
  • Delivery-date: Wed, 09 Sep 2020 12:36:59 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Nodisclaimer: true
  • Original-authentication-results: lists.xenproject.org; dkim=none (message not signed) header.d=none;lists.xenproject.org; dmarc=none action=none header.from=arm.com;

Copy temp files used to add/remove dhcpd configurations to avoid
replacing potential symlinks.

If dhcp.conf is a symlink pointing to dhcp.conf.real, using 'mv'
creates a new file dhcp.conf where cp will actually modify
dhcp.conf.real instead of replacing the symlink with a real
file.

Using 'cp' prevents some mistakes where the user will actually
continue to modify dhcp.conf.real where it would not be the one
used anymore.

Signed-off-by: Diego Sueiro <diego.sueiro@xxxxxxx>
---
Changes in v2:
  - Update commit message
  - Simplify the code when removing the temp file.
---
 tools/hotplug/Linux/vif-nat | 20 +++++++++-----------
 1 file changed, 9 insertions(+), 11 deletions(-)

diff --git a/tools/hotplug/Linux/vif-nat b/tools/hotplug/Linux/vif-nat
index 2614435..fd34afb 100644
--- a/tools/hotplug/Linux/vif-nat
+++ b/tools/hotplug/Linux/vif-nat
@@ -95,12 +95,11 @@ dhcparg_remove_entry()
 {
   local tmpfile=$(mktemp)
   sed -e "s/${dev} //" "$dhcpd_arg_file" >"$tmpfile"
-  if diff "$tmpfile" "$dhcpd_arg_file" >/dev/null
+  if ! diff "$tmpfile" "$dhcpd_arg_file" >/dev/null
   then
-    rm "$tmpfile"
-  else
-    mv "$tmpfile" "$dhcpd_arg_file"
+    cp "$tmpfile" "$dhcpd_arg_file"
   fi
+  rm "$tmpfile"
 }
 
 dhcparg_add_entry()
@@ -109,11 +108,11 @@ dhcparg_add_entry()
   local tmpfile=$(mktemp)
   # handle Red Hat, SUSE, and Debian styles, with or without quotes
   sed -e 's/^DHCPDARGS="*\([^"]*\)"*/DHCPDARGS="\1'"${dev} "'"/' \
-     "$dhcpd_arg_file" >"$tmpfile" && mv "$tmpfile" "$dhcpd_arg_file"
+     "$dhcpd_arg_file" >"$tmpfile" && cp "$tmpfile" "$dhcpd_arg_file"
   sed -e 's/^DHCPD_INTERFACE="*\([^"]*\)"*/DHCPD_INTERFACE="\1'"${dev} "'"/' \
-     "$dhcpd_arg_file" >"$tmpfile" && mv "$tmpfile" "$dhcpd_arg_file"
+     "$dhcpd_arg_file" >"$tmpfile" && cp "$tmpfile" "$dhcpd_arg_file"
   sed -e 's/^INTERFACES="*\([^"]*\)"*/INTERFACES="\1'"${dev} "'"/' \
-     "$dhcpd_arg_file" >"$tmpfile" && mv "$tmpfile" "$dhcpd_arg_file"
+     "$dhcpd_arg_file" >"$tmpfile" && cp "$tmpfile" "$dhcpd_arg_file"
   rm -f "$tmpfile"
 }
 
@@ -121,12 +120,11 @@ dhcp_remove_entry()
 {
   local tmpfile=$(mktemp)
   grep -v "host $hostname" "$dhcpd_conf_file" >"$tmpfile"
-  if diff "$tmpfile" "$dhcpd_conf_file" >/dev/null
+  if ! diff "$tmpfile" "$dhcpd_conf_file" >/dev/null
   then
-    rm "$tmpfile"
-  else
-    mv "$tmpfile" "$dhcpd_conf_file"
+    cp "$tmpfile" "$dhcpd_conf_file"
   fi
+  rm "$tmpfile"
   dhcparg_remove_entry
 }
 
-- 
2.7.4




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.