Note: This is a beta release of Red Hat Bugzilla 5.0. The data contained within is a snapshot of the live data so any changes you make will not be reflected in the production Bugzilla. Also email is disabled so feel free to test any aspect of the site that you want. File any problems you find or give feedback here.

Bug 85841

Summary: ifup-post removes 'search' domains from /etc/resolv.conf
Product: [Fedora] Fedora Reporter: Enrique Perez-Terron <enrio>
Component: initscriptsAssignee: Bill Nottingham <notting>
Status: CLOSED CURRENTRELEASE QA Contact: Brock Organ <borgan>
Severity: medium Docs Contact:
Priority: medium    
Version: rawhideCC: enrio, rvokal
Target Milestone: ---   
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2005-04-28 19:03:41 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:

Description Enrique Perez-Terron 2003-03-09 03:37:17 UTC
Description of problem:
ifup-post does not keep "search" values if DOMAIN is set

Version-Release number of selected component (if applicable):
7.10-1

How reproducible:
Follow the steps below

Steps to Reproduce:
1.Add the following lines to /etc/resolv.conf (save a copy first, to restore)
search tomato.place
search juicy.fruit
2. Add the following lines to /etc/sysconfig/netowrk-scripts/ifcfg-eth0
DOMAIN=mydomain.lan
DNS1=1.1.1.1
DNS2=2.2.2.2
3. Execute the following commands as root
cd /etc/sysconfig/network-scripts
./ifdown eth0
./ifup eth0
cat /etc/resolv.conf
    
Actual results:
...
search mydomain.lan

Expected results:
...
search mydomain.lan tomato.place juicy.fruit

Additional info:
The reason is the construct echo blah | while read var; do GETLOST=$var; done
where the variable GETLOST is set only in the subshell at the end of the pipe.
In the parent process, the variable is not changed. Notice that there are
two nested levels of this construct.

Comment 1 Enrique Perez-Terron 2003-03-09 03:48:07 UTC
I suggest the following patch. The inner level of "echo | while read" is
removed. The outer is kept, but the use of the variable is moved inside 
the subshell by adding a pair of parentheses, i.e.

   echo | (while read...done; echo $VARIALBE >> file)

--- /etc/sysconfig/network-scripts/ifup-post    2003-03-09 04:09:09.000000000 +0100
+++ /usr/src/redhat/BUILD/initscripts-7.10/sysconfig/network-scripts/ifup-post 
2003-02-20 18:14:53.000000000 +0100
@@ -34,7 +34,7 @@
     current_replacement="$DNS1"
     next_replacement="$DNS2"
     search=
-    (cat /etc/resolv.conf ; echo EOF ; echo EOF) | (while read answer ; do
+    (cat /etc/resolv.conf ; echo EOF ; echo EOF) | while read answer ; do
        case $answer in
            nameserver*|EOF)
                if [ -n "$current_replacement" ] ; then
@@ -53,7 +53,9 @@
                ;;
            domain*|search*)
                if [ -n "$DOMAIN" ]; then
-                   search=`set $answer; shift; echo "$search $*"`
+                   echo "$answer" | while read key value ; do
+                       search="$search $value"
+                   done
                else
                    echo "$answer" >> $tr
                fi
@@ -65,7 +67,7 @@
     done
     if [ -n "$DOMAIN" ]; then
         echo "search $DOMAIN $search" >> $tr
-    fi)
+    fi

     # backup resolv.conf
     cp -af /etc/resolv.conf /etc/resolv.conf.save


Comment 2 Bill Nottingham 2005-04-28 19:03:41 UTC
This is fixed in current initscripts.