]> git.pld-linux.org Git - packages/dhcp.git/blame - dhcp-release-by-ifup.patch
- x32 rebuild
[packages/dhcp.git] / dhcp-release-by-ifup.patch
CommitLineData
4134229b
AM
1--- dhcp-3.0.5/client/dhclient.c.release 2007-03-30 15:30:14.000000000 -0400
2+++ dhcp-3.0.5/client/dhclient.c 2007-03-30 15:29:58.000000000 -0400
3@@ -366,9 +366,81 @@
4 }
5 }
6 fclose(pidfd);
7+ } else {
8+ /* handle release for interfaces requested with Red Hat
9+ * /sbin/ifup - pidfile will be /var/run/dhclient-$interface.pid
10+ */
11+
12+ if ((path_dhclient_pid == NULL) || (*path_dhclient_pid == '\0'))
13+ path_dhclient_pid = "/var/run/dhclient.pid";
14+
15+ char *new_path_dhclient_pid;
16+ struct interface_info *ip;
17+ int pdp_len = strlen(path_dhclient_pid), pfx, dpfx;
18+
19+ /* find append point: beginning of any trailing '.pid'
20+ * or '-$IF.pid' */
21+ for (pfx=pdp_len; (pfx >= 0) && (path_dhclient_pid[pfx] != '.') && (path_dhclient_pid[pfx] != '/'); pfx--);
22+ if (pfx == -1)
23+ pfx = pdp_len;
24+
25+ if (path_dhclient_pid[pfx] == '/')
26+ pfx += 1;
27+
28+ for (dpfx=pfx; (dpfx >= 0) && (path_dhclient_pid[dpfx] != '-') && (path_dhclient_pid[dpfx] != '/'); dpfx--);
29+ if ((dpfx > -1) && (path_dhclient_pid[dpfx] != '/'))
30+ pfx = dpfx;
31+
32+ for (ip = interfaces; ip; ip = ip->next) {
33+ if (interfaces_requested && (ip->flags & (INTERFACE_REQUESTED)) && (ip->name != NULL)) {
34+ int n_len = strlen(ip->name);
35+
36+ new_path_dhclient_pid = (char*) malloc(pfx + n_len + 6);
37+ strncpy(new_path_dhclient_pid, path_dhclient_pid, pfx);
38+ sprintf(new_path_dhclient_pid + pfx, "-%s.pid", ip->name);
39+
40+ if ((pidfd = fopen(new_path_dhclient_pid, "r")) != NULL) {
41+ e = fscanf(pidfd, "%ld\n", &temp);
42+ oldpid = (pid_t)temp;
43+
44+ if (e != 0 && e != EOF) {
45+ if (oldpid) {
46+ if (kill(oldpid, SIGTERM) == 0)
47+ unlink(path_dhclient_pid);
48+ }
49+ }
50+
51+ fclose(pidfd);
52+ }
53+
54+ free(new_path_dhclient_pid);
55+ }
56+ }
57+ }
58+ } else {
59+ FILE *pidfp = NULL;
60+ long temp = 0;
61+ pid_t dhcpid = 0;
62+ int dhc_running = 0;
63+ char procfn[256] = "";
64+
65+ if ((pidfp = fopen(path_dhclient_pid, "r")) != NULL) {
66+ if ((fscanf(pidfp, "%ld", &temp)==1) && ((dhcpid=(pid_t)temp) > 0)) {
67+ snprintf(procfn,256,"/proc/%u",dhcpid);
68+ dhc_running = (access(procfn, F_OK) == 0);
69+ }
70+
71+ fclose(pidfp);
72+ }
73+
74+ if (dhc_running) {
75+ log_fatal("dhclient(%u) is already running - exiting. ", dhcpid);
76+ return(1);
77 }
78 }
79
80+ write_client_pid_file();
81+
82 if (!quiet) {
83 log_info ("%s %s", message, DHCP_VERSION);
84 log_info (copyright);
This page took 0.038972 seconds and 4 git commands to generate.