]> git.pld-linux.org Git - packages/bootp.git/commitdiff
patchsed for bootp
authorJan Rękorajski <baggins@pld-linux.org>
Fri, 16 Jul 1999 15:41:19 +0000 (15:41 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
Changed files:
    bootp-2.4.3-glibc.patch -> 1.1
    bootp-2.4.3-linux.patch -> 1.1
    bootp-2.4.3-pathfix.patch -> 1.1
    bootp-tmprace.patch -> 1.1
    dhcp.patch -> 1.1

bootp-2.4.3-glibc.patch [new file with mode: 0644]
bootp-2.4.3-linux.patch [new file with mode: 0644]
bootp-2.4.3-pathfix.patch [new file with mode: 0644]
bootp-tmprace.patch [new file with mode: 0644]
dhcp.patch [new file with mode: 0644]

diff --git a/bootp-2.4.3-glibc.patch b/bootp-2.4.3-glibc.patch
new file mode 100644 (file)
index 0000000..ed6ba4b
--- /dev/null
@@ -0,0 +1,10 @@
+--- bootp-2.4.3/getether.c.ewt Thu Jul 10 14:32:20 1997
++++ bootp-2.4.3/getether.c     Thu Jul 10 14:32:25 1997
+@@ -329,7 +329,6 @@
+ #include <memory.h>
+ #include <sys/ioctl.h>
+ #include <net/if.h>           /* struct ifreq */
+-#include <sys/socketio.h>     /* Needed for IOCTL defs */
+ int
+ getether(ifname, eap)
diff --git a/bootp-2.4.3-linux.patch b/bootp-2.4.3-linux.patch
new file mode 100644 (file)
index 0000000..3fef1f6
--- /dev/null
@@ -0,0 +1,47 @@
+--- bootp-2.4.3/bptypes.h.orig Wed Apr 24 17:18:44 1996
++++ bootp-2.4.3/bptypes.h      Wed Apr 24 17:18:50 1996
+@@ -8,7 +8,7 @@
+  */
+ #ifndef       int32
+-#define int32 long
++#define int32 int
+ #endif
+ typedef unsigned int32 u_int32;
+--- bootp-2.4.3/Makefile.orig  Wed Apr 24 17:18:59 1996
++++ bootp-2.4.3/Makefile       Wed Apr 24 20:13:59 1996
+@@ -37,10 +37,10 @@
+ INSTALL=/usr/bin/install
+ DESTDIR=
+-BINDIR=/usr/etc
+-MANDIR=/usr/local/man
++BINDIR=/usr/sbin
++MANDIR=/usr/man
+-CFLAGS= $(OPTDEFS) $(SYSDEFS) $(FILEDEFS) $(MOREDEFS)
++CFLAGS= $(OPTDEFS) $(SYSDEFS) $(FILEDEFS) $(MOREDEFS)
+ PROGS= bootpd bootpef bootpgw bootptest
+ TESTS= trylook trygetif trygetea
+@@ -141,7 +141,7 @@
+ OBJ_D=        bootpd.o dovend.o readfile.o hash.o dumptab.o \
+        lookup.o getif.o hwaddr.o tzone.o report.o $(STRERROR)
+ bootpd: $(OBJ_D)
+-      $(CC) -o $@ $(OBJ_D) $(SYSLIBS)
++      $(CC) -o $@ $(OBJ_D) $(SYSLIBS)
+ OBJ_EF=       bootpef.o dovend.o readfile.o hash.o dumptab.o \
+        lookup.o hwaddr.o tzone.o report.o $(STRERROR)
+--- bootp-2.4.3/hwaddr.c.orig  Wed Apr 24 17:22:12 1996
++++ bootp-2.4.3/hwaddr.c       Wed Apr 24 20:00:26 1996
+@@ -22,6 +22,8 @@
+ #include <net/if.h>   /* for struct ifnet in net/if_arp.h */
+ #endif
++#define MAX_ADDR_LEN 7
++
+ #include <net/if_arp.h>
+ #include <netinet/in.h>
diff --git a/bootp-2.4.3-pathfix.patch b/bootp-2.4.3-pathfix.patch
new file mode 100644 (file)
index 0000000..a538862
--- /dev/null
@@ -0,0 +1,69 @@
+--- bootp-2.4.3/bootpd.c.old   Wed May 13 11:31:49 1998
++++ bootp-2.4.3/bootpd.c       Wed May 13 11:34:07 1998
+@@ -662,6 +662,7 @@
+       char *clntpath;
+       char *homedir, *bootfile;
+       int n;
++      int lpos;
+       /* XXX - SLIP init: Set bp_ciaddr = recv_addr here? */
+@@ -859,13 +860,20 @@
+        * The "real" path is as seen by the BOOTP daemon on this
+        * machine, while the client path is relative to the TFTP
+        * daemon chroot directory (i.e. /tftpboot).
++       *
++       * The bootfile might not be properly zero terminated. We
++       * need to play safe - AC
+        */
+       if (hp->flags.tftpdir) {
++              lpos=strlen(hp->tftpdir->string);
++              if(lpos>=sizeof(realpath)-1)
++                      return;
+               strcpy(realpath, hp->tftpdir->string);
+-              clntpath = &realpath[strlen(realpath)];
++              clntpath = &realpath[lpos];
+       } else {
+               realpath[0] = '\0';
+               clntpath = realpath;
++              lpos=0;
+       }
+       /*
+@@ -906,12 +914,18 @@
+       if (homedir) {
+               if (homedir[0] != '/')
+                       strcat(clntpath, "/");
++              lpos+=strlen(homedir);
++              if(lpos>=sizeof(realpath))
++                      return;
+               strcat(clntpath, homedir);
+               homedir = NULL;
+       }
+       if (bootfile) {
+               if (bootfile[0] != '/')
+                       strcat(clntpath, "/");
++              lpos+=strlen(bootfile);
++              if(lpos>=sizeof(realpath))
++                      return;
+               strcat(clntpath, bootfile);
+               bootfile = NULL;
+       }
+@@ -920,8 +934,15 @@
+        * First try to find the file with a ".host" suffix
+        */
+       n = strlen(clntpath);
+-      strcat(clntpath, ".");
+-      strcat(clntpath, hp->hostname->string);
++      
++      /*
++       *      Don't test if it wont fit.
++       */
++      if(n+1+strlen(hp->hostname->string)<sizeof(realpath))
++      {
++              strcat(clntpath, ".");
++              strcat(clntpath, hp->hostname->string);
++      }
+       if (chk_access(realpath, &bootsize) < 0) {
+               clntpath[n] = 0;                        /* Try it without the suffix */
+               if (chk_access(realpath, &bootsize) < 0) {
diff --git a/bootp-tmprace.patch b/bootp-tmprace.patch
new file mode 100644 (file)
index 0000000..683a52d
--- /dev/null
@@ -0,0 +1,25 @@
+diff -Nru bootp-2.4.3/bootpd.c bootp-2.4.3.new/bootpd.c
+--- bootp-2.4.3/bootpd.c       Fri Nov 13 23:40:05 1998
++++ bootp-2.4.3.new/bootpd.c   Fri Nov 13 23:43:12 1998
+@@ -100,9 +100,8 @@
+ #ifndef CONFIG_FILE
+ #define CONFIG_FILE           "/etc/bootptab"
+ #endif
+-#ifndef DUMPTAB_FILE
+-#define DUMPTAB_FILE          "/tmp/bootpd.dump"
+-#endif
++
++char DUMPTAB_FILE [] = "/tmp/bootpd.dump.XXXXXX";
\f
+@@ -388,7 +387,8 @@
+       if (argc > 1)
+               bootpd_dump = argv[1];
+-
++      else
++              mktemp(DUMPTAB_FILE);
+       /*
+        * Get my hostname and IP address.
+        */
diff --git a/dhcp.patch b/dhcp.patch
new file mode 100644 (file)
index 0000000..b12e068
--- /dev/null
@@ -0,0 +1,736 @@
+diff -rc bootp-2.4.2/Announce bootp-2.4.3/Announce
+*** bootp-2.4.2/Announce       Thu Feb 16 21:18:17 1995
+--- bootp-2.4.3/Announce       Thu Mar 16 08:58:23 1995
+***************
+*** 6,11 ****
+--- 6,13 ----
+  
+  New features in version 2.4 include:
+  
++      Added static DHCP allocation capabilities.
++              Use: :dl=leasetime for DHCP leasetime handouts
+       Added a simple BOOTP gateway program: bootpgw
+       Allow host name anywhere IP address is expected.
+       Automatically lookup the IP address when the name of a
+***************
+*** 49,60 ****
+       SunOS 4.X (Solaris 1.X)
+       SunOS 5.X (Solaris 2.X)
+       System V/386 Rel. 4.0
+  
+  Systems on which others say this code works:
+       CDC EP/IX (1.4.3, 2.1.1)
+       DEC Ultrix (4.2, 4.3)
+-      Linux 1.1.81
+       OSF/1 (DEC Alpha CPU)
+  
+  Please direct questions, comments, and bug reports to:
+       <bootp@andrew.cmu.edu>
+--- 51,69 ----
+       SunOS 4.X (Solaris 1.X)
+       SunOS 5.X (Solaris 2.X)
+       System V/386 Rel. 4.0
++      Linux 1.1.81
+  
+  Systems on which others say this code works:
+       CDC EP/IX (1.4.3, 2.1.1)
+       DEC Ultrix (4.2, 4.3)
+       OSF/1 (DEC Alpha CPU)
++      HP 9000
++ 
++ How to get the latest version:
++      ftp firewall.mc.com (anonymous)
++      cd /pub
++      binary
++      get bootp-2.4.2.tar.Z
+  
+  Please direct questions, comments, and bug reports to:
+       <bootp@andrew.cmu.edu>
+diff -rc bootp-2.4.2/Changes bootp-2.4.3/Changes
+*** bootp-2.4.2/Changes        Thu Feb 16 17:52:06 1995
+--- bootp-2.4.3/Changes        Thu Mar 16 08:24:18 1995
+***************
+*** 2,13 ****
+--- 2,28 ----
+  Date, <email> Real Name
+       what...
+  
++ --> bootp-2.4.3
++ 
++ 08/07/95  middelin@polyware.iaf.nl (Pauline Middelink)
++      Fixed problem while reporting duplicate hardware address in
++      readfile.c (kerry@maine.maine.edu)
++      Changed some code to allow the giaddr to pass through. Needed
++      when the client request is forwarded to us through a gateway.
++      (Broadcasting to the gateway will not reach the client)
++      
++ 01/26/95  Phil.Packer@bbc.co.uk (Phil.Packer)
++      Added dl tag for DHCP lease and rejigged Pauline's codes
++      at the end of bootpd.c to allow the setting of explicit leases.
++      Added "sco" Makefile target.
++      
+  --> bootp-2.4.2
+  
+  01/14/95  middelin@polyware.iaf.nl (Pauline Middelink)
+       Corrected support for the Linux networking code.
+       Fixed lots of warnings (gcc -Wall)
+       Added "linux" Makefile target.
++      Written code for DHCP static IP allocation.
+  
+  01/02/95  Jukka Ukkonen <ukkonen@csc.fi>
+       Allow bootptab syntax: ha="0:0:c0:80:e8:a7"
+diff -rc bootp-2.4.2/Makefile bootp-2.4.3/Makefile
+*** bootp-2.4.2/Makefile       Thu Feb 16 16:25:19 1995
+--- bootp-2.4.3/Makefile       Thu Mar 16 08:52:30 1995
+***************
+*** 9,15 ****
+  # OPTion DEFinitions:
+  # Remove the -DVEND_CMU if you don't wish to support the "CMU vendor format"
+  # in addition to the RFC1048 format.  Leaving out DEBUG saves little.
+! OPTDEFS= -DSYSLOG -DVEND_CMU -DDEBUG
+  
+  # Uncomment and edit this to choose the facility code used for syslog.
+  # LOG_FACILITY= "-DLOG_BOOTP=LOG_LOCAL2"
+--- 9,16 ----
+  # OPTion DEFinitions:
+  # Remove the -DVEND_CMU if you don't wish to support the "CMU vendor format"
+  # in addition to the RFC1048 format.  Leaving out DEBUG saves little.
+! # Remove the -DDHCP if you don't need DHCP support.
+! OPTDEFS= -DSYSLOG -DVEND_CMU -DDHCP -DDEBUG
+  
+  # Uncomment and edit this to choose the facility code used for syslog.
+  # LOG_FACILITY= "-DLOG_BOOTP=LOG_LOCAL2"
+***************
+*** 95,103 ****
+               SYSDEFS="-DSVR4" \
+               SYSLIBS="-lsocket -lnsl"
+  
+! # Linux 1.1.80+ on [34]86
+  linux:
+!      $(MAKE) SYSDEFS="-O6 -Wall -fomit-frame-pointer"
+  
+  # SunOS 4.X
+  sunos4:
+--- 96,111 ----
+               SYSDEFS="-DSVR4" \
+               SYSLIBS="-lsocket -lnsl"
+  
+! # Linux 1.1.80+
+  linux:
+!      $(MAKE) SYSDEFS="-O6 -Wall -fomit-frame-pointer" \
+!              SYSLIBS="" \
+!              FILEDEFS='-DCONFIG_FILE=\"/etc/bootptab\" \
+!                        -DDUMPTAB_FILE=\"/tmp/bootpd.dump\"'
+! 
+! # SCO (pah!) SYSV rel 3.2
+! sco:
+!      $(MAKE) CC="cc" SYSLIBS="-lsocket"
+  
+  # SunOS 4.X
+  sunos4:
+diff -rc bootp-2.4.2/bootp.h bootp-2.4.3/bootp.h
+*** bootp-2.4.2/bootp.h        Mon Aug 22 18:49:17 1994
+--- bootp-2.4.3/bootp.h        Thu Mar 16 08:17:22 1995
+***************
+*** 122,129 ****
+  #define TAG_NIS_SERVER               ((unsigned char)  41)
+  #define TAG_NTP_SERVER               ((unsigned char)  42)
+  /* DHCP maximum message size. */
+  #define TAG_MAX_MSGSZ                ((unsigned char)  57)
+! 
+  /* XXX - Add new tags here */
+  
+  
+--- 122,133 ----
+  #define TAG_NIS_SERVER               ((unsigned char)  41)
+  #define TAG_NTP_SERVER               ((unsigned char)  42)
+  /* DHCP maximum message size. */
++ #define TAG_DHCP_IPLEASE     ((unsigned char)  51)
++ #define TAG_DHCP_MSG         ((unsigned char)  53)
++ #define TAG_DHCP_SERVERID    ((unsigned char)  54)
+  #define TAG_MAX_MSGSZ                ((unsigned char)  57)
+! #define TAG_DHCP_IPRENEW     ((unsigned char)  58)   /* PeP hic facet */
+! #define TAG_DHCP_IPREBIND    ((unsigned char)  59)
+  /* XXX - Add new tags here */
+  
+  
+diff -rc bootp-2.4.2/bootpd.c bootp-2.4.3/bootpd.c
+*** bootp-2.4.2/bootpd.c       Wed Feb 15 22:21:58 1995
+--- bootp-2.4.3/bootpd.c       Thu Mar 16 08:31:12 1995
+***************
+*** 76,81 ****
+--- 76,90 ----
+  # define bzero(p,l)      memset(p,0,l)
+  # define bcmp(a,b,c)     memcmp(a,b,c)
+  #endif
++ #ifdef __linux__
++ /* Use sigaction to make signal last... */
++ inline void (*signal(int sig,void (*handler)(int)))(int) {
++      struct sigaction so,sa = {NULL,0,SA_NOMASK|SA_RESTART,NULL};
++      sa.sa_handler = handler;
++      if (sigaction(sig,&sa,&so)<0) return NULL;
++      return so.sa_handler;
++ }
++ #endif
+  
+  #include "bootp.h"
+  #include "hash.h"
+***************
+*** 114,125 ****
+  #ifdef VEND_CMU
+  PRIVATE void dovend_cmu P((struct bootp *, struct host *));
+  #endif
+! PRIVATE void dovend_rfc1048 P((struct bootp *, struct host *, int32));
+  PRIVATE void handle_reply P((void));
+  PRIVATE void handle_request P((void));
+  PRIVATE void sendreply P((int forward, int32 dest_override));
+  PRIVATE void usage P((void));
+  
+  #undef       P
+  
+  /*
+--- 123,144 ----
+  #ifdef VEND_CMU
+  PRIVATE void dovend_cmu P((struct bootp *, struct host *));
+  #endif
+! PRIVATE int  dovend_rfc1048 P((struct bootp *, struct host *, int32));
+  PRIVATE void handle_reply P((void));
+  PRIVATE void handle_request P((void));
+  PRIVATE void sendreply P((int forward, int32 dest_override));
+  PRIVATE void usage P((void));
+  
++ #ifdef DHCP
++ PRIVATE int dhcp_discover P((struct bootp *, struct host *, byte *, int));
++ PRIVATE int dhcp_request P((struct bootp *, struct host *, byte *, int));
++ PRIVATE int dhcp_decline P((struct bootp *, struct host *, byte *, int));
++ PRIVATE int dhcp_release P((struct bootp *, struct host *, byte *, int));
++ PRIVATE int dhcp_offer P((struct bootp *, struct host *, byte *, int));
++ PRIVATE int dhcp_ack P((struct bootp *, struct host *, byte *, int));
++ PRIVATE int dhcp_lease P((struct bootp *, struct host *, byte **));
++ #endif
++ 
+  #undef       P
+  
+  /*
+***************
+*** 477,482 ****
+--- 496,512 ----
+               bootpc_port = (u_short) IPPORT_BOOTPC;
+       }
+  
++ #ifdef DHCP
++      /*
++       * Maybe we have to broadcast, so enable it.
++       */
++      n = 1;
++      if (setsockopt(s,SOL_SOCKET,SO_BROADCAST,&n,sizeof(n))<0) {
++              report(LOG_ERR, "setsockopt: %s\n", get_errmsg());
++              exit(1);
++      }
++ #endif
++ 
+       /*
+        * Set up signals to read or dump the table.
+        */
+***************
+*** 701,707 ****
+                                          haddrtoa(bp->bp_chaddr, bp->bp_hlen));
+                       return; /* not found */
+               }
+-              (bp->bp_yiaddr).s_addr = hp->iaddr.s_addr;
+  
+       } else {
+  
+--- 731,736 ----
+***************
+*** 724,729 ****
+--- 753,759 ----
+                       return;
+               }
+       }
++      (bp->bp_yiaddr).s_addr = hp->iaddr.s_addr;
+  
+       if (debug) {
+               report(LOG_INFO, "found %s (%s)", inet_ntoa(hp->iaddr),
+***************
+*** 961,967 ****
+        */
+       if (!bcmp(bp->bp_vend, vm_rfc1048, 4)) {
+               /* RFC1048 conformant bootp client */
+!              dovend_rfc1048(bp, hp, bootsize);
+               if (debug > 1) {
+                       report(LOG_INFO, "sending reply (with RFC1048 options)");
+               }
+--- 991,998 ----
+        */
+       if (!bcmp(bp->bp_vend, vm_rfc1048, 4)) {
+               /* RFC1048 conformant bootp client */
+!              if (!dovend_rfc1048(bp, hp, bootsize))
+!                      return;
+               if (debug > 1) {
+                       report(LOG_INFO, "sending reply (with RFC1048 options)");
+               }
+***************
+*** 1093,1098 ****
+--- 1124,1137 ----
+               /* Finally, set the server address field. */
+               bp->bp_siaddr = siaddr;
+       }
++ #ifdef DHCP
++      /*
++       * This code is placed here, because otherwise the siaddr
++       * will not be found...
++       */
++      if (ntohs(bp->bp_flags) & 0x8000 && bp->bp_giaddr.s_addr==0)
++              dst.s_addr = INADDR_BROADCAST;
++ #endif
+       /* Set up socket address for send. */
+       send_addr.sin_family = AF_INET;
+       send_addr.sin_port = htons(port);
+***************
+*** 1220,1228 ****
+       if (bytesleft < (LEN)) { \
+               report(LOG_NOTICE, noroom, \
+                          hp->hostname->string, MSG); \
+!              return; \
+       } while (0)
+! PRIVATE void
+  dovend_rfc1048(bp, hp, bootsize)
+       struct bootp *bp;
+       struct host *hp;
+--- 1259,1267 ----
+       if (bytesleft < (LEN)) { \
+               report(LOG_NOTICE, noroom, \
+                          hp->hostname->string, MSG); \
+!              return 0; \
+       } while (0)
+! PRIVATE int
+  dovend_rfc1048(bp, hp, bootsize)
+       struct bootp *bp;
+       struct host *hp;
+***************
+*** 1230,1235 ****
+--- 1269,1278 ----
+  {
+       int bytesleft, len;
+       byte *vp;
++ #ifdef DHCP
++      int dhcp = 0;
++      int isme = TRUE;        /* DHCP uses this for not-mine-requests */
++ #endif
+  
+       static char noroom[] = "%s: No room for \"%s\" option";
+  
+***************
+*** 1280,1286 ****
+                               case TAG_SUBNET_MASK:
+                                       /* XXX - Should preserve this if given... */
+                                       break;
+!                              } /* swtich */
+                               p += len;
+                       }
+  
+--- 1323,1335 ----
+                               case TAG_SUBNET_MASK:
+                                       /* XXX - Should preserve this if given... */
+                                       break;
+!                              case TAG_DHCP_MSG:
+!                                      dhcp = *p;
+!                                      break;
+!                              case TAG_DHCP_SERVERID:
+!                                      isme = (len==4) && my_ip_addr.s_addr == ((struct in_addr *)p)->s_addr;
+!                                      break;
+!                              } /* switch */
+                               p += len;
+                       }
+  
+***************
+*** 1347,1362 ****
+               vp += len;
+               *vp++ = TAG_END;
+               bytesleft -= len + 3;
+!              return;                                 /* no more options here. */
+       }
+       /*
+!       * The remaining options are inserted by the following
+!       * function (which is shared with bootpef.c).
+!       * Keep back one byte for the TAG_END.
+        */
+!      len = dovend_rfc1497(hp, vp, bytesleft - 1);
+!      vp += len;
+!      bytesleft -= len;
+  
+       /* There should be at least one byte left. */
+       NEED(1, "(end)");
+--- 1396,1439 ----
+               vp += len;
+               *vp++ = TAG_END;
+               bytesleft -= len + 3;
+!              return 1;                               /* no more options here. */
+       }
++ 
++ #ifdef DHCP
+       /*
+!       * Check if this is a DHCP request.
+        */
+!      if (dhcp!=0) {
+!              if (!isme)
+!                      return 0;       /* Not mine, discard! */
+! 
+!              switch (dhcp) {
+!               case 1 : len = dhcp_discover(bp,hp,vp,bytesleft-1); break;
+!               case 3 : len = dhcp_request(bp,hp,vp,bytesleft-1); break;
+!               case 4 : len = dhcp_decline(bp,hp,vp,bytesleft-1); break;
+!               case 7 : len = dhcp_release(bp,hp,vp,bytesleft-1); break;
+!               default : report(LOG_NOTICE,"Unknown DHCP request (%d)",dhcp);
+!                         return 0;
+!              }
+!              /* Is there a DHCP reply at all? */
+!              if (len==0)
+!                      return 0;
+!              vp += len;
+!              bytesleft -= len;
+!      }
+!      else {
+! #endif
+!              /*
+!               * The remaining options are inserted by the following
+!               * function (which is shared with bootpef.c).
+!               * Keep back one byte for the TAG_END.
+!               */
+!              len = dovend_rfc1497(hp, vp, bytesleft - 1);
+!              vp += len;
+!              bytesleft -= len;
+! #ifdef DHCP
+!      }
+! #endif
+  
+       /* There should be at least one byte left. */
+       NEED(1, "(end)");
+***************
+*** 1370,1375 ****
+--- 1447,1453 ----
+                */
+               bzero(vp, bytesleft);
+       }
++      return 1;       /* sent reply */
+  } /* dovend_rfc1048 */
+  #undef       NEED
+  \f
+***************
+*** 1389,1394 ****
+--- 1467,1637 ----
+   */
+  
+  /* get_errmsg() - now in report.c */
++ 
++ 
++ #ifdef DHCP
++ 
++ /*
++  * PeP hic facet
++  * Stuff the packet with the Lease info, We need to do this on the Offer and
++  * the ack so separated out here
++  */
++ PRIVATE
++ int dhcp_lease(bp, hp, vp)
++     struct bootp *bp;
++     struct host *hp;
++     byte **vp;
++ {
++      *(*vp)++ = TAG_DHCP_IPRENEW;    /* DHCP Renewal time 50% of lease */
++      *(*vp)++ = 4;                   /* Length */
++      insert_u_long(htonl(hp->dhcp_lease/2),vp);
++ 
++      *(*vp)++ = TAG_DHCP_IPREBIND;   /* DHCP Rebinding time 85% of lease */
++      *(*vp)++ = 4;
++      insert_u_long(htonl(hp->dhcp_lease*7/8),vp);
++      
++      *(*vp)++ = TAG_DHCP_IPLEASE;    /* IP address lease time */
++      *(*vp)++ = 4;                   /* Length */
++      insert_u_long(htonl(hp->dhcp_lease),vp); /* PeP hic facet, lets see if this works */
++ 
++      return(19);
++ }
++ 
++ 
++ /*
++  * Formulate an DHCP_DISCOVER reply
++  */
++ PRIVATE
++ int dhcp_discover(bp, hp, vp, bytesleft)
++     struct bootp *bp;
++     struct host *hp;
++     byte *vp;
++     int bytesleft;
++ {
++      if(debug)
++              report(LOG_INFO, "Received: DHCPDISCOVER");
++      return(dhcp_offer(bp,hp,vp,bytesleft));
++ }
++ 
++ /*
++  * formulate an DHCP_RELEASE reply
++  */
++ PRIVATE
++ int dhcp_release(bp, hp, vp, bytesleft)
++     struct bootp *bp;
++     struct host *hp;
++     byte *vp;
++     int bytesleft;
++ {
++      if (debug)
++              report(LOG_INFO, "Received: DHCPRELEASE (discarded)");
++      return 0;
++ }
++ 
++ PRIVATE
++ int dhcp_offer(bp, hp, vp, bytesleft)
++     struct bootp *bp;
++     struct host *hp;
++     byte *vp;
++     int bytesleft;
++ {
++      int len=0;
++      if (debug)
++              report(LOG_INFO, "Sent: DHCPOFFER");
++ 
++      bp->bp_secs = bp->bp_hops = 0;
++      bp->bp_ciaddr.s_addr = 0;
++ 
++      *vp++ = TAG_DHCP_MSG;           /* DHCP */
++      *vp++ = 1;                      /* length */
++      *vp++ = 2;                      /* DHCPOFFER */
++      len +=  3;      
++ 
++      len += dhcp_lease(bp,hp,&vp);
++ 
++      *vp++ = TAG_DHCP_SERVERID;
++      *vp++ = 4;
++      insert_u_long(my_ip_addr.s_addr,&vp);
++      len += 6;
++ 
++      return len + dovend_rfc1497(hp, vp, bytesleft - len);
++ }
++ 
++ /*
++  * Formulate an DHCP_REQUEST reply
++  */
++ PRIVATE
++ int dhcp_request(bp, hp, vp, bytesleft)
++     struct bootp *bp;
++     struct host *hp;
++     byte *vp;
++     int bytesleft;
++ {
++      bp->bp_secs = bp->bp_hops = 0;
++ 
++      if(debug)
++              report(LOG_INFO,"Received: DHCPREQUEST");
++      /*
++       * Make absolutely sure that if the client requests an address,
++       * it is its own address, and also make sure the hardware
++       * addresses match perfectly. We want to minimize spoofing!
++       */
++      if ((bp->bp_ciaddr.s_addr && bp->bp_ciaddr.s_addr!=bp->bp_yiaddr.s_addr) ||
++          bp->bp_htype != hp->htype ||
++             bcmp(bp->bp_chaddr, hp->haddr, haddrlength(hp->htype))) {
++              if (debug)
++                      report(LOG_INFO, "Sent: DHCPNAK");
++ 
++              *vp++ = TAG_DHCP_MSG;   /* DHCPNAK */
++              *vp++ = 1;
++              *vp++ = 6;
++              return 3;
++      }
++      else 
++              return(dhcp_ack(bp,hp,vp,bytesleft));   
++ }
++ 
++ PRIVATE
++ int dhcp_ack(bp, hp, vp, bytesleft)
++     struct bootp *bp;
++     struct host *hp;
++     byte *vp;
++     int bytesleft;
++ {
++      int len=0;
++      if (debug)
++              report(LOG_INFO, "Sent: DHCPACK");
++ 
++      *vp++ = TAG_DHCP_MSG;   /* DHCPACK */
++      *vp++ = 1;
++      *vp++ = 5;
++      len += 3;
++ 
++      len += dhcp_lease(bp,hp,&vp);
++ 
++      *vp++ = TAG_DHCP_SERVERID;      /* Server id */
++      *vp++ = 4;
++      insert_u_long(my_ip_addr.s_addr,&vp);
++      len += 6;
++ 
++      return len + dovend_rfc1497(hp, vp, bytesleft - len);
++ }
++ 
++ /*
++  * formulate an DHCP_DECLINE reply
++  */
++ PRIVATE
++ int dhcp_decline(bp, hp, vp, bytesleft)
++     struct bootp *bp;
++     struct host *hp;
++     byte *vp;
++     int bytesleft;
++ {
++      if (debug)
++              report(LOG_INFO, "Recived: DHCPDECLINE (ignored)");
++      return 0;
++ }
++ #endif
+  
+  /*
+   * Local Variables:
+diff -rc bootp-2.4.2/bootpd.h bootp-2.4.3/bootpd.h
+*** bootp-2.4.2/bootpd.h       Thu Jul 28 00:30:29 1994
+--- bootp-2.4.3/bootpd.h       Thu Mar 16 08:17:23 1995
+***************
+*** 126,131 ****
+--- 126,134 ----
+               exec_file       :1,
+               msg_size        :1,
+               min_wait        :1,
++ #ifdef DHCP
++              dhcp_lease      :1,     /* PeP hic facet */
++ #endif
+               /* XXX - Add new tags here */
+               vm_cookie       :1;
+  };
+***************
+*** 184,189 ****
+--- 187,195 ----
+      unsigned int32       bootsize,
+                           msg_size,
+                           min_wait;
++ #ifdef DHCP
++     unsigned int32       dhcp_lease; /* PeP hic facet */
++ #endif
+      struct in_addr       bootserver,
+                           iaddr,
+                           swap_server,
+diff -rc bootp-2.4.2/bootptest.c bootp-2.4.3/bootptest.c
+*** bootp-2.4.2/bootptest.c    Thu Feb 16 16:36:25 1995
+--- bootp-2.4.3/bootptest.c    Thu Mar 16 08:17:36 1995
+***************
+*** 50,55 ****
+--- 50,58 ----
+  #include <unistd.h>
+  #endif
+  
++ #ifndef      NO_UNISTD
++ #include <unistd.h>
++ #endif
+  #include <stdlib.h>
+  #include <signal.h>
+  #include <stdio.h>
+***************
+*** 66,71 ****
+--- 69,77 ----
+  
+  #include "patchlevel.h"
+  
++ static void send_request();
++ 
++ extern int getether();
+  static void send_request();
+  
+  #define LOG_ERR 1
+diff -rc bootp-2.4.2/print-bootp.c bootp-2.4.3/print-bootp.c
+*** bootp-2.4.2/print-bootp.c  Wed Feb 15 23:21:13 1995
+--- bootp-2.4.3/print-bootp.c  Thu Mar 16 08:41:15 1995
+***************
+*** 268,274 ****
+       "iXW-FS",                       /* 48: X Window System Font Servers */
+       "iXW-DM",                       /* 49: X Window System Display Managers */
+  
+!      /* DHCP extensions (RFC-1533, sect. 9) */
+  #endif
+  };
+  #define      KNOWN_OPTIONS (sizeof(rfc1048_opts) / sizeof(rfc1048_opts[0]))
+--- 268,279 ----
+       "iXW-FS",                       /* 48: X Window System Font Servers */
+       "iXW-DM",                       /* 49: X Window System Display Managers */
+  
+!      /* DHCP extensions (RFC-1533, sect. 9) PeP hic facet */
+!      "iDHCPreq",                     /* 50: DHCP requested IP address */
+!      "lDHCPlease",                   /* 51: DHCP lease time */ 
+!      "bDHCPooptol",                  /* 52: DHCP option overload */
+!      "bDHCPtype",                    /* 53: DHCP message type */
+!      "iDHCPSid",                     /* 54: DHCP server ID */
+  #endif
+  };
+  #define      KNOWN_OPTIONS (sizeof(rfc1048_opts) / sizeof(rfc1048_opts[0]))
+diff -rc bootp-2.4.2/readfile.c bootp-2.4.3/readfile.c
+*** bootp-2.4.2/readfile.c     Wed Feb 15 21:45:25 1995
+--- bootp-2.4.3/readfile.c     Thu Mar 16 08:46:17 1995
+***************
+*** 113,118 ****
+--- 113,121 ----
+  #define SYM_EXEC_FILE                 33     /* YORK_EX_OPTION */
+  #define SYM_MSG_SIZE                  34
+  #define SYM_MIN_WAIT          35
++ #define SYM_DHCP_LEASE                36     /* RFC 1533 PeP hic facet */
++ #define SYM_DHCP_IPRENEW      37
++ #define SYM_DHCP_IPREBIND     38
+  /* XXX - Add new tags here */
+  
+  #define OP_ADDITION            1     /* Operations on tags */
+***************
+*** 161,166 ****
+--- 164,172 ----
+       {"df", SYM_DUMP_FILE},
+       {"dn", SYM_DOMAIN_NAME},
+       {"ds", SYM_DOMAIN_SERVER},
++ #ifdef DHCP
++      {"dl", SYM_DHCP_LEASE},         /* PeP hic facet */
++ #endif
+       {"ef", SYM_EXTEN_FILE},
+       {"ex", SYM_EXEC_FILE},          /* YORK_EX_OPTION */
+       {"gw", SYM_GATEWAY},
+***************
+*** 1125,1131 ****
+               PARSE_UINT(min_wait);
+               break;
+  
+!              /* XXX - Add new tags here */
+  
+       default:
+               return E_UNKNOWN_SYMBOL;
+--- 1131,1146 ----
+               PARSE_UINT(min_wait);
+               break;
+  
+! #ifdef DHCP          
+!      /* PeP hic facet. */                    
+!      case SYM_DHCP_LEASE:
+!              PARSE_UINT(dhcp_lease);
+!              break;
+! 
+!              /* XXX - Add new DHCP tags here */
+! #endif
+! 
+!      /* XXX - Add new tags here */
+  
+       default:
+               return E_UNKNOWN_SYMBOL;
+***************
+*** 1506,1511 ****
+--- 1521,1527 ----
+       DUP_COPY(min_wait);
+  
+       /* XXX - Add new tags here */
++      DUP_COPY(dhcp_lease); /* PeP hic facet */
+  
+       DUP_LINK(generic);
+  
+
This page took 0.154065 seconds and 4 git commands to generate.