1 /* NFSv4.1 client for Windows
2 * Copyright © 2012 The Regents of the University of Michigan
4 * Olga Kornievskaia <aglo@umich.edu>
5 * Casey Bodley <cbodley@umich.edu>
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.
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.
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
22 #ifndef _TIRPC_AUTH_GSS_H
23 #define _TIRPC_AUTH_GSS_H
26 #define SECURITY_WIN32
29 /* RPCSEC_SSPI control procedures. */
33 RPCSEC_SSPI_CONTINUE_INIT
= 2,
34 RPCSEC_SSPI_DESTROY
= 3
37 /* RPCSEC_SSPI services. */
39 RPCSEC_SSPI_SVC_NONE
= 1,
40 RPCSEC_SSPI_SVC_INTEGRITY
= 2,
41 RPCSEC_SSPI_SVC_PRIVACY
= 3
44 #define RPCSEC_SSPI_VERSION 1
46 #define sspi_name_t SEC_CHAR *
47 #define sspi_qop_t uint32_t
49 typedef struct _sspi_OID_desc
{
52 } sspi_OID_desc
, *sspi_OID
;
54 typedef struct _sspi_buffer_desc
{
57 } sspi_buffer_desc
, *sspi_buffer_t
;
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)
63 /* RPCSEC_SSPI security triple. */
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 */
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 */
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 */
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
,
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
);
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
);
120 #endif /* !_TIRPC_AUTH_GSS_H */