xref: /titanic_44/usr/src/lib/libadutils/common/addisc.h (revision 7a8a68f5e3efbaec1a375c2d50bd20b566631755)
1*7a8a68f5SJulian Pullen /*
2*7a8a68f5SJulian Pullen  * CDDL HEADER START
3*7a8a68f5SJulian Pullen  *
4*7a8a68f5SJulian Pullen  * The contents of this file are subject to the terms of the
5*7a8a68f5SJulian Pullen  * Common Development and Distribution License (the "License").
6*7a8a68f5SJulian Pullen  * You may not use this file except in compliance with the License.
7*7a8a68f5SJulian Pullen  *
8*7a8a68f5SJulian Pullen  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*7a8a68f5SJulian Pullen  * or http://www.opensolaris.org/os/licensing.
10*7a8a68f5SJulian Pullen  * See the License for the specific language governing permissions
11*7a8a68f5SJulian Pullen  * and limitations under the License.
12*7a8a68f5SJulian Pullen  *
13*7a8a68f5SJulian Pullen  * When distributing Covered Code, include this CDDL HEADER in each
14*7a8a68f5SJulian Pullen  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*7a8a68f5SJulian Pullen  * If applicable, add the following below this CDDL HEADER, with the
16*7a8a68f5SJulian Pullen  * fields enclosed by brackets "[]" replaced with your own identifying
17*7a8a68f5SJulian Pullen  * information: Portions Copyright [yyyy] [name of copyright owner]
18*7a8a68f5SJulian Pullen  *
19*7a8a68f5SJulian Pullen  * CDDL HEADER END
20*7a8a68f5SJulian Pullen  */
21*7a8a68f5SJulian Pullen 
22*7a8a68f5SJulian Pullen /*
23*7a8a68f5SJulian Pullen  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
24*7a8a68f5SJulian Pullen  * Use is subject to license terms.
25*7a8a68f5SJulian Pullen  */
26*7a8a68f5SJulian Pullen 
27*7a8a68f5SJulian Pullen #ifndef	_ADINFO_H
28*7a8a68f5SJulian Pullen #define	_ADINFO_H
29*7a8a68f5SJulian Pullen 
30*7a8a68f5SJulian Pullen #include "idmap_prot.h"
31*7a8a68f5SJulian Pullen 
32*7a8a68f5SJulian Pullen 
33*7a8a68f5SJulian Pullen #ifdef __cplusplus
34*7a8a68f5SJulian Pullen extern "C" {
35*7a8a68f5SJulian Pullen #endif
36*7a8a68f5SJulian Pullen 
37*7a8a68f5SJulian Pullen /*
38*7a8a68f5SJulian Pullen  * Maximum string SID size. 4 bytes for "S-1-", 15 for 2^48 (max authority),
39*7a8a68f5SJulian Pullen  * another '-', and ridcount (max 15) 10-digit RIDs plus '-' in between, plus
40*7a8a68f5SJulian Pullen  * a null.
41*7a8a68f5SJulian Pullen  */
42*7a8a68f5SJulian Pullen #define	MAXSTRSID		185
43*7a8a68f5SJulian Pullen #define	MAXDOMAINNAME		256
44*7a8a68f5SJulian Pullen 
45*7a8a68f5SJulian Pullen typedef struct ad_disc *ad_disc_t;
46*7a8a68f5SJulian Pullen 
47*7a8a68f5SJulian Pullen 
48*7a8a68f5SJulian Pullen typedef struct ad_disc_domains_in_forest {
49*7a8a68f5SJulian Pullen 	char domain[MAXDOMAINNAME];
50*7a8a68f5SJulian Pullen 	char sid[MAXSTRSID];
51*7a8a68f5SJulian Pullen 	int trusted;			/* This is not used by auto */
52*7a8a68f5SJulian Pullen 					/* discovery. It is provided so that */
53*7a8a68f5SJulian Pullen 					/* domains in a forest can be marked */
54*7a8a68f5SJulian Pullen 					/* as trusted. */
55*7a8a68f5SJulian Pullen } ad_disc_domainsinforest_t;
56*7a8a68f5SJulian Pullen 
57*7a8a68f5SJulian Pullen 
58*7a8a68f5SJulian Pullen typedef struct ad_disc_trusted_domains {
59*7a8a68f5SJulian Pullen 		char domain[MAXDOMAINNAME];
60*7a8a68f5SJulian Pullen 		int direction;
61*7a8a68f5SJulian Pullen } ad_disc_trusteddomains_t;
62*7a8a68f5SJulian Pullen 
63*7a8a68f5SJulian Pullen enum ad_disc_req {
64*7a8a68f5SJulian Pullen 		AD_DISC_PREFER_SITE = 0, /* Prefer Site specific version */
65*7a8a68f5SJulian Pullen 		AD_DISC_SITE_SPECIFIC,	/* Request Site specific version */
66*7a8a68f5SJulian Pullen 		AD_DISC_GLOBAL		/* Request global version */
67*7a8a68f5SJulian Pullen };
68*7a8a68f5SJulian Pullen 
69*7a8a68f5SJulian Pullen ad_disc_t ad_disc_init(void);
70*7a8a68f5SJulian Pullen 
71*7a8a68f5SJulian Pullen void ad_disc_fini(ad_disc_t);
72*7a8a68f5SJulian Pullen 
73*7a8a68f5SJulian Pullen /*
74*7a8a68f5SJulian Pullen  * The following routines auto discover the specific item
75*7a8a68f5SJulian Pullen  */
76*7a8a68f5SJulian Pullen char *
77*7a8a68f5SJulian Pullen ad_disc_get_DomainName(ad_disc_t ctx, boolean_t *auto_discovered);
78*7a8a68f5SJulian Pullen 
79*7a8a68f5SJulian Pullen idmap_ad_disc_ds_t *
80*7a8a68f5SJulian Pullen ad_disc_get_DomainController(ad_disc_t ctx,
81*7a8a68f5SJulian Pullen 		enum ad_disc_req req, boolean_t *auto_discovered);
82*7a8a68f5SJulian Pullen 
83*7a8a68f5SJulian Pullen char *
84*7a8a68f5SJulian Pullen ad_disc_get_SiteName(ad_disc_t ctx, boolean_t *auto_discovered);
85*7a8a68f5SJulian Pullen 
86*7a8a68f5SJulian Pullen char *
87*7a8a68f5SJulian Pullen ad_disc_get_ForestName(ad_disc_t ctx, boolean_t *auto_discovered);
88*7a8a68f5SJulian Pullen 
89*7a8a68f5SJulian Pullen idmap_ad_disc_ds_t *
90*7a8a68f5SJulian Pullen ad_disc_get_GlobalCatalog(ad_disc_t ctx, enum ad_disc_req,
91*7a8a68f5SJulian Pullen 				boolean_t *auto_discovered);
92*7a8a68f5SJulian Pullen 
93*7a8a68f5SJulian Pullen ad_disc_trusteddomains_t *
94*7a8a68f5SJulian Pullen ad_disc_get_TrustedDomains(ad_disc_t ctx,  boolean_t *auto_discovered);
95*7a8a68f5SJulian Pullen 
96*7a8a68f5SJulian Pullen ad_disc_domainsinforest_t *
97*7a8a68f5SJulian Pullen ad_disc_get_DomainsInForest(ad_disc_t ctx,  boolean_t *auto_discovered);
98*7a8a68f5SJulian Pullen 
99*7a8a68f5SJulian Pullen 
100*7a8a68f5SJulian Pullen /*
101*7a8a68f5SJulian Pullen  * The following routines over ride auto discovery with the
102*7a8a68f5SJulian Pullen  * specified values
103*7a8a68f5SJulian Pullen  */
104*7a8a68f5SJulian Pullen int
105*7a8a68f5SJulian Pullen ad_disc_set_DomainName(ad_disc_t ctx, const char *domainName);
106*7a8a68f5SJulian Pullen 
107*7a8a68f5SJulian Pullen int
108*7a8a68f5SJulian Pullen ad_disc_set_DomainController(ad_disc_t ctx,
109*7a8a68f5SJulian Pullen 		const idmap_ad_disc_ds_t *domainController);
110*7a8a68f5SJulian Pullen 
111*7a8a68f5SJulian Pullen int
112*7a8a68f5SJulian Pullen ad_disc_set_SiteName(ad_disc_t ctx, const char *siteName);
113*7a8a68f5SJulian Pullen 
114*7a8a68f5SJulian Pullen int
115*7a8a68f5SJulian Pullen ad_disc_set_ForestName(ad_disc_t ctx, const char *forestName);
116*7a8a68f5SJulian Pullen 
117*7a8a68f5SJulian Pullen int
118*7a8a68f5SJulian Pullen ad_disc_set_GlobalCatalog(ad_disc_t ctx,
119*7a8a68f5SJulian Pullen 		const idmap_ad_disc_ds_t *globalCatalog);
120*7a8a68f5SJulian Pullen 
121*7a8a68f5SJulian Pullen 
122*7a8a68f5SJulian Pullen /*
123*7a8a68f5SJulian Pullen  * This routine forces all auto discovery item to be recomputed
124*7a8a68f5SJulian Pullen  * on request
125*7a8a68f5SJulian Pullen  */
126*7a8a68f5SJulian Pullen void ad_disc_refresh(ad_disc_t);
127*7a8a68f5SJulian Pullen 
128*7a8a68f5SJulian Pullen /* This routine unsets all overridden values */
129*7a8a68f5SJulian Pullen int ad_disc_unset(ad_disc_t ctx);
130*7a8a68f5SJulian Pullen 
131*7a8a68f5SJulian Pullen /* This routine test for subnet changes */
132*7a8a68f5SJulian Pullen boolean_t ad_disc_SubnetChanged(ad_disc_t);
133*7a8a68f5SJulian Pullen 
134*7a8a68f5SJulian Pullen /* This routine returns the Time To Live for auto discovered items */
135*7a8a68f5SJulian Pullen int ad_disc_get_TTL(ad_disc_t);
136*7a8a68f5SJulian Pullen 
137*7a8a68f5SJulian Pullen int ad_disc_compare_ds(idmap_ad_disc_ds_t *ds1, idmap_ad_disc_ds_t *ds2);
138*7a8a68f5SJulian Pullen 
139*7a8a68f5SJulian Pullen int ad_disc_compare_trusteddomains(ad_disc_trusteddomains_t *td1,
140*7a8a68f5SJulian Pullen 		ad_disc_trusteddomains_t *td2);
141*7a8a68f5SJulian Pullen 
142*7a8a68f5SJulian Pullen int ad_disc_compare_domainsinforest(ad_disc_domainsinforest_t *td1,
143*7a8a68f5SJulian Pullen 		ad_disc_domainsinforest_t *td2);
144*7a8a68f5SJulian Pullen 
145*7a8a68f5SJulian Pullen #ifdef __cplusplus
146*7a8a68f5SJulian Pullen }
147*7a8a68f5SJulian Pullen #endif
148*7a8a68f5SJulian Pullen 
149*7a8a68f5SJulian Pullen #endif	/* _ADINFO_H */
150