]> git.pld-linux.org Git - packages/dhcp.git/commitdiff
- from fedora
authorArkadiusz Miśkiewicz <arekm@maven.pl>
Sun, 3 Feb 2008 18:36:58 +0000 (18:36 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
Changed files:
    dhcp-release-by-ifup.patch -> 1.1

dhcp-release-by-ifup.patch [new file with mode: 0644]

diff --git a/dhcp-release-by-ifup.patch b/dhcp-release-by-ifup.patch
new file mode 100644 (file)
index 0000000..2091b42
--- /dev/null
@@ -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);
This page took 0.145774 seconds and 4 git commands to generate.