4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 only,
8 * as published by the Free Software Foundation.
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * General Public License version 2 for more details (a copy is included
14 * in the LICENSE file that accompanied this code).
16 * You should have received a copy of the GNU General Public License
17 * version 2 along with this program; If not, see
18 * http://www.gnu.org/licenses/gpl-2.0.html
23 * Copyright (C) 2013, Trustees of Indiana University
24 * Author: Andrew Korty <ajk@iu.edu>
27 #define DEBUG_SUBSYSTEM S_SEC
29 #include <linux/init.h>
30 #include <linux/module.h>
31 #include <linux/slab.h>
32 #include <linux/crypto.h>
33 #include <linux/mutex.h>
35 #include <liblustre.h>
39 #include <obd_class.h>
40 #include <obd_support.h>
43 #include "gss_internal.h"
51 __u32 gss_import_sec_context_sk(rawobj_t *inbuf, struct gss_ctx *gss_context)
53 struct sk_ctx *sk_context;
55 if (inbuf == NULL || inbuf->data == NULL)
58 OBD_ALLOC_PTR(sk_context);
59 if (sk_context == NULL)
62 gss_context->internal_ctx_id = sk_context;
63 CDEBUG(D_SEC, "succesfully imported sk context\n");
65 return GSS_S_COMPLETE;
69 __u32 gss_copy_reverse_context_sk(struct gss_ctx *gss_context_old,
70 struct gss_ctx *gss_context_new)
72 struct sk_ctx *sk_context_old;
73 struct sk_ctx *sk_context_new;
75 OBD_ALLOC_PTR(sk_context_new);
76 if (sk_context_new == NULL)
79 sk_context_old = gss_context_old->internal_ctx_id;
80 memcpy(sk_context_new, sk_context_old, sizeof *sk_context_new);
81 gss_context_new->internal_ctx_id = sk_context_new;
82 CDEBUG(D_SEC, "succesfully copied reverse sk context\n");
84 return GSS_S_COMPLETE;
88 __u32 gss_inquire_context_sk(struct gss_ctx *gss_context,
89 unsigned long *endtime)
92 return GSS_S_COMPLETE;
96 __u32 gss_get_mic_sk(struct gss_ctx *gss_context,
106 return GSS_S_COMPLETE;
110 __u32 gss_verify_mic_sk(struct gss_ctx *gss_context,
117 return GSS_S_COMPLETE;
121 __u32 gss_wrap_sk(struct gss_ctx *gss_context, rawobj_t *gss_header,
122 rawobj_t *message, int message_buffer_length,
125 return GSS_S_COMPLETE;
129 __u32 gss_unwrap_sk(struct gss_ctx *gss_context, rawobj_t *gss_header,
130 rawobj_t *token, rawobj_t *message)
132 return GSS_S_COMPLETE;
136 __u32 gss_prep_bulk_sk(struct gss_ctx *gss_context,
137 struct ptlrpc_bulk_desc *desc)
139 return GSS_S_COMPLETE;
143 __u32 gss_wrap_bulk_sk(struct gss_ctx *gss_context,
144 struct ptlrpc_bulk_desc *desc, rawobj_t *token,
147 return GSS_S_COMPLETE;
151 __u32 gss_unwrap_bulk_sk(struct gss_ctx *gss_context,
152 struct ptlrpc_bulk_desc *desc,
153 rawobj_t *token, int adj_nob)
155 return GSS_S_COMPLETE;
159 void gss_delete_sec_context_sk(void *internal_context)
161 struct sk_ctx *sk_context = internal_context;
163 OBD_FREE_PTR(sk_context);
166 int gss_display_sk(struct gss_ctx *gss_context, char *buf, int bufsize)
168 return snprintf(buf, bufsize, "sk");
171 static struct gss_api_ops gss_sk_ops = {
172 .gss_import_sec_context = gss_import_sec_context_sk,
173 .gss_copy_reverse_context = gss_copy_reverse_context_sk,
174 .gss_inquire_context = gss_inquire_context_sk,
175 .gss_get_mic = gss_get_mic_sk,
176 .gss_verify_mic = gss_verify_mic_sk,
177 .gss_wrap = gss_wrap_sk,
178 .gss_unwrap = gss_unwrap_sk,
179 .gss_prep_bulk = gss_prep_bulk_sk,
180 .gss_wrap_bulk = gss_wrap_bulk_sk,
181 .gss_unwrap_bulk = gss_unwrap_bulk_sk,
182 .gss_delete_sec_context = gss_delete_sec_context_sk,
183 .gss_display = gss_display_sk,
186 static struct subflavor_desc gss_sk_sfs[] = {
188 .sf_subflavor = SPTLRPC_SUBFLVR_SKI,
190 .sf_service = SPTLRPC_SVC_INTG,
194 .sf_subflavor = SPTLRPC_SUBFLVR_SKPI,
196 .sf_service = SPTLRPC_SVC_PRIV,
202 * currently we leave module owner NULL
204 static struct gss_api_mech gss_sk_mech = {
205 .gm_owner = NULL, /*THIS_MODULE, */
207 .gm_oid = (rawobj_t) {
209 "\053\006\001\004\001\311\146\215\126\001\000\001",
211 .gm_ops = &gss_sk_ops,
213 .gm_sfs = gss_sk_sfs,
216 int __init init_sk_module(void)
220 status = lgss_mech_register(&gss_sk_mech);
222 CERROR("Failed to register sk gss mechanism!\n");
227 void cleanup_sk_module(void)
229 lgss_mech_unregister(&gss_sk_mech);