1da6c28aaSamw /*
2da6c28aaSamw  * CDDL HEADER START
3da6c28aaSamw  *
4da6c28aaSamw  * The contents of this file are subject to the terms of the
5da6c28aaSamw  * Common Development and Distribution License (the "License").
6da6c28aaSamw  * You may not use this file except in compliance with the License.
7da6c28aaSamw  *
8da6c28aaSamw  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9da6c28aaSamw  * or http://www.opensolaris.org/os/licensing.
10da6c28aaSamw  * See the License for the specific language governing permissions
11da6c28aaSamw  * and limitations under the License.
12da6c28aaSamw  *
13da6c28aaSamw  * When distributing Covered Code, include this CDDL HEADER in each
14da6c28aaSamw  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15da6c28aaSamw  * If applicable, add the following below this CDDL HEADER, with the
16da6c28aaSamw  * fields enclosed by brackets "[]" replaced with your own identifying
17da6c28aaSamw  * information: Portions Copyright [yyyy] [name of copyright owner]
18da6c28aaSamw  *
19da6c28aaSamw  * CDDL HEADER END
20da6c28aaSamw  */
21da6c28aaSamw /*
227f667e74Sjose borrego  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
23da6c28aaSamw  * Use is subject to license terms.
24*1ed6b69aSGordon Ross  * Copyright 2012 Nexenta Systems, Inc.  All rights reserved.
25da6c28aaSamw  */
26da6c28aaSamw 
277f667e74Sjose borrego #ifndef _SAMLIB_H
287f667e74Sjose borrego #define	_SAMLIB_H
29da6c28aaSamw 
30da6c28aaSamw /*
31da6c28aaSamw  * Prototypes for the SAM library and RPC client side library interface.
32da6c28aaSamw  * There are two levels of interface defined here: sam_xxx and samr_xxx.
33da6c28aaSamw  * The sam_xxx functions provide a high level interface which make
34da6c28aaSamw  * multiple RPC calls and do all the work necessary to obtain and return
35da6c28aaSamw  * the requested information. The samr_xxx functions provide a low level
36da6c28aaSamw  * interface in which each function maps to a single underlying RPC.
37da6c28aaSamw  */
38da6c28aaSamw 
39da6c28aaSamw #include <smbsrv/ndl/samrpc.ndl>
40da6c28aaSamw 
41da6c28aaSamw 
42da6c28aaSamw #ifdef __cplusplus
43da6c28aaSamw extern "C" {
44da6c28aaSamw #endif
45da6c28aaSamw 
463db3f65cSamw /*
473db3f65cSamw  * Account Control Flags
483db3f65cSamw  * Use in SAMR Query Display Information RPC
493db3f65cSamw  */
503db3f65cSamw #define	ACF_DISABLED	0x001	/* account disable */
513db3f65cSamw #define	ACF_HOMEDIRREQ	0x002	/* home dir required */
523db3f65cSamw #define	ACF_PWDNOTREQ	0x004	/* password not required */
533db3f65cSamw #define	ACF_TEMPDUP	0x008	/* temp dup account */
543db3f65cSamw #define	ACF_NORMUSER	0x010	/* normal user */
553db3f65cSamw #define	ACF_MNS		0x020	/* MNS account */
563db3f65cSamw #define	ACF_DOMTRUST	0x040	/* Domain trust acct */
573db3f65cSamw #define	ACF_WSTRUST	0x080	/* WKST trust acct */
583db3f65cSamw #define	ACF_SVRTRUST	0x100	/* Server trust acct */
593db3f65cSamw #define	ACF_PWDNOEXP	0x200	/* password no expire */
603db3f65cSamw #define	ACF_AUTOLOCK	0x400	/* acct auto lock */
613db3f65cSamw 
62da6c28aaSamw /*
63da6c28aaSamw  * samlib.c
64da6c28aaSamw  */
65e3f2c991SKeyur Desai DWORD sam_create_trust_account(char *, char *);
66e3f2c991SKeyur Desai DWORD sam_create_account(char *, char *, char *, DWORD);
677f667e74Sjose borrego DWORD sam_remove_trust_account(char *, char *);
687f667e74Sjose borrego DWORD sam_delete_account(char *, char *, char *);
697f667e74Sjose borrego DWORD sam_get_local_domains(char *, char *);
707f667e74Sjose borrego DWORD sam_check_user(char *, char *, char *);
71da6c28aaSamw 
72da6c28aaSamw /*
73da6c28aaSamw  * samr_open.c
74da6c28aaSamw  */
75*1ed6b69aSGordon Ross DWORD samr_open(char *, char *, char *, DWORD, mlsvc_handle_t *);
76*1ed6b69aSGordon Ross DWORD samr_connect(char *, char *, char *, DWORD, mlsvc_handle_t *);
77*1ed6b69aSGordon Ross void samr_close_handle(mlsvc_handle_t *);
787f667e74Sjose borrego DWORD samr_open_domain(mlsvc_handle_t *, DWORD, struct samr_sid *,
797f667e74Sjose borrego     mlsvc_handle_t *);
807f667e74Sjose borrego DWORD samr_open_user(mlsvc_handle_t *, DWORD, DWORD, mlsvc_handle_t *);
817f667e74Sjose borrego DWORD samr_delete_user(mlsvc_handle_t *);
827f667e74Sjose borrego int samr_open_group(mlsvc_handle_t *, DWORD, mlsvc_handle_t *);
837f667e74Sjose borrego DWORD samr_create_user(mlsvc_handle_t *, char *, DWORD, DWORD *,
847f667e74Sjose borrego     mlsvc_handle_t *);
85da6c28aaSamw 
86da6c28aaSamw /*
87da6c28aaSamw  * samr_lookup.c
88da6c28aaSamw  */
89da6c28aaSamw union samr_user_info {
90da6c28aaSamw 	struct info1 {
91da6c28aaSamw 		char *username;
92da6c28aaSamw 		char *fullname;
93da6c28aaSamw 		DWORD group_rid;
94da6c28aaSamw 		char *description;
95da6c28aaSamw 		char *unknown;
96da6c28aaSamw 	} info1;
97da6c28aaSamw 
98da6c28aaSamw 	struct info6 {
99da6c28aaSamw 		char *username;
100da6c28aaSamw 		char *fullname;
101da6c28aaSamw 	} info6;
102da6c28aaSamw 
103da6c28aaSamw 	struct info7 {
104da6c28aaSamw 		char *username;
105da6c28aaSamw 	} info7;
106da6c28aaSamw 
107da6c28aaSamw 	struct info8 {
108da6c28aaSamw 		char *fullname;
109da6c28aaSamw 	} info8;
110da6c28aaSamw 
111da6c28aaSamw 	struct info9 {
112da6c28aaSamw 		DWORD group_rid;
113da6c28aaSamw 	} info9;
114da6c28aaSamw 
115da6c28aaSamw 	struct info16 {
116*1ed6b69aSGordon Ross 		DWORD acct_ctrl;
117da6c28aaSamw 	} info16;
118da6c28aaSamw };
119da6c28aaSamw 
120da6c28aaSamw 
1217f667e74Sjose borrego smb_sid_t *samr_lookup_domain(mlsvc_handle_t *, char *);
1227f667e74Sjose borrego DWORD samr_enum_local_domains(mlsvc_handle_t *);
1237f667e74Sjose borrego uint32_t samr_lookup_domain_names(mlsvc_handle_t *, char *, smb_account_t *);
124*1ed6b69aSGordon Ross DWORD samr_query_user_info(mlsvc_handle_t *, WORD, union samr_user_info *);
1257f667e74Sjose borrego DWORD samr_get_user_pwinfo(mlsvc_handle_t *);
126da6c28aaSamw 
127*1ed6b69aSGordon Ross DWORD
128*1ed6b69aSGordon Ross samr_change_password(
129*1ed6b69aSGordon Ross 	mlsvc_handle_t *handle,
130*1ed6b69aSGordon Ross 	char *server,
131*1ed6b69aSGordon Ross 	char *account,
132*1ed6b69aSGordon Ross 	struct samr_encr_passwd *newpw,
133*1ed6b69aSGordon Ross 	struct samr_encr_hash *oldpw);
134*1ed6b69aSGordon Ross 
135*1ed6b69aSGordon Ross DWORD
136*1ed6b69aSGordon Ross samr_set_user_info(
137*1ed6b69aSGordon Ross 	mlsvc_handle_t *user_handle,
138*1ed6b69aSGordon Ross 	int info_level,
139*1ed6b69aSGordon Ross 	void *info_buf);
140*1ed6b69aSGordon Ross 
141*1ed6b69aSGordon Ross DWORD
142*1ed6b69aSGordon Ross netr_set_user_control(
143*1ed6b69aSGordon Ross 	mlsvc_handle_t *user_handle,
144*1ed6b69aSGordon Ross 	DWORD UserAccountControl);
145*1ed6b69aSGordon Ross 
146*1ed6b69aSGordon Ross DWORD
147*1ed6b69aSGordon Ross netr_set_user_password(
148*1ed6b69aSGordon Ross 	mlsvc_handle_t *user_handle,
149*1ed6b69aSGordon Ross 	char *new_pw_clear);
150*1ed6b69aSGordon Ross 
151*1ed6b69aSGordon Ross DWORD
152*1ed6b69aSGordon Ross netr_change_password(
153*1ed6b69aSGordon Ross 	char *server,
154*1ed6b69aSGordon Ross 	char *account,
155*1ed6b69aSGordon Ross 	char *old_password,
156*1ed6b69aSGordon Ross 	char *new_password);
157da6c28aaSamw 
158da6c28aaSamw #ifdef __cplusplus
159da6c28aaSamw }
160da6c28aaSamw #endif
161da6c28aaSamw 
162da6c28aaSamw 
1637f667e74Sjose borrego #endif /* _SAMLIB_H */
164