xref: /titanic_51/usr/src/lib/libads/common/dsgetdc.h (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  * Declarations intentionally similar to the MSDN SDK file
18*b3700b07SGordon Ross  * winsdk/Include/DsGetDC.h
19*b3700b07SGordon Ross  */
20*b3700b07SGordon Ross 
21*b3700b07SGordon Ross 
22*b3700b07SGordon Ross #ifndef	_ADS_DSGETDC_H
23*b3700b07SGordon Ross #define	_ADS_DSGETDC_H
24*b3700b07SGordon Ross 
25*b3700b07SGordon Ross #include <sys/types.h>
26*b3700b07SGordon Ross #include <sys/uuid.h>
27*b3700b07SGordon Ross 
28*b3700b07SGordon Ross #ifdef	__cplusplus
29*b3700b07SGordon Ross extern "C" {
30*b3700b07SGordon Ross #endif
31*b3700b07SGordon Ross 
32*b3700b07SGordon Ross /*
33*b3700b07SGordon Ross  * Flags to passed to DsGetDcName
34*b3700b07SGordon Ross  */
35*b3700b07SGordon Ross 
36*b3700b07SGordon Ross #define	DS_FORCE_REDISCOVERY		0x00000001
37*b3700b07SGordon Ross 
38*b3700b07SGordon Ross #define	DS_DIRECTORY_SERVICE_REQUIRED	0x00000010
39*b3700b07SGordon Ross #define	DS_DIRECTORY_SERVICE_PREFERRED	0x00000020
40*b3700b07SGordon Ross #define	DS_GC_SERVER_REQUIRED		0x00000040
41*b3700b07SGordon Ross #define	DS_PDC_REQUIRED			0x00000080
42*b3700b07SGordon Ross #define	DS_BACKGROUND_ONLY		0x00000100
43*b3700b07SGordon Ross #define	DS_IP_REQUIRED			0x00000200
44*b3700b07SGordon Ross #define	DS_KDC_REQUIRED			0x00000400
45*b3700b07SGordon Ross #define	DS_TIMESERV_REQUIRED		0x00000800
46*b3700b07SGordon Ross #define	DS_WRITABLE_REQUIRED		0x00001000
47*b3700b07SGordon Ross #define	DS_GOOD_TIMESERV_PREFERRED	0x00002000
48*b3700b07SGordon Ross #define	DS_AVOID_SELF			0x00004000
49*b3700b07SGordon Ross #define	DS_ONLY_LDAP_NEEDED		0x00008000
50*b3700b07SGordon Ross 
51*b3700b07SGordon Ross 
52*b3700b07SGordon Ross #define	DS_IS_FLAT_NAME			0x00010000
53*b3700b07SGordon Ross #define	DS_IS_DNS_NAME			0x00020000
54*b3700b07SGordon Ross 
55*b3700b07SGordon Ross #define	DS_RETURN_DNS_NAME		0x40000000
56*b3700b07SGordon Ross #define	DS_RETURN_FLAT_NAME		0x80000000
57*b3700b07SGordon Ross 
58*b3700b07SGordon Ross /*
59*b3700b07SGordon Ross  * Structure returned from DsGetDcName
60*b3700b07SGordon Ross  * NB: Keep same as adspriv_dcinfo
61*b3700b07SGordon Ross  */
62*b3700b07SGordon Ross 
63*b3700b07SGordon Ross typedef struct _DOMAIN_CONTROLLER_INFO {
64*b3700b07SGordon Ross 	char *DomainControllerName;
65*b3700b07SGordon Ross 	char *DomainControllerAddress;
66*b3700b07SGordon Ross 	uint32_t DomainControllerAddressType;
67*b3700b07SGordon Ross 	uuid_t DomainGuid;
68*b3700b07SGordon Ross 	char *DomainName;
69*b3700b07SGordon Ross 	char *DnsForestName;
70*b3700b07SGordon Ross 	uint32_t Flags;
71*b3700b07SGordon Ross 	char *DcSiteName;
72*b3700b07SGordon Ross 	char *ClientSiteName;
73*b3700b07SGordon Ross 	uint8_t _sockaddr[256];
74*b3700b07SGordon Ross } DOMAIN_CONTROLLER_INFO, *PDOMAIN_CONTROLLER_INFO;
75*b3700b07SGordon Ross 
76*b3700b07SGordon Ross /*
77*b3700b07SGordon Ross  * Values for DomainControllerAddressType
78*b3700b07SGordon Ross  */
79*b3700b07SGordon Ross 
80*b3700b07SGordon Ross #define	DS_INET_ADDRESS		1
81*b3700b07SGordon Ross #define	DS_NETBIOS_ADDRESS	2
82*b3700b07SGordon Ross 
83*b3700b07SGordon Ross /*
84*b3700b07SGordon Ross  * Values for returned Flags
85*b3700b07SGordon Ross  */
86*b3700b07SGordon Ross 
87*b3700b07SGordon Ross #define	DS_PDC_FLAG		0x00000001	/* DC is PDC of Domain */
88*b3700b07SGordon Ross #define	DS_GC_FLAG		0x00000004	/* DC is a GC of forest */
89*b3700b07SGordon Ross #define	DS_LDAP_FLAG		0x00000008	/* supports an LDAP server */
90*b3700b07SGordon Ross #define	DS_DS_FLAG		0x00000010	/* supports a DS and is a */
91*b3700b07SGordon Ross 						/*   Domain Controller */
92*b3700b07SGordon Ross #define	DS_KDC_FLAG		0x00000020	/* is running KDC service */
93*b3700b07SGordon Ross #define	DS_TIMESERV_FLAG	0x00000040	/* is running time service */
94*b3700b07SGordon Ross #define	DS_CLOSEST_FLAG		0x00000080	/* DC is in closest site */
95*b3700b07SGordon Ross 						/*   to the client */
96*b3700b07SGordon Ross #define	DS_WRITABLE_FLAG	0x00000100	/* DC has a writable DS */
97*b3700b07SGordon Ross #define	DS_GOOD_TIMESERV_FLAG	0x00000200	/* is running time service */
98*b3700b07SGordon Ross 						/* (and has clock hardware) */
99*b3700b07SGordon Ross #define	DS_NDNC_FLAG		0x00000400	/* DomainName is non-domain */
100*b3700b07SGordon Ross 						/* NC serviced by the */
101*b3700b07SGordon Ross 						/* LDAP server */
102*b3700b07SGordon Ross #define	DS_PING_FLAGS		0x0000FFFF	/* Flags returned on ping */
103*b3700b07SGordon Ross 
104*b3700b07SGordon Ross #define	DS_DNS_CONTROLLER_FLAG	0x20000000	/* DC Name is a DNS name */
105*b3700b07SGordon Ross #define	DS_DNS_DOMAIN_FLAG	0x40000000	/* DomainName is a DNS name */
106*b3700b07SGordon Ross #define	DS_DNS_FOREST_FLAG	0x80000000	/* ForestName is a DNS name */
107*b3700b07SGordon Ross 
108*b3700b07SGordon Ross 
109*b3700b07SGordon Ross /*
110*b3700b07SGordon Ross  * Function Prototypes
111*b3700b07SGordon Ross  */
112*b3700b07SGordon Ross 
113*b3700b07SGordon Ross /* Offial API.  Returns an NT error number. */
114*b3700b07SGordon Ross extern int
115*b3700b07SGordon Ross DsGetDcName(const char *ComputerName,
116*b3700b07SGordon Ross     const char *DomainName, const struct uuid *DomainGuid,
117*b3700b07SGordon Ross     const char *SiteName, uint32_t Flags,
118*b3700b07SGordon Ross     DOMAIN_CONTROLLER_INFO **dcinfo);
119*b3700b07SGordon Ross 
120*b3700b07SGordon Ross /* internal version of above - returns a detailed NT status */
121*b3700b07SGordon Ross extern uint32_t
122*b3700b07SGordon Ross _DsGetDcName(const char *ComputerName,
123*b3700b07SGordon Ross     const char *DomainName, const struct uuid *DomainGuid,
124*b3700b07SGordon Ross     const char *SiteName, uint32_t Flags,
125*b3700b07SGordon Ross     DOMAIN_CONTROLLER_INFO **dcinfo);
126*b3700b07SGordon Ross 
127*b3700b07SGordon Ross extern int
128*b3700b07SGordon Ross DsGetSiteName(
129*b3700b07SGordon Ross     const char *ComputerName,
130*b3700b07SGordon Ross     char **SiteName);
131*b3700b07SGordon Ross 
132*b3700b07SGordon Ross /*
133*b3700b07SGordon Ross  * XXX: Others from DsGetDc.h we may want later:
134*b3700b07SGordon Ross  * DsValidateSubnetName()
135*b3700b07SGordon Ross  * DsAddressToSiteNames()
136*b3700b07SGordon Ross  * DsAddressToSiteNamesEx()
137*b3700b07SGordon Ross  * DsEnumerateDomainTrusts()
138*b3700b07SGordon Ross  * DsGetForestTrustInformation()
139*b3700b07SGordon Ross  * DsGetDcSiteCoverage()
140*b3700b07SGordon Ross  * DsDeregisterDnsHostRecords()
141*b3700b07SGordon Ross  * DsGetDcOpen(), DsGetDcNext(), DsGetDcClose()
142*b3700b07SGordon Ross  */
143*b3700b07SGordon Ross 
144*b3700b07SGordon Ross /*
145*b3700b07SGordon Ross  * Until we can easily allocate a DC Info as one big hunk.
146*b3700b07SGordon Ross  * This will free a DC Info returned by DsGetDcName().
147*b3700b07SGordon Ross  */
148*b3700b07SGordon Ross extern void
149*b3700b07SGordon Ross DsFreeDcInfo(DOMAIN_CONTROLLER_INFO *);
150*b3700b07SGordon Ross 
151*b3700b07SGordon Ross /*
152*b3700b07SGordon Ross  * Internal function to force DC Rediscovery.
153*b3700b07SGordon Ross  */
154*b3700b07SGordon Ross extern int
155*b3700b07SGordon Ross _DsForceRediscovery(char *domain, int flags);
156*b3700b07SGordon Ross 
157*b3700b07SGordon Ross #ifdef	__cplusplus
158*b3700b07SGordon Ross }
159*b3700b07SGordon Ross #endif
160*b3700b07SGordon Ross 
161*b3700b07SGordon Ross #endif	/* _ADS_DSGETDC_H */
162