--- 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); }