dirdb.c revision 499b34cea04a46823d003d4c0520c8b03e8513cb
c19f42a378f76af272166f9cababe7bfbc1cf6abTinderbox User * Copyright (C) 2000, 2001 Internet Software Consortium.
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * Permission to use, copy, modify, and distribute this software for any
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * purpose with or without fee is hereby granted, provided that the above
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * copyright notice and this permission notice appear in all copies.
5a75f61dd413720c16d229b24ebba6bd6ecdb738Evan Hunt * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
28a8f5b0de57d269cf2845c69cb6abe18cbd3b3aMark Andrews * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
5a75f61dd413720c16d229b24ebba6bd6ecdb738Evan Hunt * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
5a75f61dd413720c16d229b24ebba6bd6ecdb738Evan Hunt * INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
5a75f61dd413720c16d229b24ebba6bd6ecdb738Evan Hunt * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
5a75f61dd413720c16d229b24ebba6bd6ecdb738Evan Hunt * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
5a75f61dd413720c16d229b24ebba6bd6ecdb738Evan Hunt * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
5a75f61dd413720c16d229b24ebba6bd6ecdb738Evan Hunt * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
e7008e7007f440490174a52b7117f3c6d121d303Mark Andrews/* $Id: dirdb.c,v 1.9 2001/01/09 21:46:22 bwelling Exp $ */
5a75f61dd413720c16d229b24ebba6bd6ecdb738Evan Hunt * A simple database driver that returns basic information about
5a75f61dd413720c16d229b24ebba6bd6ecdb738Evan Hunt * files and directories in the Unix file system as DNS data.
5a75f61dd413720c16d229b24ebba6bd6ecdb738Evan Hunt do { n = (op); \
5a75f61dd413720c16d229b24ebba6bd6ecdb738Evan Hunt if (n < 0) return (ISC_R_FAILURE); \
5a75f61dd413720c16d229b24ebba6bd6ecdb738Evan Hunt * This database operates on relative names.
5e965459a66e9e83e56091d5366c17f1953ab3ceAutomatic Updater * Any name will be interpreted as a pathname offset from the directory
5a75f61dd413720c16d229b24ebba6bd6ecdb738Evan Hunt * specified in the configuration file.
5a75f61dd413720c16d229b24ebba6bd6ecdb738Evan Huntdirdb_lookup(const char *zone, const char *name, void *dbdata,
5a75f61dd413720c16d229b24ebba6bd6ecdb738Evan Hunt snprintf(filename, sizeof(filename), "%s", (char *)dbdata);
5a75f61dd413720c16d229b24ebba6bd6ecdb738Evan Hunt else if (S_ISCHR(statbuf.st_mode) || S_ISBLK(statbuf.st_mode)) {
5a75f61dd413720c16d229b24ebba6bd6ecdb738Evan Hunt "\"%sdev\" \"major %d\" \"minor %d\"",
5a75f61dd413720c16d229b24ebba6bd6ecdb738Evan Hunt CHECK(dns_sdb_putrr(lookup, "txt", 3600, "pipe"));
5a75f61dd413720c16d229b24ebba6bd6ecdb738Evan Hunt CHECK(dns_sdb_putrr(lookup, "txt", 3600, "socket"));
5a75f61dd413720c16d229b24ebba6bd6ecdb738Evan Hunt CHECKN(readlink(filename, filename2, sizeof(filename2) - 1));
5a75f61dd413720c16d229b24ebba6bd6ecdb738Evan Hunt CHECKN(snprintf(buf, sizeof(buf), "\"symlink\" \"%s\"",
5a75f61dd413720c16d229b24ebba6bd6ecdb738Evan Hunt CHECK(dns_sdb_putrr(lookup, "txt", 3600, "unknown"));
de52784e45e3a7a92c0d8ad843eb4db313bbfd97Mark Andrews CHECKN(snprintf(buf, sizeof(buf), "\"file\" \"size = %u\"",
5a75f61dd413720c16d229b24ebba6bd6ecdb738Evan Hunt * lookup () does not return SOA or NS records, so authority() must be defined.
d64e3b29bd1b66a4bc80b60ef87a5bafe741d7caMark Andrewsdirdb_authority(const char *zone, void *dbdata, dns_sdblookup_t *lookup) {
5a75f61dd413720c16d229b24ebba6bd6ecdb738Evan Hunt result = dns_sdb_putsoa(lookup, "ns", "hostmaster", 0);
5a75f61dd413720c16d229b24ebba6bd6ecdb738Evan Hunt result = dns_sdb_putrr(lookup, "ns", 86400, "ns1");
5a75f61dd413720c16d229b24ebba6bd6ecdb738Evan Hunt result = dns_sdb_putrr(lookup, "ns", 86400, "ns2");
5a75f61dd413720c16d229b24ebba6bd6ecdb738Evan Hunt * Each database stores the top-level directory as the dbdata opaque
5a75f61dd413720c16d229b24ebba6bd6ecdb738Evan Hunt * object. The create() function allocates it. argv[0] holds the top
5a75f61dd413720c16d229b24ebba6bd6ecdb738Evan Hunt * level directory.
5a75f61dd413720c16d229b24ebba6bd6ecdb738Evan Huntdirdb_create(const char *zone, int argc, char **argv,
5a75f61dd413720c16d229b24ebba6bd6ecdb738Evan Hunt *dbdata = isc_mem_strdup((isc_mem_t *)driverdata, argv[0]);
5a75f61dd413720c16d229b24ebba6bd6ecdb738Evan Hunt * The destroy() function frees the memory allocated by create().
5a75f61dd413720c16d229b24ebba6bd6ecdb738Evan Huntdirdb_destroy(const char *zone, void *driverdata, void **dbdata) {
5a75f61dd413720c16d229b24ebba6bd6ecdb738Evan Hunt * This zone does not support zone transfer, so allnodes() is NULL.
5a75f61dd413720c16d229b24ebba6bd6ecdb738Evan Hunt * Wrapper around dns_sdb_register(). Note that the first ns_g_mctx is
5a75f61dd413720c16d229b24ebba6bd6ecdb738Evan Hunt * being passed as the "driverdata" parameter, so that will it will be
5a75f61dd413720c16d229b24ebba6bd6ecdb738Evan Hunt * passed to create() and destroy().
d64e3b29bd1b66a4bc80b60ef87a5bafe741d7caMark Andrews unsigned int flags;
5a75f61dd413720c16d229b24ebba6bd6ecdb738Evan Hunt flags = DNS_SDBFLAG_RELATIVEOWNER | DNS_SDBFLAG_RELATIVERDATA |
5a75f61dd413720c16d229b24ebba6bd6ecdb738Evan Hunt return (dns_sdb_register("dir", &dirdb_methods, ns_g_mctx, flags,
5a75f61dd413720c16d229b24ebba6bd6ecdb738Evan Hunt * Wrapper around dns_sdb_unregister().