Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > e62f51b3c9c4797a380d8e815dd2df0a > files > 8

dhcpv6-0.10-33.el5.src.rpm

--- dhcp-0.10/resolv_token.l.change_resolv_conf	2003-06-23 13:24:48.000000000 -0400
+++ dhcp-0.10/resolv_token.l	2004-09-13 16:30:43.343294000 -0400
@@ -139,7 +139,43 @@
 .	{fprintf(dhcp6_resolv_file, yytext);}
 
 %%
+int change_resolv_conf
+(   char *new_rscf
+)
+{
+    char *argv[] = { "/bin/bash", "-c", 0L, 0L };
+    char *cmd;
+    int l, pid, status;
+    extern char **environ;
+
+    if( new_rscf == 0L )
+	return -1;
+    
+    if( getuid() != 0 )
+	return 1;
+    
+    l = strlen(new_rscf) + 73;
+    cmd = (char*)malloc(l);
+    strcpy(cmd, ". /etc/sysconfig/network-scripts/network-functions; change_resolv_conf ");
+    strcpy(cmd+71, new_rscf);
+    argv[2] = cmd;
+    
+    if( (pid == fork()) < 0 )
+	return -1;
+    else
+    if( pid > 0 )
+    {
+	status = 0;
+	if(waitpid(pid, &status, 0L) == pid)
+	    return(   ((status & 0x7f)==0) 
+		    ? ((status >> 8) & 0xff)
+		    : -(status & 0x7f)
+		  );
+    }else
+	execve( argv[0], argv, environ );
 
+    return -1;
+}
 /* parse resolv.conf
  * create a new resolv.conf.dhcpv6
  * mv /etc/resolv.conf to /etc/resolv.conf.V6BAK
@@ -311,7 +347,7 @@
 			}
 		}
 	}
-	if (rename(resolv_dhcpv6_file, RESOLV_CONF_FILE)) {
+	if (change_resolv_conf(resolv_dhcpv6_file)!=0) {
 		dprintf(LOG_ERR, "%s" " rename failed for resolv.conf file", FNAME);
 		return(-1);
 	}