--- contrib/isc-dhcp/client/dhclient.c.orig Thu Mar 13 11:16:00 2003 +++ contrib/isc-dhcp/client/dhclient.c Fri Mar 14 17:09:35 2003 @@ -253,15 +256,24 @@ /* first kill of any currently running client */ if (release_mode) { - /* XXX inelegant hack to prove concept */ - char command[1024]; -#if !defined (NO_SNPRINTF) - snprintf (command, 1024, "kill `cat %s`", path_dhclient_pid); -#else - sprintf (command, "kill `cat %s`", path_dhclient_pid); -#endif - system (command); + FILE *pidfd; + pid_t oldpid; + long temp; + int e; + + oldpid = 0; + if ((pidfd = fopen(path_dhclient_pid, "r")) != NULL) { + e = fscanf(pidfd, "%ld\n", &temp); + oldpid = (pid_t)temp; + + if (e != 0 && e != EOF) { + if (oldpid) { + if (kill(oldpid, SIGTERM) == 0) + unlink(path_dhclient_pid); + } + } + fclose(pidfd); + } } if (!quiet) {