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