Use acquired credentials in GSSInitSecContext.
[gssweb.git] / json_gssapi / src / commands / GSSInitSecContext.h
1 /*
2  * Copyright (c) 2014, JANET(UK)
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  *
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  *
16  * 3. Neither the name of JANET(UK) nor the names of its contributors
17  *    may be used to endorse or promote products derived from this software
18  *    without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
24  * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
25  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
26  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
27  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
29  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
31  * OF THE POSSIBILITY OF SUCH DAMAGE.
32  *
33  */
34
35 #ifndef GSSINITSECCONTEXT_H
36 #define GSSINITSECCONTEXT_H
37
38 #include "GSSCommand.h"
39 #include <datamodel/GSSContext.h>
40 #include <datamodel/GSSCredential.h>
41 #include <datamodel/GSSName.h>
42 #include <datamodel/GSSOID.h>
43 #include <gssapi.h>
44
45 typedef OM_uint32 (KRB5_CALLCONV *init_sec_context_type)(
46     OM_uint32 *,        /* minor_status */
47     gss_cred_id_t,      /* claimant_cred_handle */
48     gss_ctx_id_t *,     /* context_handle */
49     gss_name_t,         /* target_name */
50     gss_OID,            /* mech_type (used to be const) */
51     OM_uint32,          /* req_flags */
52     OM_uint32,          /* time_req */
53     gss_channel_bindings_t,     /* input_chan_bindings */
54     gss_buffer_t,       /* input_token */
55     gss_OID *,          /* actual_mech_type */
56     gss_buffer_t,       /* output_token */
57     OM_uint32 *,        /* ret_flags */
58     OM_uint32 *         /* time_req */
59 );
60
61 class GSSInitSecContext : public GSSCommand
62 {
63 public:
64
65     OM_uint32 retVal;
66     OM_uint32 minor_status;
67     gss_ctx_id_t context_handle;
68     gss_name_t target_name;
69     OM_uint32 req_flags;
70     OM_uint32 time_req;
71     gss_buffer_desc input_token;
72     gss_buffer_desc output_token;
73     OM_uint32 ret_flags;
74     OM_uint32 time_rec;
75     
76   
77     void execute();
78     JSONObject *toJSON();
79     GSSInitSecContext(init_sec_context_type fn = &gss_init_sec_context);
80     GSSInitSecContext(JSONObject *params,  init_sec_context_type fn = &gss_init_sec_context);
81     
82     bool loadParameters(JSONObject *params);
83     bool zeroOut(bool initialized = true);
84     
85     // MRW -- make more accessors, make vars w/accessors private, or get rid of them?
86     // accessors
87     OM_uint32 getReqFlags() { return req_flags; }
88     OM_uint32 getTimeReq() { return time_req; }
89     gss_ctx_id_t getContextHandle() { return context_handle; }
90     init_sec_context_type getGSSFunction() { return function; }
91     GSSOID getMechType() { return mechType; };
92     GSSOID getActualMechType() { return actualMechType; };
93     
94     // complex accessors
95     const char * getTargetDisplayName();
96     
97 private:
98     init_sec_context_type function;
99     GSSContext context;
100     GSSOID mechType;
101     GSSOID actualMechType;
102     GSSName targetName;
103     std::string contextKey;
104     GSSCredential claimantCred;
105
106     JSONObject *values;
107 };
108
109 #endif // GSSINITSECCONTEXT_H