4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21
22 /*
23 * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
24 * Copyright 2015 Nexenta Systems, Inc. All rights reserved.
25 */
26
27 #ifndef _LIBSMB_H
28 #define _LIBSMB_H
29
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33
34 #include <sys/types.h>
35 #include <sys/list.h>
36 #include <sys/avl.h>
37 #include <arpa/inet.h>
38 #include <net/if.h> /* LIFNAMSIZ */
39 #include <netdb.h>
40 #include <stdlib.h>
41 #include <libscf.h>
42 #include <libshare.h>
43 #include <uuid/uuid.h>
44 #include <synch.h>
45 #include <stdarg.h>
46
47 #include <smbsrv/string.h>
48 #include <smbsrv/smb_idmap.h>
49 #include <smbsrv/netbios.h>
50 #include <smbsrv/smb_share.h>
51 #include <smb/nterror.h>
52 #include <smb/ntstatus.h>
53 #include <smbsrv/smb_door.h>
54 #include <smbsrv/alloc.h>
55 #include <smbsrv/hash_table.h>
56 #include <smbsrv/msgbuf.h>
57 #include <smbsrv/wintypes.h>
58 #include <smbsrv/smb_xdr.h>
59 #include <smbsrv/smbinfo.h>
60 #include <smbsrv/ntifs.h>
61
62 #define SMB_VARSMB_DIR "/var/smb"
63 #define SMB_VARRUN_DIR "/var/run/smb"
64 #define SMB_CCACHE_FILE "ccache"
65 #define SMB_CCACHE_PATH SMB_VARRUN_DIR "/" SMB_CCACHE_FILE
66
67
68 /* Max value length of all SMB properties */
69 #define MAX_VALUE_BUFLEN 512
70
71 #define SMBD_FMRI_PREFIX "network/smb/server"
72 #define SMBD_DEFAULT_INSTANCE_FMRI "svc:/network/smb/server:default"
73 #define SMBD_PG_NAME "smbd"
74 #define SMBD_PROTECTED_PG_NAME "read"
75 #define SMBD_EXEC_PG_NAME "exec"
76
77 #define SMBD_SMF_OK 0
138
139 SMB_CI_DYNDNS_ENABLE,
140
141 SMB_CI_MACHINE_PASSWD,
142 SMB_CI_MACHINE_UUID,
143 SMB_CI_KPASSWD_SRV,
144 SMB_CI_KPASSWD_DOMAIN,
145 SMB_CI_KPASSWD_SEQNUM,
146 SMB_CI_NETLOGON_SEQNUM,
147 SMB_CI_IPV6_ENABLE,
148 SMB_CI_PRINT_ENABLE,
149 SMB_CI_MAP,
150 SMB_CI_UNMAP,
151 SMB_CI_DISPOSITION,
152 SMB_CI_DFS_STDROOT_NUM,
153 SMB_CI_TRAVERSE_MOUNTS,
154 SMB_CI_SMB2_ENABLE_OLD, /* obsolete */
155 SMB_CI_INITIAL_CREDITS,
156 SMB_CI_MAXIMUM_CREDITS,
157 SMB_CI_MAX_PROTOCOL,
158
159 SMB_CI_MAX
160 } smb_cfg_id_t;
161
162 /* SMF helper functions */
163 extern smb_scfhandle_t *smb_smf_scf_init(char *);
164 extern void smb_smf_scf_fini(smb_scfhandle_t *);
165 extern int smb_smf_start_transaction(smb_scfhandle_t *);
166 extern int smb_smf_end_transaction(smb_scfhandle_t *);
167 extern int smb_smf_set_string_property(smb_scfhandle_t *, char *, char *);
168 extern int smb_smf_get_string_property(smb_scfhandle_t *, char *,
169 char *, size_t);
170 extern int smb_smf_set_integer_property(smb_scfhandle_t *, char *, int64_t);
171 extern int smb_smf_get_integer_property(smb_scfhandle_t *, char *, int64_t *);
172 extern int smb_smf_set_boolean_property(smb_scfhandle_t *, char *, uint8_t);
173 extern int smb_smf_get_boolean_property(smb_scfhandle_t *, char *, uint8_t *);
174 extern int smb_smf_set_opaque_property(smb_scfhandle_t *, char *,
175 void *, size_t);
176 extern int smb_smf_get_opaque_property(smb_scfhandle_t *, char *,
177 void *, size_t);
178 extern int smb_smf_create_service_pgroup(smb_scfhandle_t *, char *);
179 extern int smb_smf_delete_property(smb_scfhandle_t *, char *);
180 extern int smb_smf_restart_service(void);
181 extern int smb_smf_maintenance_mode(void);
182
183 /* ZFS interface */
184 int smb_getdataset(const char *, char *, size_t);
185
186 /* Configuration management functions */
187 extern int smb_config_get(smb_cfg_id_t, char *, int);
188 extern char *smb_config_getname(smb_cfg_id_t);
189 extern int smb_config_getstr(smb_cfg_id_t, char *, int);
190 extern int smb_config_getnum(smb_cfg_id_t, int64_t *);
191 extern boolean_t smb_config_getbool(smb_cfg_id_t);
192
193 extern int smb_config_set(smb_cfg_id_t, char *);
194 extern int smb_config_setstr(smb_cfg_id_t, char *);
195 extern int smb_config_setnum(smb_cfg_id_t, int64_t);
196 extern int smb_config_setbool(smb_cfg_id_t, boolean_t);
197
198 extern boolean_t smb_config_get_ads_enable(void);
199 extern int smb_config_get_debug(void);
200 extern uint8_t smb_config_get_fg_flag(void);
201 extern char *smb_config_get_localsid(void);
202 extern int smb_config_get_localuuid(uuid_t);
203 extern int smb_config_secmode_fromstr(char *);
204 extern char *smb_config_secmode_tostr(int);
205 extern int smb_config_get_secmode(void);
206 extern int smb_config_set_secmode(int);
207 extern int smb_config_set_idmap_domain(char *);
208 extern int smb_config_refresh_idmap(void);
209 extern int smb_config_getip(smb_cfg_id_t, smb_inaddr_t *);
210 extern void smb_config_get_version(smb_version_t *);
211 uint32_t smb_config_get_execinfo(char *, char *, size_t);
212 extern void smb_config_get_negtok(uchar_t *, uint32_t *);
213
214 extern int smb_config_check_protocol(char *);
215 extern uint32_t smb_config_get_max_protocol(void);
216 extern void smb_config_upgrade(void);
217
218 extern void smb_load_kconfig(smb_kmod_cfg_t *kcfg);
219 extern uint32_t smb_crc_gen(uint8_t *, size_t);
220
221 extern boolean_t smb_match_netlogon_seqnum(void);
222 extern int smb_setdomainprops(char *, char *, char *);
223 extern void smb_update_netlogon_seqnum(void);
224
225 /* maximum password length on Windows 2000 and above */
226 #define SMB_PASSWD_MAXLEN 127
227 #define SMB_USERNAME_MAXLEN 40
228
229 /* See also: smb_joininfo_xdr() */
230 typedef struct smb_joininfo {
231 char domain_name[MAXHOSTNAMELEN];
232 char domain_username[SMB_USERNAME_MAXLEN + 1];
233 char domain_passwd[SMB_PASSWD_MAXLEN + 1];
234 uint32_t mode;
235 } smb_joininfo_t;
236
237 /* See also: smb_joinres_xdr() */
432 */
433
434 #define SMB_PWF_LM 0x01 /* LM hash is present */
435 #define SMB_PWF_NT 0x02 /* NT hash is present */
436 #define SMB_PWF_DISABLE 0x04 /* Account is disabled */
437
438 typedef struct smb_passwd {
439 uid_t pw_uid;
440 uint32_t pw_flags;
441 char pw_name[SMB_USERNAME_MAXLEN];
442 uint8_t pw_lmhash[SMBAUTH_HASH_SZ];
443 uint8_t pw_nthash[SMBAUTH_HASH_SZ];
444 } smb_passwd_t;
445
446 /*
447 * Control flags passed to smb_pwd_setcntl
448 */
449 #define SMB_PWC_DISABLE 0x01
450 #define SMB_PWC_ENABLE 0x02
451 #define SMB_PWC_NOLM 0x04
452
453 #define SMB_PWE_SUCCESS 0
454 #define SMB_PWE_USER_UNKNOWN 1
455 #define SMB_PWE_USER_DISABLE 2
456 #define SMB_PWE_CLOSE_FAILED 3
457 #define SMB_PWE_OPEN_FAILED 4
458 #define SMB_PWE_WRITE_FAILED 6
459 #define SMB_PWE_UPDATE_FAILED 7
460 #define SMB_PWE_STAT_FAILED 8
461 #define SMB_PWE_BUSY 9
462 #define SMB_PWE_DENIED 10
463 #define SMB_PWE_SYSTEM_ERROR 11
464 #define SMB_PWE_INVALID_PARAM 12
465 #define SMB_PWE_NO_MEMORY 13
466 #define SMB_PWE_MAX 14
467
468 typedef struct smb_pwditer {
469 void *spi_next;
470 } smb_pwditer_t;
471
644 smb_trusted_domains_t d_trusted;
645 } smb_domainex_t;
646
647 int smb_domain_init(uint32_t);
648 void smb_domain_fini(void);
649 void smb_domain_show(void);
650 void smb_domain_save(void);
651 boolean_t smb_domain_lookup_name(char *, smb_domain_t *);
652 boolean_t smb_domain_lookup_sid(smb_sid_t *, smb_domain_t *);
653 boolean_t smb_domain_lookup_type(smb_domain_type_t, smb_domain_t *);
654 boolean_t smb_domain_getinfo(smb_domainex_t *);
655 void smb_domain_update(smb_domainex_t *);
656 uint32_t smb_domain_start_update(void);
657 void smb_domain_end_update(void);
658 void smb_domain_set_basic_info(char *, char *, char *, smb_domain_t *);
659 void smb_domain_set_dns_info(char *, char *, char *, char *, char *,
660 smb_domain_t *);
661 void smb_domain_set_trust_info(char *, char *, char *,
662 uint32_t, uint32_t, uint32_t, smb_domain_t *);
663 void smb_domain_current_dc(smb_dcinfo_t *);
664
665 typedef struct smb_gsid {
666 smb_sid_t *gs_sid;
667 uint16_t gs_type;
668 } smb_gsid_t;
669
670 struct sqlite_vm;
671 struct sqlite;
672
673 typedef struct smb_giter {
674 struct sqlite_vm *sgi_vm;
675 struct sqlite *sgi_db;
676 uint32_t sgi_nerr;
677 } smb_giter_t;
678
679 typedef struct smb_group {
680 char *sg_name;
681 char *sg_cmnt;
682 uint32_t sg_attr;
683 uint32_t sg_rid;
694 int smb_lgrp_rename(char *, char *);
695 int smb_lgrp_delete(char *);
696 int smb_lgrp_setcmnt(char *, char *);
697 int smb_lgrp_getcmnt(char *, char **);
698 int smb_lgrp_getpriv(char *, uint8_t, boolean_t *);
699 int smb_lgrp_setpriv(char *, uint8_t, boolean_t);
700 int smb_lgrp_add_member(char *, smb_sid_t *, uint16_t);
701 int smb_lgrp_del_member(char *, smb_sid_t *, uint16_t);
702 int smb_lgrp_getbyname(char *, smb_group_t *);
703 int smb_lgrp_getbyrid(uint32_t, smb_domain_type_t, smb_group_t *);
704 void smb_lgrp_free(smb_group_t *);
705 uint32_t smb_lgrp_err_to_ntstatus(uint32_t);
706 boolean_t smb_lgrp_is_member(smb_group_t *, smb_sid_t *);
707 char *smb_lgrp_strerror(int);
708 int smb_lgrp_iteropen(smb_giter_t *);
709 void smb_lgrp_iterclose(smb_giter_t *);
710 boolean_t smb_lgrp_itererror(smb_giter_t *);
711 int smb_lgrp_iterate(smb_giter_t *, smb_group_t *);
712
713 int smb_lookup_sid(const char *, lsa_account_t *);
714 int smb_lookup_name(const char *, sid_type_t, lsa_account_t *);
715
716 #define SMB_LGRP_SUCCESS 0
717 #define SMB_LGRP_INVALID_ARG 1
718 #define SMB_LGRP_INVALID_MEMBER 2
719 #define SMB_LGRP_INVALID_NAME 3
720 #define SMB_LGRP_NOT_FOUND 4
721 #define SMB_LGRP_EXISTS 5
722 #define SMB_LGRP_NO_SID 6
723 #define SMB_LGRP_NO_LOCAL_SID 7
724 #define SMB_LGRP_SID_NOTLOCAL 8
725 #define SMB_LGRP_WKSID 9
726 #define SMB_LGRP_NO_MEMORY 10
727 #define SMB_LGRP_DB_ERROR 11
728 #define SMB_LGRP_DBINIT_ERROR 12
729 #define SMB_LGRP_INTERNAL_ERROR 13
730 #define SMB_LGRP_MEMBER_IN_GROUP 14
731 #define SMB_LGRP_MEMBER_NOT_IN_GROUP 15
732 #define SMB_LGRP_NO_SUCH_PRIV 16
733 #define SMB_LGRP_NO_SUCH_DOMAIN 17
734 #define SMB_LGRP_PRIV_HELD 18
841 /*
842 * Well-known account interfaces
843 */
844 smb_wka_t *smb_wka_lookup_builtin(const char *);
845 smb_wka_t *smb_wka_lookup_name(const char *);
846 smb_wka_t *smb_wka_lookup_sid(smb_sid_t *);
847 smb_sid_t *smb_wka_get_sid(const char *);
848 char *smb_wka_get_domain(int);
849 uint32_t smb_wka_token_groups(uint32_t, smb_ids_t *);
850
851 /*
852 * In memory account representation
853 */
854 typedef struct smb_account {
855 char *a_name;
856 char *a_domain;
857 uint16_t a_type;
858 smb_sid_t *a_sid;
859 smb_sid_t *a_domsid;
860 uint32_t a_rid;
861 } smb_account_t;
862
863 uint32_t smb_sam_lookup_name(char *, char *, uint16_t, smb_account_t *);
864 uint32_t smb_sam_lookup_sid(smb_sid_t *, smb_account_t *);
865 int smb_sam_usr_cnt(void);
866 uint32_t smb_sam_usr_groups(smb_sid_t *, smb_ids_t *);
867 int smb_sam_grp_cnt(smb_domain_type_t);
868 void smb_account_free(smb_account_t *);
869 boolean_t smb_account_validate(smb_account_t *);
870
871 /*
872 * Security Descriptor functions.
873 */
874 uint32_t smb_sd_read(char *path, smb_sd_t *, uint32_t);
875 uint32_t smb_sd_write(char *path, smb_sd_t *, uint32_t);
876 uint32_t smb_sd_fromfs(smb_fssd_t *, smb_sd_t *);
877
878 /* Kernel Module Interface */
879 int smb_kmod_bind(void);
880 boolean_t smb_kmod_isbound(void);
|
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21
22 /*
23 * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
24 * Copyright 2019 Nexenta Systems, Inc. All rights reserved.
25 */
26
27 #ifndef _LIBSMB_H
28 #define _LIBSMB_H
29
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33
34 #include <sys/types.h>
35 #include <sys/inttypes.h>
36 #include <sys/list.h>
37 #include <sys/avl.h>
38 #include <arpa/inet.h>
39 #include <net/if.h> /* LIFNAMSIZ */
40 #include <netdb.h>
41 #include <stdlib.h>
42 #include <libscf.h>
43 #include <libshare.h>
44 #include <uuid/uuid.h>
45 #include <synch.h>
46 #include <stdarg.h>
47
48 #include <smb/nterror.h>
49 #include <smb/ntstatus.h>
50 #include <smb/wintypes.h>
51
52 #include <smbsrv/string.h>
53 #include <smbsrv/smb_idmap.h>
54 #include <smbsrv/netbios.h>
55 #include <smbsrv/smb_share.h>
56 #include <smbsrv/smb_door.h>
57 #include <smbsrv/alloc.h>
58 #include <smbsrv/hash_table.h>
59 #include <smbsrv/msgbuf.h>
60 #include <smbsrv/smb_xdr.h>
61 #include <smbsrv/smbinfo.h>
62 #include <smbsrv/ntifs.h>
63
64 #define SMB_VARSMB_DIR "/var/smb"
65 #define SMB_VARRUN_DIR "/var/run/smb"
66 #define SMB_CCACHE_FILE "ccache"
67 #define SMB_CCACHE_PATH SMB_VARRUN_DIR "/" SMB_CCACHE_FILE
68
69
70 /* Max value length of all SMB properties */
71 #define MAX_VALUE_BUFLEN 512
72
73 #define SMBD_FMRI_PREFIX "network/smb/server"
74 #define SMBD_DEFAULT_INSTANCE_FMRI "svc:/network/smb/server:default"
75 #define SMBD_PG_NAME "smbd"
76 #define SMBD_PROTECTED_PG_NAME "read"
77 #define SMBD_EXEC_PG_NAME "exec"
78
79 #define SMBD_SMF_OK 0
140
141 SMB_CI_DYNDNS_ENABLE,
142
143 SMB_CI_MACHINE_PASSWD,
144 SMB_CI_MACHINE_UUID,
145 SMB_CI_KPASSWD_SRV,
146 SMB_CI_KPASSWD_DOMAIN,
147 SMB_CI_KPASSWD_SEQNUM,
148 SMB_CI_NETLOGON_SEQNUM,
149 SMB_CI_IPV6_ENABLE,
150 SMB_CI_PRINT_ENABLE,
151 SMB_CI_MAP,
152 SMB_CI_UNMAP,
153 SMB_CI_DISPOSITION,
154 SMB_CI_DFS_STDROOT_NUM,
155 SMB_CI_TRAVERSE_MOUNTS,
156 SMB_CI_SMB2_ENABLE_OLD, /* obsolete */
157 SMB_CI_INITIAL_CREDITS,
158 SMB_CI_MAXIMUM_CREDITS,
159 SMB_CI_MAX_PROTOCOL,
160 SMB_CI_ENCRYPT,
161 SMB_CI_MIN_PROTOCOL,
162 SMB_CI_BYPASS_TRAVERSE_CHECKING,
163
164 SMB_CI_MAX
165 } smb_cfg_id_t;
166
167 /* SMF helper functions */
168 extern smb_scfhandle_t *smb_smf_scf_init(char *);
169 extern void smb_smf_scf_fini(smb_scfhandle_t *);
170 extern int smb_smf_start_transaction(smb_scfhandle_t *);
171 extern int smb_smf_end_transaction(smb_scfhandle_t *);
172 extern int smb_smf_set_string_property(smb_scfhandle_t *, char *, char *);
173 extern int smb_smf_get_string_property(smb_scfhandle_t *, char *,
174 char *, size_t);
175 extern int smb_smf_set_integer_property(smb_scfhandle_t *, char *, int64_t);
176 extern int smb_smf_get_integer_property(smb_scfhandle_t *, char *, int64_t *);
177 extern int smb_smf_set_boolean_property(smb_scfhandle_t *, char *, uint8_t);
178 extern int smb_smf_get_boolean_property(smb_scfhandle_t *, char *, uint8_t *);
179 extern int smb_smf_set_opaque_property(smb_scfhandle_t *, char *,
180 void *, size_t);
181 extern int smb_smf_get_opaque_property(smb_scfhandle_t *, char *,
182 void *, size_t);
183 extern int smb_smf_create_service_pgroup(smb_scfhandle_t *, char *);
184 extern int smb_smf_delete_property(smb_scfhandle_t *, char *);
185 extern int smb_smf_restart_service(void);
186 extern int smb_smf_maintenance_mode(void);
187
188 /* ZFS interface */
189 struct libzfs_handle;
190 int smb_getdataset(struct libzfs_handle *, const char *, char *, size_t);
191
192 /* Configuration management functions */
193 extern int smb_config_get(smb_cfg_id_t, char *, int);
194 extern char *smb_config_getname(smb_cfg_id_t);
195 extern int smb_config_getstr(smb_cfg_id_t, char *, int);
196 extern int smb_config_getnum(smb_cfg_id_t, int64_t *);
197 extern boolean_t smb_config_getbool(smb_cfg_id_t);
198
199 extern int smb_config_set(smb_cfg_id_t, char *);
200 extern int smb_config_setstr(smb_cfg_id_t, char *);
201 extern int smb_config_setnum(smb_cfg_id_t, int64_t);
202 extern int smb_config_setbool(smb_cfg_id_t, boolean_t);
203
204 extern boolean_t smb_config_get_ads_enable(void);
205 extern int smb_config_get_debug(void);
206 extern uint8_t smb_config_get_fg_flag(void);
207 extern char *smb_config_get_localsid(void);
208 extern int smb_config_get_localuuid(uuid_t);
209 extern int smb_config_secmode_fromstr(char *);
210 extern char *smb_config_secmode_tostr(int);
211 extern int smb_config_get_secmode(void);
212 extern int smb_config_set_secmode(int);
213 extern int smb_config_set_idmap_domain(char *);
214 extern int smb_config_refresh_idmap(void);
215 extern int smb_config_getip(smb_cfg_id_t, smb_inaddr_t *);
216 extern void smb_config_get_version(smb_version_t *);
217 uint32_t smb_config_get_execinfo(char *, char *, size_t);
218 extern void smb_config_get_negtok(uchar_t *, uint32_t *);
219
220 extern int smb_config_check_protocol(char *);
221 extern uint32_t smb_config_get_max_protocol(void);
222 extern uint32_t smb_config_get_min_protocol(void);
223 extern void smb_config_upgrade(void);
224
225 extern smb_cfg_val_t smb_config_get_require(smb_cfg_id_t);
226
227 extern void smb_load_kconfig(smb_kmod_cfg_t *kcfg);
228 extern uint32_t smb_crc_gen(uint8_t *, size_t);
229
230 extern boolean_t smb_match_netlogon_seqnum(void);
231 extern int smb_setdomainprops(char *, char *, char *);
232 extern void smb_update_netlogon_seqnum(void);
233
234 /* maximum password length on Windows 2000 and above */
235 #define SMB_PASSWD_MAXLEN 127
236 #define SMB_USERNAME_MAXLEN 40
237
238 /* See also: smb_joininfo_xdr() */
239 typedef struct smb_joininfo {
240 char domain_name[MAXHOSTNAMELEN];
241 char domain_username[SMB_USERNAME_MAXLEN + 1];
242 char domain_passwd[SMB_PASSWD_MAXLEN + 1];
243 uint32_t mode;
244 } smb_joininfo_t;
245
246 /* See also: smb_joinres_xdr() */
441 */
442
443 #define SMB_PWF_LM 0x01 /* LM hash is present */
444 #define SMB_PWF_NT 0x02 /* NT hash is present */
445 #define SMB_PWF_DISABLE 0x04 /* Account is disabled */
446
447 typedef struct smb_passwd {
448 uid_t pw_uid;
449 uint32_t pw_flags;
450 char pw_name[SMB_USERNAME_MAXLEN];
451 uint8_t pw_lmhash[SMBAUTH_HASH_SZ];
452 uint8_t pw_nthash[SMBAUTH_HASH_SZ];
453 } smb_passwd_t;
454
455 /*
456 * Control flags passed to smb_pwd_setcntl
457 */
458 #define SMB_PWC_DISABLE 0x01
459 #define SMB_PWC_ENABLE 0x02
460 #define SMB_PWC_NOLM 0x04
461 #define SMB_PWC_DELETE 0x08
462
463 #define SMB_PWE_SUCCESS 0
464 #define SMB_PWE_USER_UNKNOWN 1
465 #define SMB_PWE_USER_DISABLE 2
466 #define SMB_PWE_CLOSE_FAILED 3
467 #define SMB_PWE_OPEN_FAILED 4
468 #define SMB_PWE_WRITE_FAILED 6
469 #define SMB_PWE_UPDATE_FAILED 7
470 #define SMB_PWE_STAT_FAILED 8
471 #define SMB_PWE_BUSY 9
472 #define SMB_PWE_DENIED 10
473 #define SMB_PWE_SYSTEM_ERROR 11
474 #define SMB_PWE_INVALID_PARAM 12
475 #define SMB_PWE_NO_MEMORY 13
476 #define SMB_PWE_MAX 14
477
478 typedef struct smb_pwditer {
479 void *spi_next;
480 } smb_pwditer_t;
481
654 smb_trusted_domains_t d_trusted;
655 } smb_domainex_t;
656
657 int smb_domain_init(uint32_t);
658 void smb_domain_fini(void);
659 void smb_domain_show(void);
660 void smb_domain_save(void);
661 boolean_t smb_domain_lookup_name(char *, smb_domain_t *);
662 boolean_t smb_domain_lookup_sid(smb_sid_t *, smb_domain_t *);
663 boolean_t smb_domain_lookup_type(smb_domain_type_t, smb_domain_t *);
664 boolean_t smb_domain_getinfo(smb_domainex_t *);
665 void smb_domain_update(smb_domainex_t *);
666 uint32_t smb_domain_start_update(void);
667 void smb_domain_end_update(void);
668 void smb_domain_set_basic_info(char *, char *, char *, smb_domain_t *);
669 void smb_domain_set_dns_info(char *, char *, char *, char *, char *,
670 smb_domain_t *);
671 void smb_domain_set_trust_info(char *, char *, char *,
672 uint32_t, uint32_t, uint32_t, smb_domain_t *);
673 void smb_domain_current_dc(smb_dcinfo_t *);
674 void smb_domain_bad_dc(void);
675
676 typedef struct smb_gsid {
677 smb_sid_t *gs_sid;
678 uint16_t gs_type;
679 } smb_gsid_t;
680
681 struct sqlite_vm;
682 struct sqlite;
683
684 typedef struct smb_giter {
685 struct sqlite_vm *sgi_vm;
686 struct sqlite *sgi_db;
687 uint32_t sgi_nerr;
688 } smb_giter_t;
689
690 typedef struct smb_group {
691 char *sg_name;
692 char *sg_cmnt;
693 uint32_t sg_attr;
694 uint32_t sg_rid;
705 int smb_lgrp_rename(char *, char *);
706 int smb_lgrp_delete(char *);
707 int smb_lgrp_setcmnt(char *, char *);
708 int smb_lgrp_getcmnt(char *, char **);
709 int smb_lgrp_getpriv(char *, uint8_t, boolean_t *);
710 int smb_lgrp_setpriv(char *, uint8_t, boolean_t);
711 int smb_lgrp_add_member(char *, smb_sid_t *, uint16_t);
712 int smb_lgrp_del_member(char *, smb_sid_t *, uint16_t);
713 int smb_lgrp_getbyname(char *, smb_group_t *);
714 int smb_lgrp_getbyrid(uint32_t, smb_domain_type_t, smb_group_t *);
715 void smb_lgrp_free(smb_group_t *);
716 uint32_t smb_lgrp_err_to_ntstatus(uint32_t);
717 boolean_t smb_lgrp_is_member(smb_group_t *, smb_sid_t *);
718 char *smb_lgrp_strerror(int);
719 int smb_lgrp_iteropen(smb_giter_t *);
720 void smb_lgrp_iterclose(smb_giter_t *);
721 boolean_t smb_lgrp_itererror(smb_giter_t *);
722 int smb_lgrp_iterate(smb_giter_t *, smb_group_t *);
723
724 int smb_lookup_sid(const char *, lsa_account_t *);
725 int smb_lookup_lsid(const char *, lsa_account_t *);
726 int smb_lookup_name(const char *, sid_type_t, lsa_account_t *);
727 int smb_lookup_lname(const char *, sid_type_t, lsa_account_t *);
728
729 #define SMB_LGRP_SUCCESS 0
730 #define SMB_LGRP_INVALID_ARG 1
731 #define SMB_LGRP_INVALID_MEMBER 2
732 #define SMB_LGRP_INVALID_NAME 3
733 #define SMB_LGRP_NOT_FOUND 4
734 #define SMB_LGRP_EXISTS 5
735 #define SMB_LGRP_NO_SID 6
736 #define SMB_LGRP_NO_LOCAL_SID 7
737 #define SMB_LGRP_SID_NOTLOCAL 8
738 #define SMB_LGRP_WKSID 9
739 #define SMB_LGRP_NO_MEMORY 10
740 #define SMB_LGRP_DB_ERROR 11
741 #define SMB_LGRP_DBINIT_ERROR 12
742 #define SMB_LGRP_INTERNAL_ERROR 13
743 #define SMB_LGRP_MEMBER_IN_GROUP 14
744 #define SMB_LGRP_MEMBER_NOT_IN_GROUP 15
745 #define SMB_LGRP_NO_SUCH_PRIV 16
746 #define SMB_LGRP_NO_SUCH_DOMAIN 17
747 #define SMB_LGRP_PRIV_HELD 18
854 /*
855 * Well-known account interfaces
856 */
857 smb_wka_t *smb_wka_lookup_builtin(const char *);
858 smb_wka_t *smb_wka_lookup_name(const char *);
859 smb_wka_t *smb_wka_lookup_sid(smb_sid_t *);
860 smb_sid_t *smb_wka_get_sid(const char *);
861 char *smb_wka_get_domain(int);
862 uint32_t smb_wka_token_groups(uint32_t, smb_ids_t *);
863
864 /*
865 * In memory account representation
866 */
867 typedef struct smb_account {
868 char *a_name;
869 char *a_domain;
870 uint16_t a_type;
871 smb_sid_t *a_sid;
872 smb_sid_t *a_domsid;
873 uint32_t a_rid;
874 uint32_t a_flags;
875 } smb_account_t;
876
877 uint32_t smb_sam_lookup_name(char *, char *, uint16_t, smb_account_t *);
878 uint32_t smb_sam_lookup_sid(smb_sid_t *, smb_account_t *);
879 int smb_sam_usr_cnt(void);
880 uint32_t smb_sam_usr_groups(smb_sid_t *, smb_ids_t *);
881 int smb_sam_grp_cnt(smb_domain_type_t);
882 void smb_account_free(smb_account_t *);
883 boolean_t smb_account_validate(smb_account_t *);
884
885 /*
886 * Security Descriptor functions.
887 */
888 uint32_t smb_sd_read(char *path, smb_sd_t *, uint32_t);
889 uint32_t smb_sd_write(char *path, smb_sd_t *, uint32_t);
890 uint32_t smb_sd_fromfs(smb_fssd_t *, smb_sd_t *);
891
892 /* Kernel Module Interface */
893 int smb_kmod_bind(void);
894 boolean_t smb_kmod_isbound(void);
|