[LIBTIRPC]
[reactos.git] / reactos / dll / win32 / libtirpc / tirpc / rpc / auth_sspi.h
1 /* NFSv4.1 client for Windows
2 * Copyright © 2012 The Regents of the University of Michigan
3 *
4 * Olga Kornievskaia <aglo@umich.edu>
5 * Casey Bodley <cbodley@umich.edu>
6 *
7 * This library is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU Lesser General Public License as published by
9 * the Free Software Foundation; either version 2.1 of the License, or (at
10 * your option) any later version.
11 *
12 * This library is distributed in the hope that it will be useful, but
13 * without any warranty; without even the implied warranty of merchantability
14 * or fitness for a particular purpose. See the GNU Lesser General Public
15 * License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public License
18 * along with this library; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA
20 */
21
22 #ifndef _TIRPC_AUTH_GSS_H
23 #define _TIRPC_AUTH_GSS_H
24
25 #include <rpc/clnt.h>
26 #define SECURITY_WIN32
27 #include <security.h>
28
29 /* RPCSEC_SSPI control procedures. */
30 typedef enum {
31 RPCSEC_SSPI_DATA = 0,
32 RPCSEC_SSPI_INIT = 1,
33 RPCSEC_SSPI_CONTINUE_INIT = 2,
34 RPCSEC_SSPI_DESTROY = 3
35 } rpc_sspi_proc_t;
36
37 /* RPCSEC_SSPI services. */
38 typedef enum {
39 RPCSEC_SSPI_SVC_NONE = 1,
40 RPCSEC_SSPI_SVC_INTEGRITY = 2,
41 RPCSEC_SSPI_SVC_PRIVACY = 3
42 } rpc_sspi_svc_t;
43
44 #define RPCSEC_SSPI_VERSION 1
45
46 #define sspi_name_t SEC_CHAR *
47 #define sspi_qop_t uint32_t
48
49 typedef struct _sspi_OID_desc {
50 int length;
51 void *elements;
52 } sspi_OID_desc, *sspi_OID;
53
54 typedef struct _sspi_buffer_desc {
55 int length;
56 void *value;
57 } sspi_buffer_desc, *sspi_buffer_t;
58
59 #define SSPI_C_NO_NAME ((sspi_name_t) NULL)
60 #define SSPI_C_NO_BUFFER ((sspi_buffer_t) NULL)
61 #define SSPI_C_NO_CONTEXT ((PCtxtHandle) NULL)
62
63 /* RPCSEC_SSPI security triple. */
64 struct rpc_sspi_sec {
65 sspi_OID mech; /* mechanism */
66 uint32_t qop; /* quality of protection */
67 rpc_sspi_svc_t svc; /* service */
68 CredHandle cred; /* cred handle */
69 u_int req_flags; /* req flags for init_sec_context */
70 TimeStamp expiry;
71 };
72
73 /* Credentials. */
74 struct rpc_sspi_cred {
75 u_int gc_v; /* version */
76 rpc_sspi_proc_t gc_proc; /* control procedure */
77 u_int gc_seq; /* sequence number */
78 rpc_sspi_svc_t gc_svc; /* service */
79 sspi_buffer_desc gc_ctx; /* server's returned context handle */
80 };
81
82 /* Context creation response. */
83 struct rpc_sspi_init_res {
84 sspi_buffer_desc gr_ctx; /* context handle */
85 u_int gr_major; /* major status */
86 u_int gr_minor; /* minor status */
87 u_int gr_win; /* sequence window */
88 sspi_buffer_desc gr_token; /* token */
89 };
90
91 /* Prototypes. */
92 __BEGIN_DECLS
93 bool_t xdr_rpc_sspi_cred(XDR *xdrs, struct rpc_sspi_cred *p);
94 bool_t xdr_rpc_sspi_init_args(XDR *xdrs, sspi_buffer_desc *p);
95 bool_t xdr_rpc_sspi_init_res(XDR *xdrs, struct rpc_sspi_init_res *p);
96 bool_t xdr_rpc_sspi_data(XDR *xdrs, xdrproc_t xdr_func, caddr_t xdr_ptr,
97 PCtxtHandle ctx, sspi_qop_t qop,
98 rpc_sspi_svc_t svc, u_int seq);
99 AUTH *authsspi_create(CLIENT *, sspi_name_t, struct rpc_sspi_sec *);
100 AUTH *authsspi_create_default(CLIENT *, char *, int);
101 bool_t authsspi_service(AUTH *auth, int svc);
102 uint32_t sspi_get_mic(void *ctx, u_int qop, u_int seq,
103 sspi_buffer_desc *bufin, sspi_buffer_desc *bufout);
104 uint32_t sspi_verify_mic(void *ctx, u_int seq, sspi_buffer_desc *bufin,
105 sspi_buffer_desc *bufout, u_int *qop_state);
106 uint32_t sspi_wrap(void *ctx, u_int seq, sspi_buffer_desc *bufin,
107 sspi_buffer_desc *bufout, u_int *conf_state);
108 uint32_t sspi_unwrap(void *ctx, u_int seq, sspi_buffer_desc *bufin,
109 sspi_buffer_desc *bufout, u_int *conf_state,
110 u_int *qop_state);
111 void sspi_release_buffer(sspi_buffer_desc *buf);
112 uint32_t sspi_import_name(sspi_buffer_desc *name_in, sspi_name_t *name_out);
113
114 void log_debug(const char *fmt, ...);
115 void log_status(char *m, uint32_t major, uint32_t minor);
116 void log_hexdump(bool_t on, const u_char *title, const u_char *buf, int len, int offset);
117
118 __END_DECLS
119
120 #endif /* !_TIRPC_AUTH_GSS_H */