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 #ifndef _SMBD_AUTHSVC_H
17 #define	_SMBD_AUTHSVC_H
18 
19 /*
20  * Declarations shared with authsvc modules.
21  */
22 
23 #include <sys/types.h>
24 #include <smbsrv/libsmb.h>
25 
26 /*
27  * This is the common authsvc_context shared by all back-ends.
28  * Note that ctx_mech_oid is really SPNEGO_MECH_OID, and the
29  * ctx_itoken, ctx_otoken members are SPNEGO_TOKEN_HANDLE,
30  * but this is using the underlying types so as to avoid
31  * dragging in spnego.h here.
32  */
33 typedef struct authsvc_context {
34 	int			ctx_socket;
35 	int 			ctx_mech_oid;
36 	int (*ctx_mh_work)(struct authsvc_context *);
37 	void (*ctx_mh_fini)(struct authsvc_context *);
38 	int			ctx_itoktype;
39 	int			ctx_negresult;
40 
41 	/* (in,out) SPNEGO token handles */
42 	void			*ctx_itoken;
43 	void			*ctx_otoken;
44 
45 	/* (in,out) raw (buf,len,type) */
46 	void			*ctx_irawbuf;
47 	uint_t			ctx_irawlen;
48 	int			ctx_irawtype;
49 	void			*ctx_orawbuf;
50 	uint_t			ctx_orawlen;
51 	int			ctx_orawtype;
52 
53 	/* (in,out) body (buf,len) */
54 	void			*ctx_ibodybuf;
55 	uint_t			ctx_ibodylen;
56 	void			*ctx_obodybuf;
57 	uint_t			ctx_obodylen;
58 
59 	/* who is the client */
60 	smb_lsa_clinfo_t	ctx_clinfo;
61 
62 	/* final authentication token */
63 	struct smb_token	*ctx_token;
64 
65 	/* private data for the back-end */
66 	void			*ctx_backend;
67 } authsvc_context_t;
68 
69 int smbd_krb5ssp_init(authsvc_context_t *);
70 int smbd_krb5ssp_work(authsvc_context_t *);
71 void smbd_krb5ssp_fini(authsvc_context_t *);
72 
73 int smbd_ntlmssp_init(authsvc_context_t *);
74 int smbd_ntlmssp_work(authsvc_context_t *);
75 void smbd_ntlmssp_fini(authsvc_context_t *);
76 
77 /* Exposed for unit tests. */
78 int smbd_authsvc_dispatch(authsvc_context_t *);
79 authsvc_context_t *smbd_authctx_create(void);
80 void smbd_authctx_destroy(authsvc_context_t *);
81 
82 #endif /* _SMBD_AUTHSVC_H */
83