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, 2015, Trustees of Indiana University
25 * Copyright (c) 2014, Intel Corporation.
27 * Author: Jeremy Filizetti <jfilizet@iu.edu>
28 * Author: Andrew Korty <ajk@iu.edu>
31 #define DEBUG_SUBSYSTEM S_SEC
32 #include <linux/init.h>
33 #include <linux/module.h>
34 #include <linux/slab.h>
35 #include <linux/crypto.h>
36 #include <linux/mutex.h>
39 #include <obd_class.h>
40 #include <obd_support.h>
43 #include "gss_internal.h"
52 __u32 gss_import_sec_context_null(rawobj_t *inbuf, struct gss_ctx *gss_context)
54 struct null_ctx *null_context;
56 if (inbuf == NULL || inbuf->data == NULL ||
57 inbuf->len != sizeof(*null_context)) {
58 CDEBUG(D_SEC, "Invalid input buffer for null context\n");
62 OBD_ALLOC_PTR(null_context);
63 if (null_context == NULL)
66 memcpy(&null_context->nc_token, inbuf->data, inbuf->len);
68 gss_context->internal_ctx_id = null_context;
69 CDEBUG(D_SEC, "successfully imported null context\n");
71 return GSS_S_COMPLETE;
75 __u32 gss_copy_reverse_context_null(struct gss_ctx *gss_context_old,
76 struct gss_ctx *gss_context_new)
78 struct null_ctx *null_context_old;
79 struct null_ctx *null_context_new;
81 OBD_ALLOC_PTR(null_context_new);
82 if (null_context_new == NULL)
85 null_context_old = gss_context_old->internal_ctx_id;
86 memcpy(null_context_new, null_context_old, sizeof(*null_context_new));
87 gss_context_new->internal_ctx_id = null_context_new;
88 CDEBUG(D_SEC, "successfully copied reverse null context\n");
90 return GSS_S_COMPLETE;
94 __u32 gss_inquire_context_null(struct gss_ctx *gss_context,
95 unsigned long *endtime)
97 /* quick timeout for testing purposes */
98 *endtime = cfs_time_current_sec() + 60;
99 return GSS_S_COMPLETE;
103 __u32 gss_wrap_null(struct gss_ctx *gss_context, rawobj_t *gss_header,
104 rawobj_t *message, int message_buffer_length,
107 return GSS_S_COMPLETE;
111 __u32 gss_unwrap_null(struct gss_ctx *gss_context, rawobj_t *gss_header,
112 rawobj_t *token, rawobj_t *message)
114 return GSS_S_COMPLETE;
118 __u32 gss_prep_bulk_null(struct gss_ctx *gss_context,
119 struct ptlrpc_bulk_desc *desc)
121 return GSS_S_COMPLETE;
125 __u32 gss_wrap_bulk_null(struct gss_ctx *gss_context,
126 struct ptlrpc_bulk_desc *desc, rawobj_t *token,
129 return GSS_S_COMPLETE;
133 __u32 gss_unwrap_bulk_null(struct gss_ctx *gss_context,
134 struct ptlrpc_bulk_desc *desc,
135 rawobj_t *token, int adj_nob)
137 return GSS_S_COMPLETE;
141 void gss_delete_sec_context_null(void *internal_context)
143 struct null_ctx *null_context = internal_context;
145 OBD_FREE_PTR(null_context);
148 int gss_display_null(struct gss_ctx *gss_context, char *buf, int bufsize)
150 return snprintf(buf, bufsize, "null");
154 __u32 gss_get_mic_null(struct gss_ctx *gss_context, int message_count,
155 rawobj_t *messages, int iov_count, lnet_kiov_t *iovs,
158 return GSS_S_COMPLETE;
162 __u32 gss_verify_mic_null(struct gss_ctx *gss_context, int message_count,
163 rawobj_t *messages, int iov_count, lnet_kiov_t *iovs,
166 return GSS_S_COMPLETE;
169 static struct gss_api_ops gss_null_ops = {
170 .gss_import_sec_context = gss_import_sec_context_null,
171 .gss_copy_reverse_context = gss_copy_reverse_context_null,
172 .gss_inquire_context = gss_inquire_context_null,
173 .gss_get_mic = gss_get_mic_null,
174 .gss_verify_mic = gss_verify_mic_null,
175 .gss_wrap = gss_wrap_null,
176 .gss_unwrap = gss_unwrap_null,
177 .gss_prep_bulk = gss_prep_bulk_null,
178 .gss_wrap_bulk = gss_wrap_bulk_null,
179 .gss_unwrap_bulk = gss_unwrap_bulk_null,
180 .gss_delete_sec_context = gss_delete_sec_context_null,
181 .gss_display = gss_display_null,
184 static struct subflavor_desc gss_null_sfs[] = {
186 .sf_subflavor = SPTLRPC_SUBFLVR_GSSNULL,
188 .sf_service = SPTLRPC_SVC_NULL,
194 * currently we leave module owner NULL
196 static struct gss_api_mech gss_null_mech = {
197 .gm_owner = NULL, /*THIS_MODULE, */
198 .gm_name = "gssnull",
199 .gm_oid = (rawobj_t) {
201 "\053\006\001\004\001\311\146\215\126\001\000\000"
203 .gm_ops = &gss_null_ops,
205 .gm_sfs = gss_null_sfs,
208 int __init init_null_module(void)
212 status = lgss_mech_register(&gss_null_mech);
214 CERROR("Failed to register null gss mechanism!\n");
219 void cleanup_null_module(void)
221 lgss_mech_unregister(&gss_null_mech);