$OpenBSD: patch-server_database_c,v 1.1 2013/05/10 09:56:45 sthen Exp $
--- server/database.c.orig	Fri Feb 20 14:48:53 1998
+++ server/database.c	Fri May 10 10:49:50 2013
@@ -55,7 +55,6 @@
 #include "hash.h"
 #include "database.h"
 
-
 void
 dump_bind_db()
 {
@@ -122,8 +121,27 @@ dump_bind_entry(bp)
 void
 dump_addrpool_db()
 {
+  int dump_fd;
+  char *dump_tmp = ADDRPOOL_DUMP ".XXXXXXXX";
   struct hash_member *resptr = NULL;
 
+#ifdef __OpenBSD__
+  if ((dump_fd = mkstemp(dump_tmp)) < 0) {
+    syslog(LOG_ERR, "Cannot open temporary resource dump file");
+    return;
+  }
+  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);
+    return;
+  }
+  close(dump_fd);
+  unlink(dump_tmp);
+#else
+  unlink(ADDRPOOL_DUMP);
+#endif
   if ((dump_fp = freopen(ADDRPOOL_DUMP, "w+", dump_fp)) == NULL) {
     syslog(LOG_WARNING,
 	   "Cannot reopen the address pool dump file \"%s\"", ADDRPOOL_DUMP);
@@ -250,7 +268,7 @@ dump_addrpool_entry(rp)
   if (isset(rp->valid, S_SUBNET_MASK)) print_ip("snmk", rp->subnet_mask);
   if (isset(rp->active, S_TIME_OFFSET)) fprintf(dump_fp, "!");
   if (isset(rp->valid, S_TIME_OFFSET))
-      fprintf(dump_fp, "tmof=%ld:", ntohl(rp->time_offset));
+      fprintf(dump_fp, "tmof=%ld:", (long)ntohl(rp->time_offset));
   if (isset(rp->active, S_ROUTER)) fprintf(dump_fp, "!");
   if (isset(rp->valid, S_ROUTER)) print_ips("rout", rp->router);
   if (isset(rp->active, S_TIME_SERVER)) fprintf(dump_fp, "!");
@@ -299,7 +317,7 @@ dump_addrpool_entry(rp)
       fprintf(dump_fp, "ditl=%u:", rp->default_ip_ttl);
   if (isset(rp->active, S_MTU_AGING_TIMEOUT)) fprintf(dump_fp, "!");
   if (isset(rp->valid, S_MTU_AGING_TIMEOUT))
-      fprintf(dump_fp, "mtat=%lu:", ntohl(rp->mtu_aging_timeout));
+      fprintf(dump_fp, "mtat=%lu:", (unsigned long)ntohl(rp->mtu_aging_timeout));
   if (isset(rp->active, S_MTU_PLATEAU_TABLE)) fprintf(dump_fp, "!");
   if (isset(rp->valid, S_MTU_PLATEAU_TABLE)) {
     fprintf(dump_fp, "mtpt=");
@@ -329,7 +347,7 @@ dump_addrpool_entry(rp)
   if (isset(rp->valid, S_TRAILER)) print_bool("tril", rp->trailer);
   if (isset(rp->active, S_ARP_CACHE_TIMEOUT)) fprintf(dump_fp, "!");
   if (isset(rp->valid, S_ARP_CACHE_TIMEOUT))
-      fprintf(dump_fp, "apct=%lu:", ntohl(rp->arp_cache_timeout));
+      fprintf(dump_fp, "apct=%lu:", (unsigned long)ntohl(rp->arp_cache_timeout));
   if (isset(rp->active, S_ETHER_ENCAP)) fprintf(dump_fp, "!");
   if (isset(rp->valid, S_ETHER_ENCAP)) print_bool("encp", rp->ether_encap);
   if (isset(rp->active, S_DEFAULT_TCP_TTL)) fprintf(dump_fp, "!");
@@ -337,7 +355,7 @@ dump_addrpool_entry(rp)
       fprintf(dump_fp, "dttl=%u:", rp->default_tcp_ttl);
   if (isset(rp->active, S_KEEPALIVE_INTER)) fprintf(dump_fp, "!");
   if (isset(rp->valid, S_KEEPALIVE_INTER))
-      fprintf(dump_fp, "kain=%lu:", ntohl(rp->keepalive_inter));
+      fprintf(dump_fp, "kain=%lu:", (unsigned long)ntohl(rp->keepalive_inter));
   if (isset(rp->active, S_KEEPALIVE_GARBA)) fprintf(dump_fp, "!");
   if (isset(rp->valid, S_KEEPALIVE_GARBA)) print_bool("kagb", rp->keepalive_garba);
   if (isset(rp->active, S_NIS_DOMAIN)) fprintf(dump_fp, "!");
