xref: /titanic_50/usr/src/cmd/idmap/test-getdc/getdc_main.c (revision b3700b074e637f8c6991b70754c88a2cfffb246b)
1*b3700b07SGordon Ross /*
2*b3700b07SGordon Ross  * This file and its contents are supplied under the terms of the
3*b3700b07SGordon Ross  * Common Development and Distribution License ("CDDL"), version 1.0.
4*b3700b07SGordon Ross  * You may only use this file in accordance with the terms of version
5*b3700b07SGordon Ross  * 1.0 of the CDDL.
6*b3700b07SGordon Ross  *
7*b3700b07SGordon Ross  * A full copy of the text of the CDDL should have accompanied this
8*b3700b07SGordon Ross  * source.  A copy of the CDDL is also available via the Internet at
9*b3700b07SGordon Ross  * http://www.illumos.org/license/CDDL.
10*b3700b07SGordon Ross  */
11*b3700b07SGordon Ross 
12*b3700b07SGordon Ross /*
13*b3700b07SGordon Ross  * Copyright 2014 Nexenta Systems, Inc.  All rights reserved.
14*b3700b07SGordon Ross  */
15*b3700b07SGordon Ross 
16*b3700b07SGordon Ross 
17*b3700b07SGordon Ross #include <sys/note.h>
18*b3700b07SGordon Ross #include <stdarg.h>
19*b3700b07SGordon Ross #include <stdio.h>
20*b3700b07SGordon Ross #include <addisc.h>
21*b3700b07SGordon Ross #include <netinet/in.h>
22*b3700b07SGordon Ross #include <arpa/inet.h>
23*b3700b07SGordon Ross 
24*b3700b07SGordon Ross int debug;
25*b3700b07SGordon Ross char *domainname = NULL;
26*b3700b07SGordon Ross 
27*b3700b07SGordon Ross void print_ds(ad_disc_ds_t *);
28*b3700b07SGordon Ross void mylogger(int pri, const char *format, ...);
29*b3700b07SGordon Ross 
30*b3700b07SGordon Ross int
main(int argc,char * argv[])31*b3700b07SGordon Ross main(int argc, char *argv[])
32*b3700b07SGordon Ross {
33*b3700b07SGordon Ross 	ad_disc_t ad_ctx = NULL;
34*b3700b07SGordon Ross 	boolean_t autodisc;
35*b3700b07SGordon Ross 	ad_disc_ds_t *dc, *gc;
36*b3700b07SGordon Ross 	char *s;
37*b3700b07SGordon Ross 	int c;
38*b3700b07SGordon Ross 
39*b3700b07SGordon Ross 	while ((c = getopt(argc, argv, "d")) != -1) {
40*b3700b07SGordon Ross 		switch (c) {
41*b3700b07SGordon Ross 		case '?':
42*b3700b07SGordon Ross 			(void) fprintf(stderr, "bad option: -%c\n", optopt);
43*b3700b07SGordon Ross 			return (1);
44*b3700b07SGordon Ross 		case 'd':
45*b3700b07SGordon Ross 			debug++;
46*b3700b07SGordon Ross 			break;
47*b3700b07SGordon Ross 		}
48*b3700b07SGordon Ross 	}
49*b3700b07SGordon Ross 
50*b3700b07SGordon Ross 	if (optind < argc)
51*b3700b07SGordon Ross 		domainname = argv[optind];
52*b3700b07SGordon Ross 
53*b3700b07SGordon Ross 	adutils_set_logger(mylogger);
54*b3700b07SGordon Ross 	adutils_set_debug(AD_DEBUG_ALL, debug);
55*b3700b07SGordon Ross 
56*b3700b07SGordon Ross 	ad_ctx = ad_disc_init();
57*b3700b07SGordon Ross 	ad_disc_set_StatusFP(ad_ctx, stdout);
58*b3700b07SGordon Ross 
59*b3700b07SGordon Ross 	if (domainname)
60*b3700b07SGordon Ross 		(void) ad_disc_set_DomainName(ad_ctx, domainname);
61*b3700b07SGordon Ross 
62*b3700b07SGordon Ross 	ad_disc_refresh(ad_ctx);
63*b3700b07SGordon Ross 
64*b3700b07SGordon Ross 	dc = ad_disc_get_DomainController(ad_ctx,
65*b3700b07SGordon Ross 	    AD_DISC_PREFER_SITE, &autodisc);
66*b3700b07SGordon Ross 	if (dc == NULL) {
67*b3700b07SGordon Ross 		(void) printf("getdc failed\n");
68*b3700b07SGordon Ross 		return (1);
69*b3700b07SGordon Ross 	}
70*b3700b07SGordon Ross 	(void) printf("Found a DC:\n");
71*b3700b07SGordon Ross 	print_ds(dc);
72*b3700b07SGordon Ross 	free(dc);
73*b3700b07SGordon Ross 
74*b3700b07SGordon Ross 	s = ad_disc_get_ForestName(ad_ctx, NULL);
75*b3700b07SGordon Ross 	(void) printf("Forest: %s\n", s);
76*b3700b07SGordon Ross 	free(s);
77*b3700b07SGordon Ross 
78*b3700b07SGordon Ross 	s = ad_disc_get_SiteName(ad_ctx, NULL);
79*b3700b07SGordon Ross 	(void) printf("Site: %s\n", s);
80*b3700b07SGordon Ross 	free(s);
81*b3700b07SGordon Ross 
82*b3700b07SGordon Ross 	gc = ad_disc_get_GlobalCatalog(ad_ctx,
83*b3700b07SGordon Ross 	    AD_DISC_PREFER_SITE, &autodisc);
84*b3700b07SGordon Ross 	if (gc != NULL) {
85*b3700b07SGordon Ross 		(void) printf("Found a GC:\n");
86*b3700b07SGordon Ross 		print_ds(gc);
87*b3700b07SGordon Ross 		free(gc);
88*b3700b07SGordon Ross 	}
89*b3700b07SGordon Ross 
90*b3700b07SGordon Ross 	ad_disc_done(ad_ctx);
91*b3700b07SGordon Ross 	ad_disc_fini(ad_ctx);
92*b3700b07SGordon Ross 	ad_ctx = NULL;
93*b3700b07SGordon Ross 
94*b3700b07SGordon Ross 	return (0);
95*b3700b07SGordon Ross }
96*b3700b07SGordon Ross 
97*b3700b07SGordon Ross void
print_ds(ad_disc_ds_t * ds)98*b3700b07SGordon Ross print_ds(ad_disc_ds_t *ds)
99*b3700b07SGordon Ross {
100*b3700b07SGordon Ross 	char buf[64];
101*b3700b07SGordon Ross 
102*b3700b07SGordon Ross 	for (; ds->host[0] != '\0'; ds++) {
103*b3700b07SGordon Ross 		const char *p;
104*b3700b07SGordon Ross 
105*b3700b07SGordon Ross 		(void) printf("Name: %s\n", ds->host);
106*b3700b07SGordon Ross 		(void) printf(" flags: 0x%X\n", ds->flags);
107*b3700b07SGordon Ross 		if (ds->addr.ss_family == AF_INET) {
108*b3700b07SGordon Ross 			struct sockaddr_in *sin;
109*b3700b07SGordon Ross 			sin = (struct sockaddr_in *)&ds->addr;
110*b3700b07SGordon Ross 			p = inet_ntop(AF_INET, &sin->sin_addr,
111*b3700b07SGordon Ross 			    buf, sizeof (buf));
112*b3700b07SGordon Ross 			if (p == NULL)
113*b3700b07SGordon Ross 				p = "?";
114*b3700b07SGordon Ross 			(void) printf(" A %s %d\n", p, ds->port);
115*b3700b07SGordon Ross 		}
116*b3700b07SGordon Ross 		if (ds->addr.ss_family == AF_INET6) {
117*b3700b07SGordon Ross 			struct sockaddr_in6 *sin6;
118*b3700b07SGordon Ross 			sin6 = (struct sockaddr_in6 *)&ds->addr;
119*b3700b07SGordon Ross 			p = inet_ntop(AF_INET6, &sin6->sin6_addr,
120*b3700b07SGordon Ross 			    buf, sizeof (buf));
121*b3700b07SGordon Ross 			if (p == NULL)
122*b3700b07SGordon Ross 				p = "?";
123*b3700b07SGordon Ross 			(void) printf(" AAAA %s %d\n", p, ds->port);
124*b3700b07SGordon Ross 		}
125*b3700b07SGordon Ross 	}
126*b3700b07SGordon Ross }
127*b3700b07SGordon Ross 
128*b3700b07SGordon Ross /* printflike */
129*b3700b07SGordon Ross void
mylogger(int pri,const char * format,...)130*b3700b07SGordon Ross mylogger(int pri, const char *format, ...)
131*b3700b07SGordon Ross {
132*b3700b07SGordon Ross 	_NOTE(ARGUNUSED(pri))
133*b3700b07SGordon Ross 	va_list args;
134*b3700b07SGordon Ross 
135*b3700b07SGordon Ross 	va_start(args, format);
136*b3700b07SGordon Ross 	(void) vfprintf(stderr, format, args);
137*b3700b07SGordon Ross 	(void) fprintf(stderr, "\n");
138*b3700b07SGordon Ross 	va_end(args);
139*b3700b07SGordon Ross }
140*b3700b07SGordon Ross 
141*b3700b07SGordon Ross /*
142*b3700b07SGordon Ross  * This is a unit-test program.  Always enable libumem debugging.
143*b3700b07SGordon Ross  */
144*b3700b07SGordon Ross const char *
_umem_debug_init(void)145*b3700b07SGordon Ross _umem_debug_init(void)
146*b3700b07SGordon Ross {
147*b3700b07SGordon Ross 	return ("default,verbose"); /* $UMEM_DEBUG setting */
148*b3700b07SGordon Ross }
149*b3700b07SGordon Ross 
150*b3700b07SGordon Ross const char *
_umem_logging_init(void)151*b3700b07SGordon Ross _umem_logging_init(void)
152*b3700b07SGordon Ross {
153*b3700b07SGordon Ross 	return ("fail,contents"); /* $UMEM_LOGGING setting */
154*b3700b07SGordon Ross }
155