openbsd-ports/net/wide-dhcp/patches/patch-server_dhcps.c
avsm a0882217cf commit this three-month old patch that was posted to ports@ with no
response.  Does anyone out there use this port at all?  It was broken,
this unbreaks it by FAKEing it, but there's noone using it to test
it out....
2001-01-09 20:49:33 +00:00

122 lines
3.3 KiB
C

--- server/dhcps.c.orig Sun Jul 19 09:16:53 1998
+++ server/dhcps.c Tue Dec 22 09:19:18 1998
@@ -136,7 +136,7 @@
int nmacaddr;
#endif
-void
+int
main(argc, argv)
int argc;
char **argv;
@@ -146,7 +146,7 @@
struct if_info *ifp = NULL; /* pointer to interface */
char *option = NULL; /* command line option */
char msgtype; /* DHCP message type */
- struct sockaddr_in my_addr, any_addr;
+ struct sockaddr_in my_addr;
struct ifreq ifreq;
bzero(&ifreq, sizeof(ifreq));
@@ -228,9 +228,19 @@
#define LOG_PERROR 0 /* Don't bother if not defined... */
#endif
if (debug == 1) {
+#ifndef __OpenBSD__
openlog("dhcps", LOG_PID | LOG_CONS | LOG_PERROR, LOG_LOCAL0);
+#else
+ /* Using LOG_LOCAL1 to avoid OpenBSD ipmon log conflict */
+ openlog("dhcps", LOG_PID | LOG_CONS | LOG_PERROR, LOG_LOCAL1);
+#endif
} else {
+#ifndef __OpenBSD__
openlog("dhcps", LOG_PID | LOG_CONS, LOG_LOCAL0);
+#else
+ /* Using LOG_LOCAL1 to avoid OpenBSD ipmon log conflict */
+ openlog("dhcps", LOG_PID | LOG_CONS, LOG_LOCAL1);
+#endif
}
init_db(); /* initialize databases */
@@ -540,6 +550,11 @@
static void
init_db()
{
+#ifdef __OpenBSD__
+ int dump_fd;
+ char *dump_tmp = ADDRPOOL_DUMP ".XXXXXXXX";
+#endif
+
if (addrpool_db[0] == '\0') strcpy(addrpool_db, ADDRPOOL_DB);
if ((addrpool_dbfp = fopen(addrpool_db, "r")) == NULL) {
syslog(LOG_ERR, "Cannot open the resource database \"%s\"", addrpool_db);
@@ -563,7 +578,23 @@
syslog(LOG_ERR, "Cannot open the binding database \"%s\"", binding_db);
exit(1);
}
+#ifdef __OpenBSD__
+ if ((dump_fd = mkstemp(dump_tmp)) < 0) {
+ syslog(LOG_ERR, "Cannot open temporary resource dump file");
+ exit(1);
+ }
unlink(ADDRPOOL_DUMP);
+ if (link(dump_tmp, ADDRPOOL_DUMP) < 0) {
+ syslog(LOG_ERR, "Cannot link \"%s\" to \"%s\"", dump_tmp, ADDRPOOL_DUMP);
+ close(dump_fd);
+ unlink(dump_tmp);
+ exit(1);
+ }
+ close(dump_fd);
+ unlink(dump_tmp);
+#else
+ unlink(ADDRPOOL_DUMP);
+#endif
if ((dump_fp = fopen(ADDRPOOL_DUMP, "w+")) == NULL) {
syslog(LOG_ERR, "Cannot open the resource dump file \"%s\"",ADDRPOOL_DUMP);
exit(1);
@@ -1921,7 +1952,11 @@
snd.dhcp->options[off_options] = END;
} else if (off_extopt > 0 && off_extopt < maxoptlen - DFLTOPTLEN &&
sbufvec[1].iov_base != NULL) {
+#ifndef __OpenBSD__
sbufvec[1].iov_base[off_extopt++] = END;
+#else
+ *((char *)sbufvec[1].iov_base + off_extopt++) = END;
+#endif
}
if (off_extopt < sbufvec[1].iov_len) {
@@ -2378,7 +2413,11 @@
char *inserted;
char flag;
{
+#ifdef __OpenBSD__
+ u_int32_t *addr = 0;
+#else
u_Long *addr = 0;
+#endif
char option[6];
int symbol = 0;
int retval = 0;
@@ -2939,7 +2978,11 @@
len -= done;
off_options += done; /* invalid offset, So, to access
here will cause fatal error */
+#ifndef __OpenBSD__
bcopy(&opt[done], &sbufvec[1].iov_base[off_extopt], len);
+#else
+ bcopy(&opt[done], (char *)sbufvec[1].iov_base + off_extopt, len);
+#endif
off_extopt += len;
return(0);
}
@@ -3016,7 +3059,7 @@
return(GOOD);
}
-#if defined(__bsdi__) || (__FreeBSD__ >= 2)
+#if defined(__bsdi__) || (__FreeBSD__ >= 2) || defined(__OpenBSD__)
delarp(ip);
#else
delarp(ip, sockfd);