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