xref: /titanic_51/usr/src/lib/libadutils/common/addisc.h (revision b3700b074e637f8c6991b70754c88a2cfffb246b)
17a8a68f5SJulian Pullen /*
27a8a68f5SJulian Pullen  * CDDL HEADER START
37a8a68f5SJulian Pullen  *
47a8a68f5SJulian Pullen  * The contents of this file are subject to the terms of the
57a8a68f5SJulian Pullen  * Common Development and Distribution License (the "License").
67a8a68f5SJulian Pullen  * You may not use this file except in compliance with the License.
77a8a68f5SJulian Pullen  *
87a8a68f5SJulian Pullen  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
97a8a68f5SJulian Pullen  * or http://www.opensolaris.org/os/licensing.
107a8a68f5SJulian Pullen  * See the License for the specific language governing permissions
117a8a68f5SJulian Pullen  * and limitations under the License.
127a8a68f5SJulian Pullen  *
137a8a68f5SJulian Pullen  * When distributing Covered Code, include this CDDL HEADER in each
147a8a68f5SJulian Pullen  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
157a8a68f5SJulian Pullen  * If applicable, add the following below this CDDL HEADER, with the
167a8a68f5SJulian Pullen  * fields enclosed by brackets "[]" replaced with your own identifying
177a8a68f5SJulian Pullen  * information: Portions Copyright [yyyy] [name of copyright owner]
187a8a68f5SJulian Pullen  *
197a8a68f5SJulian Pullen  * CDDL HEADER END
207a8a68f5SJulian Pullen  */
217a8a68f5SJulian Pullen 
227a8a68f5SJulian Pullen /*
23148c5f43SAlan Wright  * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
24*b3700b07SGordon Ross  * Copyright 2014 Nexenta Systems, Inc.  All rights reserved.
257a8a68f5SJulian Pullen  */
267a8a68f5SJulian Pullen 
277a8a68f5SJulian Pullen #ifndef	_ADINFO_H
287a8a68f5SJulian Pullen #define	_ADINFO_H
297a8a68f5SJulian Pullen 
30*b3700b07SGordon Ross #include <sys/socket.h>
31*b3700b07SGordon Ross #include <sys/uuid.h>
32148c5f43SAlan Wright #include "libadutils.h"
337a8a68f5SJulian Pullen 
347a8a68f5SJulian Pullen 
357a8a68f5SJulian Pullen #ifdef __cplusplus
367a8a68f5SJulian Pullen extern "C" {
377a8a68f5SJulian Pullen #endif
387a8a68f5SJulian Pullen 
397a8a68f5SJulian Pullen /*
407a8a68f5SJulian Pullen  * Maximum string SID size. 4 bytes for "S-1-", 15 for 2^48 (max authority),
417a8a68f5SJulian Pullen  * another '-', and ridcount (max 15) 10-digit RIDs plus '-' in between, plus
427a8a68f5SJulian Pullen  * a null.
437a8a68f5SJulian Pullen  */
447a8a68f5SJulian Pullen #define	MAXSTRSID		185
457a8a68f5SJulian Pullen #define	MAXDOMAINNAME		256
46*b3700b07SGordon Ross #define	AD_DISC_MAXHOSTNAME	256
477a8a68f5SJulian Pullen 
487a8a68f5SJulian Pullen typedef struct ad_disc *ad_disc_t;
497a8a68f5SJulian Pullen 
507a8a68f5SJulian Pullen 
517a8a68f5SJulian Pullen typedef struct ad_disc_domains_in_forest {
527a8a68f5SJulian Pullen 	char domain[MAXDOMAINNAME];
537a8a68f5SJulian Pullen 	char sid[MAXSTRSID];
547a8a68f5SJulian Pullen 	int trusted;			/* This is not used by auto */
557a8a68f5SJulian Pullen 					/* discovery. It is provided so that */
567a8a68f5SJulian Pullen 					/* domains in a forest can be marked */
577a8a68f5SJulian Pullen 					/* as trusted. */
587a8a68f5SJulian Pullen } ad_disc_domainsinforest_t;
597a8a68f5SJulian Pullen 
607a8a68f5SJulian Pullen 
617a8a68f5SJulian Pullen typedef struct ad_disc_trusted_domains {
627a8a68f5SJulian Pullen 		char domain[MAXDOMAINNAME];
637a8a68f5SJulian Pullen 		int direction;
647a8a68f5SJulian Pullen } ad_disc_trusteddomains_t;
657a8a68f5SJulian Pullen 
667a8a68f5SJulian Pullen enum ad_disc_req {
677a8a68f5SJulian Pullen 		AD_DISC_PREFER_SITE = 0, /* Prefer Site specific version */
687a8a68f5SJulian Pullen 		AD_DISC_SITE_SPECIFIC,	/* Request Site specific version */
697a8a68f5SJulian Pullen 		AD_DISC_GLOBAL		/* Request global version */
707a8a68f5SJulian Pullen };
717a8a68f5SJulian Pullen 
72*b3700b07SGordon Ross /*
73*b3700b07SGordon Ross  * First four members of this are like idmap_ad_disc_ds_t
74*b3700b07SGordon Ross  * (for compatiblity) until that can be eliminated.
75*b3700b07SGordon Ross  * See PROP_DOMAIN_CONTROLLER in idmapd/server.c
76*b3700b07SGordon Ross  */
77*b3700b07SGordon Ross typedef struct ad_disc_ds {
78*b3700b07SGordon Ross 	/* Keep these first four in sync with idmap_ad_disc_ds_t */
79*b3700b07SGordon Ross 	int port;
80*b3700b07SGordon Ross 	int priority;
81*b3700b07SGordon Ross 	int weight;
82*b3700b07SGordon Ross 	char host[AD_DISC_MAXHOSTNAME];
83*b3700b07SGordon Ross 	/* Members after this are private and free to change. */
84*b3700b07SGordon Ross 	char site[AD_DISC_MAXHOSTNAME];
85*b3700b07SGordon Ross 	struct sockaddr_storage addr;
86*b3700b07SGordon Ross 	uint32_t flags;
87*b3700b07SGordon Ross 	uint32_t ttl;
88*b3700b07SGordon Ross } ad_disc_ds_t;
89*b3700b07SGordon Ross 
907a8a68f5SJulian Pullen ad_disc_t ad_disc_init(void);
917a8a68f5SJulian Pullen 
927a8a68f5SJulian Pullen void ad_disc_fini(ad_disc_t);
937a8a68f5SJulian Pullen 
947a8a68f5SJulian Pullen /*
957a8a68f5SJulian Pullen  * The following routines auto discover the specific item
967a8a68f5SJulian Pullen  */
977a8a68f5SJulian Pullen char *
987a8a68f5SJulian Pullen ad_disc_get_DomainName(ad_disc_t ctx, boolean_t *auto_discovered);
997a8a68f5SJulian Pullen 
100*b3700b07SGordon Ross uchar_t *
101*b3700b07SGordon Ross ad_disc_get_DomainGUID(ad_disc_t ctx, boolean_t *auto_discovered);
102*b3700b07SGordon Ross 
103*b3700b07SGordon Ross ad_disc_ds_t *
1047a8a68f5SJulian Pullen ad_disc_get_DomainController(ad_disc_t ctx,
1057a8a68f5SJulian Pullen 		enum ad_disc_req req, boolean_t *auto_discovered);
1067a8a68f5SJulian Pullen 
107*b3700b07SGordon Ross ad_disc_ds_t *
108*b3700b07SGordon Ross ad_disc_get_PreferredDC(ad_disc_t ctx, boolean_t *auto_discovered);
109*b3700b07SGordon Ross 
1107a8a68f5SJulian Pullen char *
1117a8a68f5SJulian Pullen ad_disc_get_SiteName(ad_disc_t ctx, boolean_t *auto_discovered);
1127a8a68f5SJulian Pullen 
1137a8a68f5SJulian Pullen char *
1147a8a68f5SJulian Pullen ad_disc_get_ForestName(ad_disc_t ctx, boolean_t *auto_discovered);
1157a8a68f5SJulian Pullen 
116*b3700b07SGordon Ross ad_disc_ds_t *
1177a8a68f5SJulian Pullen ad_disc_get_GlobalCatalog(ad_disc_t ctx, enum ad_disc_req,
1187a8a68f5SJulian Pullen 				boolean_t *auto_discovered);
1197a8a68f5SJulian Pullen 
1207a8a68f5SJulian Pullen ad_disc_trusteddomains_t *
1217a8a68f5SJulian Pullen ad_disc_get_TrustedDomains(ad_disc_t ctx,  boolean_t *auto_discovered);
1227a8a68f5SJulian Pullen 
1237a8a68f5SJulian Pullen ad_disc_domainsinforest_t *
1247a8a68f5SJulian Pullen ad_disc_get_DomainsInForest(ad_disc_t ctx,  boolean_t *auto_discovered);
1257a8a68f5SJulian Pullen 
1267a8a68f5SJulian Pullen 
1277a8a68f5SJulian Pullen /*
1287a8a68f5SJulian Pullen  * The following routines over ride auto discovery with the
1297a8a68f5SJulian Pullen  * specified values
1307a8a68f5SJulian Pullen  */
1317a8a68f5SJulian Pullen int
1327a8a68f5SJulian Pullen ad_disc_set_DomainName(ad_disc_t ctx, const char *domainName);
1337a8a68f5SJulian Pullen 
1347a8a68f5SJulian Pullen int
135*b3700b07SGordon Ross ad_disc_set_DomainGUID(ad_disc_t ctx, uchar_t *u);
136*b3700b07SGordon Ross 
137*b3700b07SGordon Ross int
1387a8a68f5SJulian Pullen ad_disc_set_DomainController(ad_disc_t ctx,
139*b3700b07SGordon Ross 		const ad_disc_ds_t *domainController);
140*b3700b07SGordon Ross int
141*b3700b07SGordon Ross ad_disc_set_PreferredDC(ad_disc_t ctx, const ad_disc_ds_t *dc);
1427a8a68f5SJulian Pullen 
1437a8a68f5SJulian Pullen int
1447a8a68f5SJulian Pullen ad_disc_set_SiteName(ad_disc_t ctx, const char *siteName);
1457a8a68f5SJulian Pullen 
1467a8a68f5SJulian Pullen int
1477a8a68f5SJulian Pullen ad_disc_set_ForestName(ad_disc_t ctx, const char *forestName);
1487a8a68f5SJulian Pullen 
1497a8a68f5SJulian Pullen int
1507a8a68f5SJulian Pullen ad_disc_set_GlobalCatalog(ad_disc_t ctx,
151*b3700b07SGordon Ross 		const ad_disc_ds_t *globalCatalog);
1527a8a68f5SJulian Pullen 
153*b3700b07SGordon Ross /*
154*b3700b07SGordon Ross  * This function sets a FILE * on which this library will write
155*b3700b07SGordon Ross  * progress information during DC Location.
156*b3700b07SGordon Ross  */
157*b3700b07SGordon Ross void
158*b3700b07SGordon Ross ad_disc_set_StatusFP(ad_disc_t ctx, struct __FILE_TAG *);
159*b3700b07SGordon Ross 
160*b3700b07SGordon Ross int
161*b3700b07SGordon Ross ad_disc_getnameinfo(char *, int, struct sockaddr_storage *);
1627a8a68f5SJulian Pullen 
1637a8a68f5SJulian Pullen /*
1647a8a68f5SJulian Pullen  * This routine forces all auto discovery item to be recomputed
1657a8a68f5SJulian Pullen  * on request
1667a8a68f5SJulian Pullen  */
1677a8a68f5SJulian Pullen void ad_disc_refresh(ad_disc_t);
1687a8a68f5SJulian Pullen 
169c5866007SKeyur Desai /*
170c5866007SKeyur Desai  * This routine marks the end of a discovery cycle and sets
171c5866007SKeyur Desai  * the sanity limits on the time before the next cycle.
172c5866007SKeyur Desai  */
173c5866007SKeyur Desai void ad_disc_done(ad_disc_t);
174c5866007SKeyur Desai 
1757a8a68f5SJulian Pullen /* This routine unsets all overridden values */
1767a8a68f5SJulian Pullen int ad_disc_unset(ad_disc_t ctx);
1777a8a68f5SJulian Pullen 
1787a8a68f5SJulian Pullen /* This routine test for subnet changes */
1797a8a68f5SJulian Pullen boolean_t ad_disc_SubnetChanged(ad_disc_t);
1807a8a68f5SJulian Pullen 
1817a8a68f5SJulian Pullen /* This routine returns the Time To Live for auto discovered items */
1827a8a68f5SJulian Pullen int ad_disc_get_TTL(ad_disc_t);
1837a8a68f5SJulian Pullen 
184*b3700b07SGordon Ross int ad_disc_compare_uuid(uuid_t *u1, uuid_t *u2);
185*b3700b07SGordon Ross 
186*b3700b07SGordon Ross int ad_disc_compare_ds(ad_disc_ds_t *ds1, ad_disc_ds_t *ds2);
1877a8a68f5SJulian Pullen 
1887a8a68f5SJulian Pullen int ad_disc_compare_trusteddomains(ad_disc_trusteddomains_t *td1,
1897a8a68f5SJulian Pullen 		ad_disc_trusteddomains_t *td2);
1907a8a68f5SJulian Pullen 
1917a8a68f5SJulian Pullen int ad_disc_compare_domainsinforest(ad_disc_domainsinforest_t *td1,
1927a8a68f5SJulian Pullen 		ad_disc_domainsinforest_t *td2);
1937a8a68f5SJulian Pullen 
1947a8a68f5SJulian Pullen #ifdef __cplusplus
1957a8a68f5SJulian Pullen }
1967a8a68f5SJulian Pullen #endif
1977a8a68f5SJulian Pullen 
1987a8a68f5SJulian Pullen #endif	/* _ADINFO_H */
199