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