SOURCES: dhcp-release-by-ifup.patch (NEW) - from fedora

arekm arekm at pld-linux.org
Sun Feb 3 19:37:03 CET 2008


Author: arekm                        Date: Sun Feb  3 18:37:03 2008 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- from fedora

---- Files affected:
SOURCES:
   dhcp-release-by-ifup.patch (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/dhcp-release-by-ifup.patch
diff -u /dev/null SOURCES/dhcp-release-by-ifup.patch:1.1
--- /dev/null	Sun Feb  3 19:37:03 2008
+++ SOURCES/dhcp-release-by-ifup.patch	Sun Feb  3 19:36:58 2008
@@ -0,0 +1,84 @@
+--- dhcp-3.0.5/client/dhclient.c.release	2007-03-30 15:30:14.000000000 -0400
++++ dhcp-3.0.5/client/dhclient.c	2007-03-30 15:29:58.000000000 -0400
+@@ -366,9 +366,81 @@
+ 				}
+ 			}
+ 			fclose(pidfd);
++		} else {
++			/* handle release for interfaces requested with Red Hat
++			 * /sbin/ifup - pidfile will be /var/run/dhclient-$interface.pid 
++			 */
++
++			if ((path_dhclient_pid == NULL) || (*path_dhclient_pid == '\0'))
++				path_dhclient_pid = "/var/run/dhclient.pid";
++
++			char *new_path_dhclient_pid;
++			struct interface_info *ip;
++			int pdp_len = strlen(path_dhclient_pid), pfx, dpfx;
++
++			/* find append point: beginning of any trailing '.pid'
++			 * or '-$IF.pid' */
++			for (pfx=pdp_len; (pfx >= 0) && (path_dhclient_pid[pfx] != '.') && (path_dhclient_pid[pfx] != '/'); pfx--);
++				if (pfx == -1)
++					pfx = pdp_len;
++
++			if (path_dhclient_pid[pfx] == '/')
++				pfx += 1;
++
++			for (dpfx=pfx; (dpfx >= 0) && (path_dhclient_pid[dpfx] != '-') && (path_dhclient_pid[dpfx] != '/'); dpfx--);
++				if ((dpfx > -1) && (path_dhclient_pid[dpfx] != '/'))
++					pfx = dpfx;                 
++
++			for (ip = interfaces; ip; ip = ip->next) {
++				if (interfaces_requested && (ip->flags & (INTERFACE_REQUESTED)) && (ip->name != NULL)) {
++					int n_len = strlen(ip->name);
++
++					new_path_dhclient_pid = (char*) malloc(pfx + n_len + 6);
++					strncpy(new_path_dhclient_pid, path_dhclient_pid, pfx);
++					sprintf(new_path_dhclient_pid + pfx, "-%s.pid", ip->name);
++
++					if ((pidfd = fopen(new_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);
++					}
++
++					free(new_path_dhclient_pid);
++				}
++			}
++		}
++	} else {
++		FILE *pidfp = NULL;
++		long temp = 0;
++		pid_t dhcpid = 0;
++		int dhc_running = 0;
++		char procfn[256] = "";
++
++		if ((pidfp = fopen(path_dhclient_pid, "r")) != NULL) {
++			if ((fscanf(pidfp, "%ld", &temp)==1) && ((dhcpid=(pid_t)temp) > 0)) {
++				snprintf(procfn,256,"/proc/%u",dhcpid);
++				dhc_running = (access(procfn, F_OK) == 0);          
++			}
++
++			fclose(pidfp);
++		}
++
++		if (dhc_running) {
++			log_fatal("dhclient(%u) is already running - exiting. ", dhcpid);
++			return(1);
+ 		}
+ 	}
+ 
++	write_client_pid_file();
++
+ 	if (!quiet) {
+ 		log_info ("%s %s", message, DHCP_VERSION);
+ 		log_info (copyright);
================================================================


More information about the pld-cvs-commit mailing list