smb_kproto.h revision 89dc44ce9705974a8bc4a39f1e878a0491a5be61
fa9e4066f08beec538e775443c5be79dd423fcabahrens * CDDL HEADER START
fa9e4066f08beec538e775443c5be79dd423fcabahrens * The contents of this file are subject to the terms of the
441d80aa4f613b6298fc8bd3151f4be02dbf84fclling * Common Development and Distribution License (the "License").
441d80aa4f613b6298fc8bd3151f4be02dbf84fclling * You may not use this file except in compliance with the License.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
fa9e4066f08beec538e775443c5be79dd423fcabahrens * See the License for the specific language governing permissions
fa9e4066f08beec538e775443c5be79dd423fcabahrens * and limitations under the License.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * When distributing Covered Code, include this CDDL HEADER in each
fa9e4066f08beec538e775443c5be79dd423fcabahrens * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * If applicable, add the following below this CDDL HEADER, with the
fa9e4066f08beec538e775443c5be79dd423fcabahrens * fields enclosed by brackets "[]" replaced with your own identifying
fa9e4066f08beec538e775443c5be79dd423fcabahrens * information: Portions Copyright [yyyy] [name of copyright owner]
fa9e4066f08beec538e775443c5be79dd423fcabahrens * CDDL HEADER END
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
33408eef27eb2599d62f65cbf4c8a8fb8d5ac541Lori Alt * Use is subject to license terms.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Function prototypes for the SMB module.
fa9e4066f08beec538e775443c5be79dd423fcabahrensextern "C" {
99653d4ee642c6528e88224f12409a5f23060994eschrock#define smb_gmt2local(_sr_, _gmt_) ((_gmt_) - (_sr_)->sr_gmtoff)
99653d4ee642c6528e88224f12409a5f23060994eschrock#define smb_local2gmt(_sr_, _local_) ((_local_) + (_sr_)->sr_gmtoff)
99653d4ee642c6528e88224f12409a5f23060994eschrock/* Why? uint32_t inet_addr(char *str); */
99653d4ee642c6528e88224f12409a5f23060994eschrock * SMB request handers called from the dispatcher.
ecd6cf800b63704be73fb264c3f5b6e0dafc068dmarks smb_sdrc_t smb_pre_##NAME(smb_request_t *, smb_xa_t *); \
ecd6cf800b63704be73fb264c3f5b6e0dafc068dmarkssmb_sdrc_t smb_nt_transact_notify_change(struct smb_request *, struct smb_xa *);
ecd6cf800b63704be73fb264c3f5b6e0dafc068dmarkssmb_sdrc_t smb_nt_transact_query_security_info(struct smb_request *,
ecd6cf800b63704be73fb264c3f5b6e0dafc068dmarkssmb_sdrc_t smb_nt_transact_set_security_info(struct smb_request *,
ecd6cf800b63704be73fb264c3f5b6e0dafc068dmarkssmb_sdrc_t smb_nt_transact_ioctl(struct smb_request *, struct smb_xa *);
ecd6cf800b63704be73fb264c3f5b6e0dafc068dmarkssmb_sdrc_t smb_com_trans2_create_directory(struct smb_request *,
fa9e4066f08beec538e775443c5be79dd423fcabahrenssmb_sdrc_t smb_com_trans2_find_first2(struct smb_request *, struct smb_xa *);
fa9e4066f08beec538e775443c5be79dd423fcabahrenssmb_sdrc_t smb_com_trans2_find_next2(struct smb_request *, struct smb_xa *);
fa9e4066f08beec538e775443c5be79dd423fcabahrenssmb_sdrc_t smb_com_trans2_query_fs_information(struct smb_request *,
fa9e4066f08beec538e775443c5be79dd423fcabahrenssmb_sdrc_t smb_com_trans2_query_path_information(struct smb_request *,
99653d4ee642c6528e88224f12409a5f23060994eschrocksmb_sdrc_t smb_com_trans2_query_file_information(struct smb_request *,
99653d4ee642c6528e88224f12409a5f23060994eschrocksmb_sdrc_t smb_com_trans2_set_path_information(struct smb_request *,
99653d4ee642c6528e88224f12409a5f23060994eschrocksmb_sdrc_t smb_com_trans2_set_file_information(struct smb_request *,
99653d4ee642c6528e88224f12409a5f23060994eschrock * Logging functions
99653d4ee642c6528e88224f12409a5f23060994eschrockvoid smb_correct_keep_alive_values(uint32_t new_keep_alive);
99653d4ee642c6528e88224f12409a5f23060994eschrockint smb_set_file_size(smb_request_t *, smb_node_t *);
99653d4ee642c6528e88224f12409a5f23060994eschrockint smb_session_send(smb_session_t *, uint8_t type, struct mbuf_chain *);
ebedde844eddf46049b2403f974b50bcba47356eEric Taylorint smb_session_xprt_gethdr(smb_session_t *, smb_xprt_t *);
ebedde844eddf46049b2403f974b50bcba47356eEric Taylorvoid smb_process_file_notify_change_queue(struct smb_ofile *of);
ebedde844eddf46049b2403f974b50bcba47356eEric TaylorDWORD smb_oplock_acquire(struct smb_request *, struct smb_ofile *,
fa9e4066f08beec538e775443c5be79dd423fcabahrensvoid smb_oplock_release(struct smb_node *, boolean_t);
fa9e4066f08beec538e775443c5be79dd423fcabahrensboolean_t smb_oplock_conflict(struct smb_node *, struct smb_session *,
fa9e4066f08beec538e775443c5be79dd423fcabahrens * macros used in oplock processing
fa9e4066f08beec538e775443c5be79dd423fcabahrens * SMB_SAME_SESSION: Checks for equivalence
990b4856d0eaada6f8140335733a1b1771ed2746lling * of session. If an existing oplock is
29ab75c9a733dad2978c4860efd954b5625e3467rm * from the same IP address/session as the current
fa9e4066f08beec538e775443c5be79dd423fcabahrens * request, the oplock is not broken.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * SMB_ATTR_ONLY_OPEN: Checks to see if this is
fa9e4066f08beec538e775443c5be79dd423fcabahrens * an attribute-only open with no contravening
fa9e4066f08beec538e775443c5be79dd423fcabahrens * dispositions. Such an open cannot effect an
99653d4ee642c6528e88224f12409a5f23060994eschrock * oplock break. However, a contravening disposition
fa9e4066f08beec538e775443c5be79dd423fcabahrens * of FILE_SUPERSEDE or FILE_OVERWRITE can allow
fa9e4066f08beec538e775443c5be79dd423fcabahrens * an oplock break.
3d7072f8bd27709dba14f6fe336f149d25d9e207eschrockuint32_t smb_unlock_range(struct smb_request *, struct smb_node *,
3d7072f8bd27709dba14f6fe336f149d25d9e207eschrockuint32_t smb_lock_range(smb_request_t *, uint64_t, uint64_t, uint32_t,
3d7072f8bd27709dba14f6fe336f149d25d9e207eschrockDWORD smb_range_check(smb_request_t *, smb_node_t *, uint64_t, uint64_t,
3d7072f8bd27709dba14f6fe336f149d25d9e207eschrockint smb_mangle_name(ino64_t fileid, char *name, char *shortname,
fa94a07fd0519b8abfd871ad8fe60e6bebe1e2bbbrendanint smb_unmangle_name(struct smb_request *sr, cred_t *cred,
ee0eb9f2d12b8a03b5a193cd667735c1962e0c7bEric Schrock smb_node_t *dir_node, char *name, char *real_name, int realname_size,
8488aeb5df27784d479c16cde06a9e25cd9a1152taylorint smb_maybe_mangled_path(const char *path, size_t pathlen);
990b4856d0eaada6f8140335733a1b1771ed2746llingint smb_ascii_or_unicode_strlen(struct smb_request *, char *);
b1b8ab34de515a5e83206da22c3d7e563241b021llingint smb_ascii_or_unicode_strlen_null(struct smb_request *, char *);
b1b8ab34de515a5e83206da22c3d7e563241b021llingint smb_ascii_or_unicode_null_len(struct smb_request *);
fa9e4066f08beec538e775443c5be79dd423fcabahrensint smb_rdir_open(struct smb_request *, char *, unsigned short);
fa9e4066f08beec538e775443c5be79dd423fcabahrensint smb_rdir_next(smb_request_t *sr, smb_node_t **rnode,
fa9e4066f08beec538e775443c5be79dd423fcabahrensDWORD smb_validate_object_name(char *path, unsigned int ftype);
95173954d2b811ceb583a9012c3b16e1d0dd6438ekint smbsr_decode_vwv(struct smb_request *sr, char *fmt, ...);
32b87932f3ef0887d873b7f6d2d1943799b2afc0ekint smbsr_decode_data(struct smb_request *sr, char *fmt, ...);
32b87932f3ef0887d873b7f6d2d1943799b2afc0ekint smbsr_encode_result(struct smb_request *, int, int, char *, ...);
f67f35c39aa272d43489ee49625b4965cc83add2Eric Schrockvoid smbsr_set_error(smb_request_t *, smb_error_t *);
f67f35c39aa272d43489ee49625b4965cc83add2Eric Schrockvoid smbsr_warn(struct smb_request *, DWORD, uint16_t, uint16_t);
3d7072f8bd27709dba14f6fe336f149d25d9e207eschrockvoid smbsr_error(struct smb_request *, DWORD, uint16_t, uint16_t);
fa9e4066f08beec538e775443c5be79dd423fcabahrensint32_t smb_ux_to_dos_time(int32_t, int16_t *, int16_t *);
fa9e4066f08beec538e775443c5be79dd423fcabahrensint smb_mbc_vencodef(mbuf_chain_t *, char *, va_list);
fa9e4066f08beec538e775443c5be79dd423fcabahrensint smb_mbc_vdecodef(mbuf_chain_t *, char *, va_list);
fa9e4066f08beec538e775443c5be79dd423fcabahrensvoid smbsr_encode_header(struct smb_request *sr, int wct,
fa9e4066f08beec538e775443c5be79dd423fcabahrensvoid smb_od_destruct(struct smb_session *, struct smb_odir *);
fa9e4066f08beec538e775443c5be79dd423fcabahrensint smb_component_match(struct smb_request *sr, ino64_t fileid,
94de1d4cf6ec0a3bf040dcc4b8df107c4ed36b51eschrockint smb_lock_range_access(struct smb_request *, struct smb_node *,
89a89ebfd7c3b4056afe2c03e959e22824df777dlling * Socket functions
99653d4ee642c6528e88224f12409a5f23060994eschrockksocket_t smb_socreate(int domain, int type, int protocol);
c5904d138f3bdf0762dbf452a43d5a5c387ea6a8eschrockint smb_sorecv(ksocket_t so, void *msg, size_t len);
e829d913cde9eeff0efd355502799863d4f74f69ckint smb_net_txr_send(ksocket_t, smb_txlst_t *, smb_txreq_t *);
24e697d414a4df0377b91a2875f029e7b5f97247ck * SMB RPC interface
c67d9675bbc8392fe45f3a7dfbda1ad4daa1eb07eschrocksmb_sdrc_t smb_opipe_transact(smb_request_t *, struct uio *);
2a6b87f07ac0c0b819179c84afe5a60afa04cfa5ekvoid smb_user_context_init(smb_user_t *, smb_opipe_context_t *);
55434c770c89aa1b84474f2559a106803511aba0ek * SMB server functions (file smb_server.c)
fa9e4066f08beec538e775443c5be79dd423fcabahrensint smb_server_dr_ulist_get(int, smb_dr_ulist_t *, int);
b81d61a68b235e0529ebadc18e14d9d1dd52a258llingint smb_server_share_unexport(char *, char *);
990b4856d0eaada6f8140335733a1b1771ed2746llingvoid smb_server_reconnection_check(smb_server_t *, smb_session_t *);
990b4856d0eaada6f8140335733a1b1771ed2746llingvoid smb_server_get_cfg(smb_server_t *, smb_kmod_cfg_t *);
990b4856d0eaada6f8140335733a1b1771ed2746lling * SMB node functions (file smb_node.c)
0a48a24e663a04e34e2ed4e55390ad96f178dbeatimhstruct smb_node *smb_node_lookup(struct smb_request *sr, struct open_param *op,
0a48a24e663a04e34e2ed4e55390ad96f178dbeatimh cred_t *cr, vnode_t *vp, char *od_name, smb_node_t *dir_snode,
e9dbad6f263d5570ed7ff5443ec5b958af8c24d7eschrockstruct smb_node *smb_stream_node_lookup(struct smb_request *sr, cred_t *cr,
e9dbad6f263d5570ed7ff5443ec5b958af8c24d7eschrock smb_node_t *fnode, vnode_t *xattrdirvp, vnode_t *vp, char *stream_name,
990b4856d0eaada6f8140335733a1b1771ed2746llingint smb_node_assert(smb_node_t *node, const char *file, int line);
edea4b556f0b07459cdcc780ffcd28a40b374945Lin Lingint smb_node_rename(smb_node_t *from_dir_snode, smb_node_t *ret_snode,
148434217c040ea38dc844384f6ba68d9b325906Matthew Ahrensint smb_node_root_init(vnode_t *, smb_server_t *, smb_node_t **);
148434217c040ea38dc844384f6ba68d9b325906Matthew Ahrensvoid smb_node_add_lock(smb_node_t *node, smb_lock_t *lock);
e9dbad6f263d5570ed7ff5443ec5b958af8c24d7eschrockvoid smb_node_destroy_lock(smb_node_t *node, smb_lock_t *lock);
e9dbad6f263d5570ed7ff5443ec5b958af8c24d7eschrockvoid smb_node_destroy_lock_by_ofile(smb_node_t *node, smb_ofile_t *file);
e9dbad6f263d5570ed7ff5443ec5b958af8c24d7eschrockvoid smb_node_start_crit(smb_node_t *node, krw_t mode);
e9dbad6f263d5570ed7ff5443ec5b958af8c24d7eschrocku_offset_t smb_node_get_size(smb_node_t *, smb_attr_t *);
e9dbad6f263d5570ed7ff5443ec5b958af8c24d7eschrockvoid smb_node_set_time(struct smb_node *node, timestruc_t *crtime,
990b4856d0eaada6f8140335733a1b1771ed2746llingtimestruc_t *smb_node_get_crtime(struct smb_node *node);
2e5e9e19867a0d75685f5beb2fe1b0e31491d49bSanjeev Bagewaditimestruc_t *smb_node_get_atime(struct smb_node *node);
fa9e4066f08beec538e775443c5be79dd423fcabahrenstimestruc_t *smb_node_get_ctime(struct smb_node *node);
fa9e4066f08beec538e775443c5be79dd423fcabahrenstimestruc_t *smb_node_get_mtime(struct smb_node *node);
fa9e4066f08beec538e775443c5be79dd423fcabahrensvoid smb_node_set_dosattr(struct smb_node *, uint32_t);
b1b8ab34de515a5e83206da22c3d7e563241b021llingint smb_node_set_delete_on_close(smb_node_t *, cred_t *);
990b4856d0eaada6f8140335733a1b1771ed2746lling * Pathname functions
990b4856d0eaada6f8140335733a1b1771ed2746llingint smb_pathname_reduce(struct smb_request *, cred_t *,
990b4856d0eaada6f8140335733a1b1771ed2746lling const char *, smb_node_t *, smb_node_t *, smb_node_t **, char *);
990b4856d0eaada6f8140335733a1b1771ed2746llingint smb_pathname(struct smb_request *, char *, int, smb_node_t *,
990b4856d0eaada6f8140335733a1b1771ed2746lling smb_node_t *, smb_node_t **, smb_node_t **, cred_t *);
990b4856d0eaada6f8140335733a1b1771ed2746lling * smb_vfs functions
b1b8ab34de515a5e83206da22c3d7e563241b021lling * String manipulation function
b1b8ab34de515a5e83206da22c3d7e563241b021llingint smb_sync_fsattr(struct smb_request *sr, cred_t *cr,
b1b8ab34de515a5e83206da22c3d7e563241b021llingvoid smb_encode_stream_info(struct smb_request *sr, struct smb_xa *xa,
fa9e4066f08beec538e775443c5be79dd423fcabahrens/* NOTIFY CHANGE */
fa9e4066f08beec538e775443c5be79dd423fcabahrensvoid smb_process_session_notify_change_queue(smb_session_t *, smb_tree_t *);
fa9e4066f08beec538e775443c5be79dd423fcabahrensvoid smb_process_node_notify_change_queue(struct smb_node *);
fa9e4066f08beec538e775443c5be79dd423fcabahrensvoid smb_reply_specific_cancel_request(struct smb_request *);
99653d4ee642c6528e88224f12409a5f23060994eschrockint smb_try_grow(struct smb_request *sr, int64_t new_size);
7f1f55ea3af0e6153a8ee9316c7f0b8b4f1ba773vb/* functions from smb_memory_manager.c */
7f1f55ea3af0e6153a8ee9316c7f0b8b4f1ba773vbunsigned short smb_worker_getnum();
3cb34c601f3ef3016f638574f5982e80c3735c71ahrensvoid smb_preset_delete_on_close(struct smb_ofile *file);
3cb34c601f3ef3016f638574f5982e80c3735c71ahrensvoid smb_commit_delete_on_close(struct smb_ofile *file);
148434217c040ea38dc844384f6ba68d9b325906Matthew Ahrensint smb_stream_parse_name(char *, char *, char *);
148434217c040ea38dc844384f6ba68d9b325906Matthew AhrensDWORD smb_trans2_set_information(struct smb_request *sr,
4ccbb6e737373468bb9dc1709618384cce4c9f92ahrens/* SMB signing routines smb_signing.c */
4ccbb6e737373468bb9dc1709618384cce4c9f92ahrens smb_session_key_t *session_key, char *resp, int resp_len);
c6765aab6b83692cd10f1dcf73ce15203a5befa7eschrockint smb_sign_check_request(struct smb_request *req);
4ccbb6e737373468bb9dc1709618384cce4c9f92ahrensint smb_sign_check_secondary(struct smb_request *req, unsigned int seqnum);
4ccbb6e737373468bb9dc1709618384cce4c9f92ahrensvoid smb_sign_reply(struct smb_request *req, struct mbuf_chain *reply);
c6765aab6b83692cd10f1dcf73ce15203a5befa7eschrockboolean_t smb_sattr_check(smb_attr_t *, char *, unsigned short);
4ccbb6e737373468bb9dc1709618384cce4c9f92ahrens * session functions (file smb_session.c)
33408eef27eb2599d62f65cbf4c8a8fb8d5ac541Lori Altsmb_session_t *smb_session_create(ksocket_t, uint16_t, smb_server_t *);
33408eef27eb2599d62f65cbf4c8a8fb8d5ac541Lori Altvoid smb_session_reconnection_check(smb_session_list_t *, smb_session_t *);
3cb34c601f3ef3016f638574f5982e80c3735c71ahrensvoid smb_session_cancel_requests(smb_session_t *, smb_tree_t *,
fa9e4066f08beec538e775443c5be79dd423fcabahrensvoid smb_session_disconnect_share(smb_session_list_t *, char *);
fa9e4066f08beec538e775443c5be79dd423fcabahrensvoid smb_session_list_constructor(smb_session_list_t *);
fa9e4066f08beec538e775443c5be79dd423fcabahrensvoid smb_session_list_destructor(smb_session_list_t *);
fa9e4066f08beec538e775443c5be79dd423fcabahrensvoid smb_session_list_append(smb_session_list_t *, smb_session_t *);
fa9e4066f08beec538e775443c5be79dd423fcabahrensvoid smb_session_list_delete_tail(smb_session_list_t *);
5aba80db367b061758a29154d304977d00d8e4f4cksmb_session_t *smb_session_list_activate_head(smb_session_list_t *);
7f1f55ea3af0e6153a8ee9316c7f0b8b4f1ba773vbvoid smb_session_list_terminate(smb_session_list_t *, smb_session_t *);
7b97dc1abb536bd13204496f8ae5a6f2fe9f2fb3rmsmb_user_t *smb_session_dup_user(smb_session_t *, char *, char *);
fa9e4066f08beec538e775443c5be79dd423fcabahrensvoid smb_session_correct_keep_alive_values(smb_session_list_t *, uint32_t);
fa9e4066f08beec538e775443c5be79dd423fcabahrenssmb_request_t *smb_request_alloc(smb_session_t *, int);
fa9e4066f08beec538e775443c5be79dd423fcabahrens * ofile functions (file smb_ofile.c)
fa9e4066f08beec538e775443c5be79dd423fcabahrenssmb_ofile_t *smb_ofile_lookup_by_fid(smb_tree_t *, uint16_t);
fa9e4066f08beec538e775443c5be79dd423fcabahrenssmb_ofile_t *smb_ofile_open(smb_tree_t *, smb_node_t *, uint16_t,
fa9e4066f08beec538e775443c5be79dd423fcabahrens struct open_param *, uint16_t, uint32_t, smb_error_t *);
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahluint32_t smb_ofile_access(smb_ofile_t *, cred_t *, uint32_t);
fa9e4066f08beec538e775443c5be79dd423fcabahrensint smb_ofile_seek(smb_ofile_t *, ushort_t, int32_t, uint32_t *);
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahlvoid smb_ofile_close_timestamp_update(smb_ofile_t *, uint32_t);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw#define smb_ofile_granted_access(_of_) ((_of_)->f_granted_access)
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl * odir functions (file smb_odir.c)
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahlsmb_odir_t *smb_odir_open(smb_tree_t *tree, smb_node_t *node, char *pattern,
fa9e4066f08beec538e775443c5be79dd423fcabahrensvoid smb_odir_close_all_by_pid(smb_tree_t *tree, uint16_t pid);
fa9e4066f08beec538e775443c5be79dd423fcabahrenssmb_odir_t *smb_odir_lookup_by_sid(smb_tree_t *tree, uint16_t sid);
fa9e4066f08beec538e775443c5be79dd423fcabahrens * SMB user functions (file smb_user.c)
e9dbad6f263d5570ed7ff5443ec5b958af8c24d7eschrocksmb_user_t *smb_user_lookup_by_uid(smb_session_t *, uint16_t);
fa9e4066f08beec538e775443c5be79dd423fcabahrenssmb_user_t *smb_user_lookup_by_state(smb_session_t *, smb_user_t *);
fa9e4066f08beec538e775443c5be79dd423fcabahrenssmb_tree_t *smb_user_lookup_tree(smb_user_t *, uint16_t);
fa9e4066f08beec538e775443c5be79dd423fcabahrenssmb_tree_t *smb_user_lookup_share(smb_user_t *, const char *, smb_tree_t *);
fa9e4066f08beec538e775443c5be79dd423fcabahrenssmb_tree_t *smb_user_lookup_volume(smb_user_t *, const char *, smb_tree_t *);
fa9e4066f08beec538e775443c5be79dd423fcabahrensvoid smb_user_disconnect_share(smb_user_t *, const char *);
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahl * SMB tree functions (file smb_tree.c)
743a77ed89085d3c232c4a2f65ab4e19576839e2Alan Wright * SMB user's credential functions
743a77ed89085d3c232c4a2f65ab4e19576839e2Alan Wrightcred_t *smb_cred_create(smb_token_t *, uint32_t *);
743a77ed89085d3c232c4a2f65ab4e19576839e2Alan Wrightint smb_cred_is_member(cred_t *cr, smb_sid_t *sid);
f3861e1a2ceec23a5b699c24d814b7775a9e0b52ahlsmb_xa_t *smb_xa_create(smb_session_t *session, smb_request_t *sr,
3bb79bece53191f2cf27aa61a72ea1784a7ce700eschrock uint32_t total_parameter_count, uint32_t total_data_count,
fa9e4066f08beec538e775443c5be79dd423fcabahrensvoid smb_xa_rele(smb_session_t *session, smb_xa_t *xa);
void smb_check_status(void);
smb_thread_aw_t, void *);
#ifdef __cplusplus