diff options
Diffstat (limited to 'server/db.c')
-rw-r--r-- | server/db.c | 212 |
1 files changed, 0 insertions, 212 deletions
diff --git a/server/db.c b/server/db.c deleted file mode 100644 index afdaff2e..00000000 --- a/server/db.c +++ /dev/null @@ -1,212 +0,0 @@ -/* db.c - - Persistent database management routines for DHCPD... */ - -/* - * Copyright (c) 1995, 1996 The Internet Software Consortium. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of The Internet Software Consortium nor the names - * of its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INTERNET SOFTWARE CONSORTIUM AND - * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE INTERNET SOFTWARE CONSORTIUM OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * This software has been written for the Internet Software Consortium - * by Ted Lemon <mellon@fugue.com> in cooperation with Vixie - * Enterprises. To learn more about the Internet Software Consortium, - * see ``http://www.vix.com/isc''. To learn more about Vixie - * Enterprises, see ``http://www.vix.com''. - */ - -#ifndef lint -static char copyright[] = -"$Id: db.c,v 1.8 1996/09/02 21:16:24 mellon Exp $ Copyright (c) 1995, 1996 The Internet Software Consortium. All rights reserved.\n"; -#endif /* not lint */ - -#include "dhcpd.h" - -FILE *db_file; - -static int counting = 0; -static int count = 0; -TIME write_time; - -/* Write the specified lease to the current lease database file. */ - -int write_lease (lease) - struct lease *lease; -{ - struct tm *t; - char tbuf [64]; - int errors = 0; - - if (counting) - ++count; - errno = 0; - fprintf (db_file, "lease %s {\n", piaddr (lease -> ip_addr)); - if (errno) { - ++errors; - } - - t = gmtime (&lease -> starts); - sprintf (tbuf, "%d %d/%d/%d %02d:%02d:%02d;", - t -> tm_wday, t -> tm_year + 1900, - t -> tm_mon + 1, t -> tm_mday, - t -> tm_hour, t -> tm_min, t -> tm_sec); - errno = 0; - fprintf (db_file, "\tstarts %s\n", tbuf); - if (errno) { - ++errors; - } - - t = gmtime (&lease -> ends); - sprintf (tbuf, "%d %d/%d/%d %02d:%02d:%02d;", - t -> tm_wday, t -> tm_year + 1900, - t -> tm_mon + 1, t -> tm_mday, - t -> tm_hour, t -> tm_min, t -> tm_sec); - errno = 0; - fprintf (db_file, "\tends %s", tbuf); - if (errno) { - ++errors; - } - - if (lease -> hardware_addr.hlen) { - errno = 0; - fprintf (db_file, "\n\thardware %s %s;", - hardware_types [lease -> hardware_addr.htype], - print_hw_addr (lease -> hardware_addr.htype, - lease -> hardware_addr.hlen, - lease -> hardware_addr.haddr)); - if (errno) { - ++errors; - } - } - if (lease -> uid_len) { - int i; - errno = 0; - fprintf (db_file, "\n\tuid %x", lease -> uid [0]); - if (errno) { - ++errors; - } - for (i = 1; i < lease -> uid_len; i++) { - errno = 0; - fprintf (db_file, ":%x", lease -> uid [i]); - if (errno) { - ++errors; - } - } - putc (';', db_file); - } - if (lease -> flags & BOOTP_LEASE) { - errno = 0; - fprintf (db_file, "\n\tdynamic-bootp;"); - if (errno) { - ++errors; - } - } - errno = 0; - fputs ("\n}\n", db_file); - if (errno) { - ++errors; - } - if (errors) - note ("write_lease: unable to write lease %s", - piaddr (lease -> ip_addr)); - return !errors; -} - -/* Commit any leases that have been written out... */ - -int commit_leases () -{ - /* Commit any outstanding writes to the lease database file. - We need to do this even if we're rewriting the file below, - just in case the rewrite fails. */ - if (fflush (db_file) == EOF) { - note ("commit_leases: unable to commit: %m"); - return 0; - } - if (fsync (fileno (db_file)) < 0) { - note ("commit_leases: unable to commit: %m"); - return 0; - } - - /* If we've written more than a thousand leases or if - we haven't rewritten the lease database in over an - hour, rewrite it now. */ - if (count > 1000 || (count && cur_time - write_time > 3600)) { - count = 0; - write_time = cur_time; - new_lease_file (); - } - return 1; -} - -void db_startup () -{ - /* Read in the existing lease file... */ - read_leases (); - - new_lease_file (); -} - -void new_lease_file () -{ - char newfname [512]; - char backfname [512]; - TIME t; - - /* If we already have an open database, close it. */ - if (db_file) { - fclose (db_file); - } - - /* Make a temporary lease file... */ - time (&t); - sprintf (newfname, "%s.%d", path_dhcpd_db, (int) (t & 32767)); - if ((db_file = fopen (newfname, "w")) == NULL) { - error ("Can't start new lease file: %m"); - } - - /* Write out all the leases that we know of... */ - counting = 0; - write_leases (); - - /* Get the old database out of the way... */ - sprintf (backfname, "%s~", path_dhcpd_db); - if (unlink (backfname) < 0 && errno != ENOENT) - error ("Can't remove old lease database backup %s: %m", - backfname); - if (link (path_dhcpd_db, backfname) < 0) - error ("Can't backup lease database %s to %s: %m", - path_dhcpd_db, backfname); - - /* Move in the new file... */ - if (rename (newfname, path_dhcpd_db) < 0) - error ("Can't install new lease database %s to %s: %m", - newfname, path_dhcpd_db); - - counting = 1; -} |