1248aee62SJacques Vidrine /* $NetBSD: hesinfo.c,v 1.1 1999/01/25 22:45:55 lukem Exp $ */
2248aee62SJacques Vidrine
3248aee62SJacques Vidrine /* Copyright 1988, 1996 by the Massachusetts Institute of Technology.
4248aee62SJacques Vidrine *
5248aee62SJacques Vidrine * Permission to use, copy, modify, and distribute this
6248aee62SJacques Vidrine * software and its documentation for any purpose and without
7248aee62SJacques Vidrine * fee is hereby granted, provided that the above copyright
8248aee62SJacques Vidrine * notice appear in all copies and that both that copyright
9248aee62SJacques Vidrine * notice and this permission notice appear in supporting
10248aee62SJacques Vidrine * documentation, and that the name of M.I.T. not be used in
11248aee62SJacques Vidrine * advertising or publicity pertaining to distribution of the
12248aee62SJacques Vidrine * software without specific, written prior permission.
13248aee62SJacques Vidrine * M.I.T. makes no representations about the suitability of
14248aee62SJacques Vidrine * this software for any purpose. It is provided "as is"
15248aee62SJacques Vidrine * without express or implied warranty.
16248aee62SJacques Vidrine */
17248aee62SJacques Vidrine
18248aee62SJacques Vidrine /* This file is a simple driver for the Hesiod library. */
19248aee62SJacques Vidrine
20248aee62SJacques Vidrine
21248aee62SJacques Vidrine #include <sys/cdefs.h>
22248aee62SJacques Vidrine #include <err.h>
23248aee62SJacques Vidrine #include <errno.h>
24248aee62SJacques Vidrine #include <hesiod.h>
25248aee62SJacques Vidrine #include <stdio.h>
26248aee62SJacques Vidrine #include <stdlib.h>
27248aee62SJacques Vidrine #include <string.h>
28248aee62SJacques Vidrine #include <unistd.h>
29248aee62SJacques Vidrine
30248aee62SJacques Vidrine int
main(int argc,char ** argv)31f4ac32deSDavid Malone main(int argc, char **argv)
32248aee62SJacques Vidrine {
33248aee62SJacques Vidrine char **list, **p, *bindname, *name, *type;
34248aee62SJacques Vidrine int lflag = 0, errflg = 0, bflag = 0, c;
35248aee62SJacques Vidrine void *context;
36248aee62SJacques Vidrine
37248aee62SJacques Vidrine while ((c = getopt(argc, argv, "lb")) != -1) {
38248aee62SJacques Vidrine switch (c) {
39248aee62SJacques Vidrine case 'l':
40248aee62SJacques Vidrine lflag = 1;
41248aee62SJacques Vidrine break;
42248aee62SJacques Vidrine case 'b':
43248aee62SJacques Vidrine bflag = 1;
44248aee62SJacques Vidrine break;
45248aee62SJacques Vidrine default:
46248aee62SJacques Vidrine errflg++;
47248aee62SJacques Vidrine break;
48248aee62SJacques Vidrine }
49248aee62SJacques Vidrine }
50248aee62SJacques Vidrine if (argc - optind != 2 || errflg) {
51d3974088SDag-Erling Smørgrav fprintf(stderr, "usage: hesinfo [-bl] name type\n");
52248aee62SJacques Vidrine fprintf(stderr, "\t-l selects long format\n");
53248aee62SJacques Vidrine fprintf(stderr, "\t-b also does hes_to_bind conversion\n");
54248aee62SJacques Vidrine exit(2);
55248aee62SJacques Vidrine }
56248aee62SJacques Vidrine name = argv[optind];
57248aee62SJacques Vidrine type = argv[optind + 1];
58248aee62SJacques Vidrine
59248aee62SJacques Vidrine if (hesiod_init(&context) < 0) {
60248aee62SJacques Vidrine if (errno == ENOEXEC)
61248aee62SJacques Vidrine warnx(
62248aee62SJacques Vidrine "hesiod_init: Invalid Hesiod configuration file.");
63248aee62SJacques Vidrine else
64248aee62SJacques Vidrine warn("hesiod_init");
65248aee62SJacques Vidrine }
66248aee62SJacques Vidrine /* Display bind name if requested. */
67248aee62SJacques Vidrine if (bflag) {
68248aee62SJacques Vidrine if (lflag)
69248aee62SJacques Vidrine printf("hes_to_bind(%s, %s) expands to\n", name, type);
70248aee62SJacques Vidrine bindname = hesiod_to_bind(context, name, type);
71248aee62SJacques Vidrine if (!bindname) {
72248aee62SJacques Vidrine if (lflag)
73248aee62SJacques Vidrine printf("nothing\n");
74248aee62SJacques Vidrine if (errno == ENOENT)
75248aee62SJacques Vidrine warnx("hesiod_to_bind: Unknown rhs-extension.");
76248aee62SJacques Vidrine else
77248aee62SJacques Vidrine warn("hesiod_to_bind");
78248aee62SJacques Vidrine exit(1);
79248aee62SJacques Vidrine }
80248aee62SJacques Vidrine printf("%s\n", bindname);
81248aee62SJacques Vidrine free(bindname);
82248aee62SJacques Vidrine if (lflag)
83248aee62SJacques Vidrine printf("which ");
84248aee62SJacques Vidrine }
85248aee62SJacques Vidrine if (lflag)
86248aee62SJacques Vidrine printf("resolves to\n");
87248aee62SJacques Vidrine
88248aee62SJacques Vidrine /* Do the hesiod resolve and check for errors. */
89248aee62SJacques Vidrine list = hesiod_resolve(context, name, type);
90248aee62SJacques Vidrine if (!list) {
91248aee62SJacques Vidrine if (lflag)
92248aee62SJacques Vidrine printf("nothing\n");
93248aee62SJacques Vidrine if (errno == ENOENT)
94248aee62SJacques Vidrine warnx("hesiod_resolve: Hesiod name not found.");
95248aee62SJacques Vidrine else
96248aee62SJacques Vidrine warn("hesiod_resolve");
97248aee62SJacques Vidrine exit(1);
98248aee62SJacques Vidrine }
99248aee62SJacques Vidrine /* Display the results. */
100248aee62SJacques Vidrine for (p = list; *p; p++)
101248aee62SJacques Vidrine printf("%s\n", *p);
102248aee62SJacques Vidrine
103248aee62SJacques Vidrine hesiod_free_list(context, list);
104248aee62SJacques Vidrine hesiod_end(context);
105248aee62SJacques Vidrine exit(0);
106248aee62SJacques Vidrine }
107