1*8d7e4166Sjose borrego /*
2*8d7e4166Sjose borrego  * CDDL HEADER START
3*8d7e4166Sjose borrego  *
4*8d7e4166Sjose borrego  * The contents of this file are subject to the terms of the
5*8d7e4166Sjose borrego  * Common Development and Distribution License (the "License").
6*8d7e4166Sjose borrego  * You may not use this file except in compliance with the License.
7*8d7e4166Sjose borrego  *
8*8d7e4166Sjose borrego  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*8d7e4166Sjose borrego  * or http://www.opensolaris.org/os/licensing.
10*8d7e4166Sjose borrego  * See the License for the specific language governing permissions
11*8d7e4166Sjose borrego  * and limitations under the License.
12*8d7e4166Sjose borrego  *
13*8d7e4166Sjose borrego  * When distributing Covered Code, include this CDDL HEADER in each
14*8d7e4166Sjose borrego  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*8d7e4166Sjose borrego  * If applicable, add the following below this CDDL HEADER, with the
16*8d7e4166Sjose borrego  * fields enclosed by brackets "[]" replaced with your own identifying
17*8d7e4166Sjose borrego  * information: Portions Copyright [yyyy] [name of copyright owner]
18*8d7e4166Sjose borrego  *
19*8d7e4166Sjose borrego  * CDDL HEADER END
20*8d7e4166Sjose borrego  */
21*8d7e4166Sjose borrego /*
22*8d7e4166Sjose borrego  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
23*8d7e4166Sjose borrego  * Use is subject to license terms.
24*8d7e4166Sjose borrego  */
25*8d7e4166Sjose borrego 
26*8d7e4166Sjose borrego #ifndef _SMBSRV_SAMLIB_H
27*8d7e4166Sjose borrego #define	_SMBSRV_SAMLIB_H
28*8d7e4166Sjose borrego 
29*8d7e4166Sjose borrego /*
30*8d7e4166Sjose borrego  * Prototypes for the SAM library and RPC client side library interface.
31*8d7e4166Sjose borrego  * There are two levels of interface defined here: sam_xxx and samr_xxx.
32*8d7e4166Sjose borrego  * The sam_xxx functions provide a high level interface which make
33*8d7e4166Sjose borrego  * multiple RPC calls and do all the work necessary to obtain and return
34*8d7e4166Sjose borrego  * the requested information. The samr_xxx functions provide a low level
35*8d7e4166Sjose borrego  * interface in which each function maps to a single underlying RPC.
36*8d7e4166Sjose borrego  */
37*8d7e4166Sjose borrego 
38*8d7e4166Sjose borrego #include <smbsrv/ndl/samrpc.ndl>
39*8d7e4166Sjose borrego 
40*8d7e4166Sjose borrego 
41*8d7e4166Sjose borrego #ifdef __cplusplus
42*8d7e4166Sjose borrego extern "C" {
43*8d7e4166Sjose borrego #endif
44*8d7e4166Sjose borrego 
45*8d7e4166Sjose borrego /*
46*8d7e4166Sjose borrego  * Account Control Flags
47*8d7e4166Sjose borrego  * Use in SAMR Query Display Information RPC
48*8d7e4166Sjose borrego  */
49*8d7e4166Sjose borrego #define	ACF_DISABLED	0x001	/* account disable */
50*8d7e4166Sjose borrego #define	ACF_HOMEDIRREQ	0x002	/* home dir required */
51*8d7e4166Sjose borrego #define	ACF_PWDNOTREQ	0x004	/* password not required */
52*8d7e4166Sjose borrego #define	ACF_TEMPDUP	0x008	/* temp dup account */
53*8d7e4166Sjose borrego #define	ACF_NORMUSER	0x010	/* normal user */
54*8d7e4166Sjose borrego #define	ACF_MNS		0x020	/* MNS account */
55*8d7e4166Sjose borrego #define	ACF_DOMTRUST	0x040	/* Domain trust acct */
56*8d7e4166Sjose borrego #define	ACF_WSTRUST	0x080	/* WKST trust acct */
57*8d7e4166Sjose borrego #define	ACF_SVRTRUST	0x100	/* Server trust acct */
58*8d7e4166Sjose borrego #define	ACF_PWDNOEXP	0x200	/* password no expire */
59*8d7e4166Sjose borrego #define	ACF_AUTOLOCK	0x400	/* acct auto lock */
60*8d7e4166Sjose borrego 
61*8d7e4166Sjose borrego /*
62*8d7e4166Sjose borrego  * samlib.c
63*8d7e4166Sjose borrego  */
64*8d7e4166Sjose borrego int sam_lookup_user_info(char *server, char *domain_name, char *username,
65*8d7e4166Sjose borrego     smb_userinfo_t *user_info);
66*8d7e4166Sjose borrego 
67*8d7e4166Sjose borrego DWORD sam_create_trust_account(char *server, char *domain,
68*8d7e4166Sjose borrego     smb_auth_info_t *auth);
69*8d7e4166Sjose borrego 
70*8d7e4166Sjose borrego DWORD sam_create_account(char *server, char *domain_name, char *account_name,
71*8d7e4166Sjose borrego     smb_auth_info_t *auth, DWORD account_flags);
72*8d7e4166Sjose borrego 
73*8d7e4166Sjose borrego DWORD sam_remove_trust_account(char *server, char *domain);
74*8d7e4166Sjose borrego 
75*8d7e4166Sjose borrego DWORD sam_delete_account(char *server, char *domain_name, char *account_name);
76*8d7e4166Sjose borrego 
77*8d7e4166Sjose borrego DWORD sam_lookup_name(char *server, char *domain_name, char *account_name,
78*8d7e4166Sjose borrego     DWORD *rid_ret);
79*8d7e4166Sjose borrego 
80*8d7e4166Sjose borrego DWORD sam_get_local_domains(char *server, char *domain_name);
81*8d7e4166Sjose borrego DWORD sam_check_user(char *server, char *domain_name, char *account_name);
82*8d7e4166Sjose borrego 
83*8d7e4166Sjose borrego /*
84*8d7e4166Sjose borrego  * samr_open.c
85*8d7e4166Sjose borrego  */
86*8d7e4166Sjose borrego int samr_open(char *server, char *domain, char *username,
87*8d7e4166Sjose borrego     DWORD access_mask, mlsvc_handle_t *samr_handle);
88*8d7e4166Sjose borrego 
89*8d7e4166Sjose borrego int samr_connect(char *server, char *domain, char *username,
90*8d7e4166Sjose borrego     DWORD access_mask, mlsvc_handle_t *samr_handle);
91*8d7e4166Sjose borrego 
92*8d7e4166Sjose borrego int samr_close_handle(mlsvc_handle_t *handle);
93*8d7e4166Sjose borrego 
94*8d7e4166Sjose borrego DWORD samr_open_domain(mlsvc_handle_t *samr_handle, DWORD access_mask,
95*8d7e4166Sjose borrego     struct samr_sid *sid, mlsvc_handle_t *domain_handle);
96*8d7e4166Sjose borrego 
97*8d7e4166Sjose borrego DWORD samr_open_user(mlsvc_handle_t *domain_handle, DWORD access_mask,
98*8d7e4166Sjose borrego     DWORD rid, mlsvc_handle_t *user_handle);
99*8d7e4166Sjose borrego 
100*8d7e4166Sjose borrego DWORD samr_delete_user(mlsvc_handle_t *user_handle);
101*8d7e4166Sjose borrego 
102*8d7e4166Sjose borrego int samr_open_group(mlsvc_handle_t *domain_handle, DWORD rid,
103*8d7e4166Sjose borrego     mlsvc_handle_t *group_handle);
104*8d7e4166Sjose borrego 
105*8d7e4166Sjose borrego DWORD samr_create_user(mlsvc_handle_t *domain_handle, char *username,
106*8d7e4166Sjose borrego     DWORD account_flags, DWORD *rid, mlsvc_handle_t *user_handle);
107*8d7e4166Sjose borrego 
108*8d7e4166Sjose borrego /*
109*8d7e4166Sjose borrego  * samr_lookup.c
110*8d7e4166Sjose borrego  */
111*8d7e4166Sjose borrego union samr_user_info {
112*8d7e4166Sjose borrego 	struct info1 {
113*8d7e4166Sjose borrego 		char *username;
114*8d7e4166Sjose borrego 		char *fullname;
115*8d7e4166Sjose borrego 		DWORD group_rid;
116*8d7e4166Sjose borrego 		char *description;
117*8d7e4166Sjose borrego 		char *unknown;
118*8d7e4166Sjose borrego 	} info1;
119*8d7e4166Sjose borrego 
120*8d7e4166Sjose borrego 	struct info6 {
121*8d7e4166Sjose borrego 		char *username;
122*8d7e4166Sjose borrego 		char *fullname;
123*8d7e4166Sjose borrego 	} info6;
124*8d7e4166Sjose borrego 
125*8d7e4166Sjose borrego 	struct info7 {
126*8d7e4166Sjose borrego 		char *username;
127*8d7e4166Sjose borrego 	} info7;
128*8d7e4166Sjose borrego 
129*8d7e4166Sjose borrego 	struct info8 {
130*8d7e4166Sjose borrego 		char *fullname;
131*8d7e4166Sjose borrego 	} info8;
132*8d7e4166Sjose borrego 
133*8d7e4166Sjose borrego 	struct info9 {
134*8d7e4166Sjose borrego 		DWORD group_rid;
135*8d7e4166Sjose borrego 	} info9;
136*8d7e4166Sjose borrego 
137*8d7e4166Sjose borrego 	struct info16 {
138*8d7e4166Sjose borrego 		DWORD unknown;
139*8d7e4166Sjose borrego 	} info16;
140*8d7e4166Sjose borrego };
141*8d7e4166Sjose borrego 
142*8d7e4166Sjose borrego 
143*8d7e4166Sjose borrego int samr_lookup_domain(mlsvc_handle_t *samr_handle, char *domain_name,
144*8d7e4166Sjose borrego     smb_userinfo_t *user_info);
145*8d7e4166Sjose borrego 
146*8d7e4166Sjose borrego DWORD samr_enum_local_domains(mlsvc_handle_t *samr_handle);
147*8d7e4166Sjose borrego 
148*8d7e4166Sjose borrego DWORD samr_lookup_domain_names(mlsvc_handle_t *domain_handle, char *name,
149*8d7e4166Sjose borrego     smb_userinfo_t *user_info);
150*8d7e4166Sjose borrego 
151*8d7e4166Sjose borrego int samr_query_user_info(mlsvc_handle_t *user_handle, WORD switch_value,
152*8d7e4166Sjose borrego     union samr_user_info *user_info);
153*8d7e4166Sjose borrego 
154*8d7e4166Sjose borrego int samr_query_user_groups(mlsvc_handle_t *user_handle,
155*8d7e4166Sjose borrego     smb_userinfo_t *user_info);
156*8d7e4166Sjose borrego 
157*8d7e4166Sjose borrego DWORD samr_get_user_pwinfo(mlsvc_handle_t *user_handle);
158*8d7e4166Sjose borrego 
159*8d7e4166Sjose borrego typedef struct oem_password {
160*8d7e4166Sjose borrego 	BYTE data[512];
161*8d7e4166Sjose borrego 	DWORD length;
162*8d7e4166Sjose borrego } oem_password_t;
163*8d7e4166Sjose borrego 
164*8d7e4166Sjose borrego 
165*8d7e4166Sjose borrego int sam_oem_password(oem_password_t *oem_password, unsigned char *new_password,
166*8d7e4166Sjose borrego     unsigned char *old_password);
167*8d7e4166Sjose borrego 
168*8d7e4166Sjose borrego #ifdef __cplusplus
169*8d7e4166Sjose borrego }
170*8d7e4166Sjose borrego #endif
171*8d7e4166Sjose borrego 
172*8d7e4166Sjose borrego 
173*8d7e4166Sjose borrego #endif /* _SMBSRV_SAMLIB_H */
174