]> git.ipfire.org Git - ipfire-2.x.git/blobdiff - src/patches/dhcp-4.2.0-release-by-ifup.patch
dhcp: Update to 4.3.1
[ipfire-2.x.git] / src / patches / dhcp-4.2.0-release-by-ifup.patch
diff --git a/src/patches/dhcp-4.2.0-release-by-ifup.patch b/src/patches/dhcp-4.2.0-release-by-ifup.patch
deleted file mode 100644 (file)
index 300c5f3..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-diff -up dhcp-4.2.0/client/dhclient.c.ifup dhcp-4.2.0/client/dhclient.c
---- dhcp-4.2.0/client/dhclient.c.ifup  2010-07-21 13:30:10.000000000 +0200
-+++ dhcp-4.2.0/client/dhclient.c       2010-07-21 13:37:03.000000000 +0200
-@@ -497,9 +497,81 @@ main(int argc, char **argv) {
-                                       kill(oldpid, SIGTERM);
-                       }
-                       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))) {
-+                                      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, PACKAGE_VERSION);
-               log_info(copyright);