diff options
Diffstat (limited to 'contrib/bind/bin/mkservdb/mkservdb.c')
-rw-r--r-- | contrib/bind/bin/mkservdb/mkservdb.c | 176 |
1 files changed, 0 insertions, 176 deletions
diff --git a/contrib/bind/bin/mkservdb/mkservdb.c b/contrib/bind/bin/mkservdb/mkservdb.c deleted file mode 100644 index a0a5933..0000000 --- a/contrib/bind/bin/mkservdb/mkservdb.c +++ /dev/null @@ -1,176 +0,0 @@ -#if !defined(lint) && !defined(SABER) -static const char rcsid[] = "$Id: mkservdb.c,v 1.10 2001/06/18 14:42:46 marka Exp $"; -#endif /* not lint */ - -/* - * Copyright (c) 1998,1999 by Internet Software Consortium. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS - * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE - * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS - * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS - * SOFTWARE. - */ - -#include "port_before.h" - -#include <sys/types.h> -#include <netinet/in.h> -#include <arpa/nameser.h> -#include <resolv.h> - -#include <ctype.h> -#ifdef IRS_LCL_SV_DB -#include <db.h> -#include <err.h> -#endif -#include <fcntl.h> -#include <limits.h> -#include <netdb.h> -#include <pwd.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> - -#include "../../include/irs.h" -#include "../../lib/irs/irs_p.h" -#include "../../include/isc/misc.h" - -#include "port_after.h" - -#ifdef SPRINTF_CHAR -# define SPRINTF(x) strlen(sprintf/**/x) -#else -# define SPRINTF(x) ((size_t)sprintf x) -#endif - -#ifndef IRS_LCL_SV_DB -main(int argc, char **argv) { - fprintf(stderr, "%s: not supported on this architecture\n", argv[0]); - exit(1); -} - -#else - -#define _PATH_SERVICES_DB_TMP _PATH_SERVICES_DB ".new" - -struct servent *getnextent(FILE *); - -int -main(int argc, char **argv) { - DB *db; - DBT key; - DBT data; - const char *filename = _PATH_SERVICES; - const char *tmpdatabase = _PATH_SERVICES_DB_TMP; - const char *database = _PATH_SERVICES_DB; - char dbuf[1024]; - char kbuf[512]; - u_short *ports; - struct lcl_sv lcl_sv; - struct servent *sv; - int n, r; - char *p; - - unlink(tmpdatabase); - - if (argc > 1) - filename = argv[1]; - - lcl_sv.fp = fopen(filename, "r"); - if (lcl_sv.fp == NULL) - err(1, "%s", filename); - - db = dbopen(tmpdatabase, O_CREAT|O_RDWR, 0444, DB_BTREE, NULL); - if (db == NULL) - err(1, "%s", tmpdatabase); - - while ((sv = irs_lclsv_fnxt(&lcl_sv)) != NULL) { - if (sv->s_proto == NULL) - continue; - - key.data = kbuf; - data.data = dbuf; - - /* Note that (sizeof "/") == 2. */ - if (strlen(sv->s_name) + sizeof "/" + strlen(sv->s_proto) - > sizeof kbuf) - continue; - key.size = SPRINTF((kbuf, "%s/%s", sv->s_name, sv->s_proto))+1; - - ((u_short *)dbuf)[0] = sv->s_port; - p = dbuf; - p += sizeof(u_short); - if (sv->s_aliases) - for (n = 0; sv->s_aliases[n]; ++n) { - strcpy(p, sv->s_aliases[n]); - p += strlen(p) + 1; - } - data.size = p - dbuf; - - if ((r = db->put(db, &key, &data, R_NOOVERWRITE))) { - if (r < 0) - errx(1, "failed to write %s", (char *)key.data); - else - warnx("will not overwrite %s", (char *)key.data); - } - for (n = 0; sv->s_aliases[n]; ++n) { - if (strlen(sv->s_aliases[n]) + sizeof "/" - + strlen(sv->s_proto) > sizeof kbuf) - continue; - key.size = SPRINTF((kbuf, "%s/%s", - sv->s_aliases[n], sv->s_proto))+1; - if ((r = db->put(db, &key, &data, R_NOOVERWRITE))) { - if (r < 0) - errx(1, "failed to write %s", - (char *)key.data); - else - warnx("will not overwrite %s", - (char *)key.data); - } - } - - ports = (u_short *)kbuf; - ports[0] = 0; - ports[1] = sv->s_port; - strcpy((char *)(ports+2), sv->s_proto); - key.size = sizeof(u_short) * 2 + strlen((char *)(ports+2)) + 1; - - if (strlen(sv->s_name) + sizeof "/" + strlen(sv->s_proto) - > sizeof dbuf) - continue; - p = dbuf; - p += SPRINTF((p, "%s/%s", sv->s_name, sv->s_proto)) + 1; - if (sv->s_aliases != NULL) - for (n = 0; sv->s_aliases[n] != NULL; n++) - if ((p + strlen(sv->s_aliases[n]) + 1) - dbuf - <= (int)sizeof dbuf) { - strcpy(p, sv->s_aliases[n]); - p += strlen(p) + 1; - } - data.size = p - dbuf; - - if ((r = db->put(db, &key, &data, R_NOOVERWRITE))) { - if (r < 0) - errx(1, "failed to write %d/%s", - ntohs(sv->s_port), sv->s_proto); - else - warnx("will not overwrite %d/%s", - ntohs(sv->s_port), sv->s_proto); - } - } - db->close(db); - if (isc_movefile(tmpdatabase, database)) - err(1, "rename %s -> %s", tmpdatabase, database); - exit(0); -} - -#endif |