|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1986 Regents of the University of California. ! 3: * All rights reserved. ! 4: * ! 5: * Redistribution and use in source and binary forms are permitted ! 6: * provided that the above copyright notice and this paragraph are ! 7: * duplicated in all such forms and that any documentation, ! 8: * advertising materials, and other materials related to such ! 9: * distribution and use acknowledge that the software was developed ! 10: * by the University of California, Berkeley. The name of the ! 11: * University may not be used to endorse or promote products derived ! 12: * from this software without specific prior written permission. ! 13: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR ! 14: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED ! 15: * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. ! 16: */ ! 17: ! 18: #ifndef lint ! 19: static char sccsid[] = "@(#)db_reload.c 4.16 (Berkeley) 6/18/88"; ! 20: #endif /* not lint */ ! 21: ! 22: #include <sys/types.h> ! 23: #include <sys/time.h> ! 24: #include <netinet/in.h> ! 25: #include <stdio.h> ! 26: #include <syslog.h> ! 27: #include <arpa/nameser.h> ! 28: #include "ns.h" ! 29: #include "db.h" ! 30: ! 31: extern time_t resettime; ! 32: ! 33: /* ! 34: * Flush and reload data base. ! 35: */ ! 36: ! 37: db_reload() ! 38: { ! 39: extern char *bootfile; ! 40: ! 41: #ifdef DEBUG ! 42: if (debug >= 3) ! 43: fprintf(ddt,"reload()\n"); ! 44: #endif ! 45: syslog(LOG_NOTICE, "reloading nameserver\n"); ! 46: ! 47: qflush(); ! 48: sqflush(); ! 49: fwdtab_free(); ! 50: if (hashtab != NULL) ! 51: db_free(hashtab); ! 52: hashtab = NULL; ! 53: if (fcachetab != NULL) ! 54: db_free(fcachetab); ! 55: fcachetab = NULL; ! 56: db_inv_free(); ! 57: fwdtab_free(); ! 58: ns_init(bootfile); ! 59: time(&resettime); ! 60: } ! 61: ! 62: db_free(htp) ! 63: struct hashbuf *htp; ! 64: { ! 65: register struct databuf *dp, *nextdp; ! 66: register struct namebuf *np, *nextnp; ! 67: struct namebuf **npp, **nppend; ! 68: ! 69: npp = htp->h_tab; ! 70: nppend = npp + htp->h_size; ! 71: while (npp < nppend) { ! 72: for (np = *npp++; np != NULL; np = nextnp) { ! 73: if (np->n_hash != NULL) ! 74: db_free(np->n_hash); ! 75: (void) free((char *)np->n_dname); ! 76: for (dp = np->n_data; dp != NULL; ) { ! 77: nextdp = dp->d_next; ! 78: (void) free((char *)dp); ! 79: dp = nextdp; ! 80: } ! 81: nextnp = np->n_next; ! 82: free((char *)np); ! 83: } ! 84: } ! 85: (void) free((char *)htp); ! 86: } ! 87: ! 88: db_inv_free() ! 89: { ! 90: register struct invbuf *ip; ! 91: register int i, j; ! 92: ! 93: for (i = 0; i < INVHASHSZ; i++) ! 94: for (ip = invtab[i]; ip != NULL; ip = ip->i_next) ! 95: for (j = 0; j < INVBLKSZ; j++) ! 96: ip->i_dname[j] = NULL; ! 97: } ! 98: ! 99: fwdtab_free() ! 100: { ! 101: extern struct fwdinfo *fwdtab; ! 102: struct fwdinfo *fp, *nextfp; ! 103: ! 104: for (fp = fwdtab; fp != NULL; fp = nextfp) { ! 105: nextfp = fp->next; ! 106: free((char *)fp); ! 107: } ! 108: fwdtab = NULL; ! 109: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.