usr/src/uts/common/gssapi/mechs/dummy/dmech.c
author Bayard Bell <buffer.g.overflow@gmail.com>
Thu, 15 Sep 2011 18:27:52 +0100
changeset 13452 6bec9720e054
parent 0 68f95e015346
child 14100 9a220e49d686
permissions -rw-r--r--
1073 migrate kernel modules from ancient _depends_on to true ELF dependencies Reviewed by: Adam Leventhal <[email protected]> Reviewed by: Garrett D'Amore <[email protected]> Approved by: Richard Lowe <[email protected]>
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     1
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     2
 * CDDL HEADER START
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     3
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     4
 * The contents of this file are subject to the terms of the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     5
 * Common Development and Distribution License, Version 1.0 only
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     6
 * (the "License").  You may not use this file except in compliance
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     7
 * with the License.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     8
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     9
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    10
 * or http://www.opensolaris.org/os/licensing.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    11
 * See the License for the specific language governing permissions
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    12
 * and limitations under the License.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    13
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    14
 * When distributing Covered Code, include this CDDL HEADER in each
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    15
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    16
 * If applicable, add the following below this CDDL HEADER, with the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    17
 * fields enclosed by brackets "[]" replaced with your own identifying
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    18
 * information: Portions Copyright [yyyy] [name of copyright owner]
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    19
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    20
 * CDDL HEADER END
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    21
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    22
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    23
 * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    24
 * Use is subject to license terms.
13452
6bec9720e054 1073 migrate kernel modules from ancient _depends_on to true ELF dependencies
Bayard Bell <buffer.g.overflow@gmail.com>
parents: 0
diff changeset
    25
 * Copyright (c) 2011 Bayard G. Bell. All rights reserved.
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    26
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    27
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    28
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    29
 * A module that implements a dummy security mechanism.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    30
 * It's mainly used to test GSS-API application. Multiple tokens
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    31
 * exchanged during security context establishment can be
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    32
 * specified through dummy_mech.conf located in /etc.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    33
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    34
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    35
#include <sys/types.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    36
#include <sys/modctl.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    37
#include <sys/errno.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    38
#include <gssapiP_dummy.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    39
#include <gssapi_err_generic.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    40
#include <mechglueP.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    41
#include <gssapi/kgssapi_defs.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    42
#include <sys/debug.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    43
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    44
#ifdef DUMMY_MECH_DEBUG
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    45
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    46
 * Kernel kgssd module debugging aid. The global variable "dummy_mech_log"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    47
 * is a bit mask which allows various types of debugging messages
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    48
 * to be printed out.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    49
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    50
 *       dummy_mech_log & 1  will cause actual failures to be printed.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    51
 *       dummy_mech_log & 2  will cause informational messages to be
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    52
 *                       printed on the client side of kgssd.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    53
 *       dummy_mech_log & 4  will cause informational messages to be
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    54
 *                       printed on the server side of kgssd.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    55
 *       dummy_mech_log & 8  will cause informational messages to be
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    56
 *                       printed on both client and server side of kgssd.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    57
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    58
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    59
uint_t dummy_mech_log = 1;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    60
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    61
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    62
/* Local defines */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    63
#define	MAGIC_TOKEN_NUMBER 12345
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    64
/* private routines for dummy_mechanism */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    65
static gss_buffer_desc make_dummy_token_msg(void *data, int datalen);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    66
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    67
static int der_length_size(int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    68
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    69
static void der_write_length(unsigned char **, int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    70
static int der_read_length(unsigned char **, int *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    71
static int g_token_size(gss_OID mech, unsigned int body_size);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    72
static void g_make_token_header(gss_OID mech, int body_size,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    73
				unsigned char **buf, int tok_type);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    74
static int g_verify_token_header(gss_OID mech, int *body_size,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    75
				unsigned char **buf_in, int tok_type,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    76
				int toksize);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    77
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    78
/* private global variables */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    79
static int dummy_token_nums;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    80
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    81
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    82
 * This OID:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    83
 * { iso(1) org(3) internet(6) dod(1) private(4) enterprises(1) sun(42)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    84
 * products(2) gssapi(26) mechtypes(1) dummy(2) }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    85
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    86
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    87
static struct gss_config dummy_mechanism =
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    88
	{{10, "\053\006\001\004\001\052\002\032\001\002"},
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    89
	NULL,	/* context */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    90
	NULL,	/* next */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    91
	TRUE,	/* uses_kmod */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    92
/* EXPORT DELETE START */ /* CRYPT DELETE START */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    93
	dummy_gss_unseal,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    94
/* EXPORT DELETE END */ /* CRYPT DELETE END */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    95
	dummy_gss_delete_sec_context,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    96
/* EXPORT DELETE START */ /* CRYPT DELETE START */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    97
	dummy_gss_seal,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    98
/* EXPORT DELETE END */ /* CRYPT DELETE END */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    99
	dummy_gss_import_sec_context,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   100
/* EXPORT DELETE START */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   101
/* CRYPT DELETE START */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   102
#if 0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   103
/* CRYPT DELETE END */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   104
	dummy_gss_seal,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   105
	dummy_gss_unseal,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   106
/* CRYPT DELETE START */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   107
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   108
/* CRYPT DELETE END */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   109
/* EXPORT DELETE END */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   110
	dummy_gss_sign,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   111
	dummy_gss_verify
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   112
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   113
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   114
static gss_mechanism
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   115
gss_mech_initialize()
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   116
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   117
	dprintf("Entering gss_mech_initialize\n");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   118
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   119
	if (dummy_token_nums == 0)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   120
		dummy_token_nums = 1;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   121
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   122
	dprintf("Leaving gss_mech_initialize\n");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   123
	return (&dummy_mechanism);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   124
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   125
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   126
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   127
 * Clean up after a failed mod_install()
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   128
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   129
static void
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   130
gss_mech_fini()
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   131
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   132
	/* Nothing to do */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   133
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   134
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   135
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   136
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   137
 * Module linkage information for the kernel.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   138
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   139
extern struct mod_ops mod_miscops;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   140
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   141
static struct modlmisc modlmisc = {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   142
	&mod_miscops, "in-kernel dummy GSS mechanism"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   143
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   144
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   145
static struct modlinkage modlinkage = {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   146
	MODREV_1,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   147
	(void *)&modlmisc,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   148
	NULL
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   149
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   150
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   151
static int dummy_fini_code = EBUSY;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   152
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   153
int
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   154
_init()
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   155
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   156
	int retval;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   157
	gss_mechanism mech, tmp;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   158
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   159
	mech = gss_mech_initialize();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   160
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   161
	mutex_enter(&__kgss_mech_lock);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   162
	tmp = __kgss_get_mechanism(&mech->mech_type);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   163
	if (tmp != NULL) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   164
		DUMMY_MECH_LOG0(8,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   165
			"dummy GSS mechanism: mechanism already in table.\n");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   166
		if (tmp->uses_kmod == TRUE) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   167
			DUMMY_MECH_LOG0(8, "dummy GSS mechanism: mechanism "
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   168
				"table supports kernel operations!\n");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   169
		}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   170
		/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   171
		 * keep us loaded, but let us be unloadable. This
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   172
		 * will give the developer time to trouble shoot
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   173
		 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   174
		dummy_fini_code = 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   175
	} else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   176
		__kgss_add_mechanism(mech);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   177
		ASSERT(__kgss_get_mechanism(&mech->mech_type) == mech);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   178
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   179
	mutex_exit(&__kgss_mech_lock);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   180
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   181
	if ((retval = mod_install(&modlinkage)) != 0)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   182
		gss_mech_fini();	/* clean up */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   183
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   184
	return (retval);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   185
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   186
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   187
int
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   188
_fini()
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   189
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   190
	int ret = dummy_fini_code;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   191
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   192
	if (ret == 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   193
		ret = (mod_remove(&modlinkage));
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   194
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   195
	return (ret);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   196
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   197
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   198
int
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   199
_info(struct modinfo *modinfop)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   200
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   201
	return (mod_info(&modlinkage, modinfop));
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   202
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   203
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   204
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   205
/*ARGSUSED*/
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   206
static OM_uint32
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   207
dummy_gss_sign(context, minor_status, context_handle,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   208
		qop_req, message_buffer, message_token,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   209
		gssd_ctx_verifier)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   210
	void *context;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   211
	OM_uint32 *minor_status;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   212
	gss_ctx_id_t context_handle;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   213
	int qop_req;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   214
	gss_buffer_t message_buffer;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   215
	gss_buffer_t message_token;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   216
	OM_uint32 gssd_ctx_verifier;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   217
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   218
	dummy_gss_ctx_id_rec	*ctx;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   219
	char token_string[] = "dummy_gss_sign";
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   220
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   221
	dprintf("Entering gss_sign\n");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   222
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   223
	if (context_handle == GSS_C_NO_CONTEXT)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   224
		return (GSS_S_NO_CONTEXT);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   225
	ctx = (dummy_gss_ctx_id_rec *) context_handle;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   226
	ASSERT(ctx->established == 1);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   227
	ASSERT(ctx->token_number == MAGIC_TOKEN_NUMBER);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   228
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   229
	*message_token = make_dummy_token_msg(
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   230
				token_string, strlen(token_string));
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   231
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   232
	dprintf("Leaving gss_sign\n");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   233
	return (GSS_S_COMPLETE);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   234
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   235
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   236
/*ARGSUSED*/
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   237
static OM_uint32
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   238
	dummy_gss_verify(context, minor_status, context_handle,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   239
		message_buffer, token_buffer, qop_state,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   240
		gssd_ctx_verifier)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   241
	void *context;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   242
	OM_uint32 *minor_status;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   243
	gss_ctx_id_t context_handle;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   244
	gss_buffer_t message_buffer;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   245
	gss_buffer_t token_buffer;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   246
	int *qop_state;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   247
	OM_uint32 gssd_ctx_verifier;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   248
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   249
	unsigned char *ptr;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   250
	int bodysize;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   251
	int err;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   252
	dummy_gss_ctx_id_rec	*ctx;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   253
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   254
	dprintf("Entering gss_verify\n");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   255
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   256
	if (context_handle == GSS_C_NO_CONTEXT)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   257
		return (GSS_S_NO_CONTEXT);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   258
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   259
	ctx = (dummy_gss_ctx_id_rec *) context_handle;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   260
	ASSERT(ctx->established == 1);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   261
	ASSERT(ctx->token_number == MAGIC_TOKEN_NUMBER);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   262
	/* Check for defective input token. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   263
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   264
	ptr = (unsigned char *) token_buffer->value;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   265
	if (err = g_verify_token_header((gss_OID)gss_mech_dummy, &bodysize,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   266
					&ptr, 0,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   267
					token_buffer->length)) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   268
		*minor_status = err;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   269
		return (GSS_S_DEFECTIVE_TOKEN);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   270
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   271
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   272
	*qop_state = GSS_C_QOP_DEFAULT;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   273
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   274
	dprintf("Leaving gss_verify\n");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   275
	return (GSS_S_COMPLETE);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   276
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   277
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   278
/* EXPORT DELETE START */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   279
/*ARGSUSED*/
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   280
static OM_uint32
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   281
dummy_gss_seal(context, minor_status, context_handle, conf_req_flag,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   282
		qop_req, input_message_buffer, conf_state,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   283
		output_message_buffer, gssd_ctx_verifier)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   284
	void *context;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   285
	OM_uint32 *minor_status;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   286
	gss_ctx_id_t context_handle;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   287
	int conf_req_flag;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   288
	int qop_req;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   289
	gss_buffer_t input_message_buffer;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   290
	int *conf_state;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   291
	gss_buffer_t output_message_buffer;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   292
	OM_uint32 gssd_ctx_verifier;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   293
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   294
	gss_buffer_desc	output;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   295
	dummy_gss_ctx_id_rec	*ctx;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   296
	dprintf("Entering gss_seal\n");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   297
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   298
	if (context_handle == GSS_C_NO_CONTEXT)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   299
		return (GSS_S_NO_CONTEXT);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   300
	ctx = (dummy_gss_ctx_id_rec *) context_handle;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   301
	ASSERT(ctx->established == 1);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   302
	ASSERT(ctx->token_number == MAGIC_TOKEN_NUMBER);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   303
	/* Copy the input message to output message */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   304
	output = make_dummy_token_msg(
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   305
		input_message_buffer->value, input_message_buffer->length);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   306
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   307
	if (conf_state)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   308
		*conf_state = 1;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   309
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   310
	*output_message_buffer = output;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   311
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   312
	dprintf("Leaving gss_seal\n");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   313
	return (GSS_S_COMPLETE);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   314
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   315
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   316
/*ARGSUSED*/
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   317
static OM_uint32
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   318
dummy_gss_unseal(context, minor_status, context_handle,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   319
		input_message_buffer, output_message_buffer,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   320
		conf_state, qop_state, gssd_ctx_verifier)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   321
	void *context;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   322
	OM_uint32 *minor_status;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   323
	gss_ctx_id_t context_handle;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   324
	gss_buffer_t input_message_buffer;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   325
	gss_buffer_t output_message_buffer;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   326
	int *conf_state;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   327
	int *qop_state;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   328
	OM_uint32 gssd_ctx_verifier;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   329
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   330
	gss_buffer_desc output;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   331
	dummy_gss_ctx_id_rec	*ctx;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   332
	unsigned char *ptr;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   333
	int bodysize;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   334
	int err;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   335
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   336
	dprintf("Entering gss_unseal\n");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   337
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   338
	if (context_handle == GSS_C_NO_CONTEXT)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   339
		return (GSS_S_NO_CONTEXT);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   340
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   341
	ctx = (dummy_gss_ctx_id_rec *) context_handle;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   342
	ASSERT(ctx->established == 1);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   343
	ASSERT(ctx->token_number == MAGIC_TOKEN_NUMBER);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   344
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   345
	ptr = (unsigned char *) input_message_buffer->value;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   346
	if (err = g_verify_token_header((gss_OID)gss_mech_dummy, &bodysize,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   347
					&ptr, 0,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   348
					input_message_buffer->length)) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   349
		*minor_status = err;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   350
		return (GSS_S_DEFECTIVE_TOKEN);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   351
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   352
	output.length = bodysize;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   353
	output.value = (void *)MALLOC(output.length);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   354
	(void) memcpy(output.value, ptr, output.length);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   355
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   356
	*output_message_buffer = output;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   357
	*qop_state = GSS_C_QOP_DEFAULT;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   358
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   359
	if (conf_state)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   360
		*conf_state = 1;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   361
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   362
	dprintf("Leaving gss_unseal\n");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   363
	return (GSS_S_COMPLETE);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   364
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   365
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   366
/* EXPORT DELETE END */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   367
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   368
/*ARGSUSED*/
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   369
OM_uint32
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   370
	dummy_gss_import_sec_context(ct, minor_status, interprocess_token,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   371
					context_handle)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   372
void *ct;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   373
OM_uint32 *minor_status;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   374
gss_buffer_t interprocess_token;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   375
gss_ctx_id_t *context_handle;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   376
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   377
	unsigned char *ptr;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   378
	int bodysize;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   379
	int err;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   380
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   381
	/* Assume that we got ctx from the interprocess token. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   382
	dummy_gss_ctx_id_t ctx;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   383
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   384
	dprintf("Entering import_sec_context\n");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   385
	ptr = (unsigned char *) interprocess_token->value;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   386
	if (err = g_verify_token_header((gss_OID)gss_mech_dummy, &bodysize,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   387
					&ptr, 0,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   388
					interprocess_token->length)) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   389
		*minor_status = err;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   390
		return (GSS_S_DEFECTIVE_TOKEN);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   391
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   392
	ctx = (dummy_gss_ctx_id_t)MALLOC(sizeof (dummy_gss_ctx_id_rec));
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   393
	ctx->token_number = MAGIC_TOKEN_NUMBER;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   394
	ctx->established = 1;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   395
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   396
	*context_handle = (gss_ctx_id_t)ctx;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   397
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   398
	dprintf("Leaving import_sec_context\n");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   399
	return (GSS_S_COMPLETE);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   400
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   401
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   402
/*ARGSUSED*/
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   403
static OM_uint32
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   404
dummy_gss_delete_sec_context(ct, minor_status,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   405
			context_handle, output_token,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   406
			gssd_ctx_verifier)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   407
void *ct;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   408
OM_uint32 *minor_status;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   409
gss_ctx_id_t *context_handle;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   410
gss_buffer_t output_token;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   411
OM_uint32 gssd_ctx_verifier;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   412
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   413
	dummy_gss_ctx_id_t ctx;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   414
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   415
	dprintf("Entering delete_sec_context\n");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   416
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   417
	/* Make the length to 0, so the output token is not sent to peer */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   418
	if (output_token) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   419
		output_token->length = 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   420
		output_token->value = NULL;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   421
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   422
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   423
	if (*context_handle == GSS_C_NO_CONTEXT) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   424
		*minor_status = 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   425
		return (GSS_S_COMPLETE);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   426
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   427
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   428
	ctx = (dummy_gss_ctx_id_rec *) *context_handle;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   429
	ASSERT(ctx->established == 1);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   430
	ASSERT(ctx->token_number == MAGIC_TOKEN_NUMBER);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   431
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   432
	FREE(ctx, sizeof (dummy_gss_ctx_id_rec));
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   433
	*context_handle = GSS_C_NO_CONTEXT;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   434
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   435
	dprintf("Leaving delete_sec_context\n");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   436
	return (GSS_S_COMPLETE);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   437
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   438
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   439
static int
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   440
der_length_size(int length)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   441
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   442
	if (length < (1<<7))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   443
		return (1);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   444
	else if (length < (1<<8))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   445
		return (2);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   446
	else if (length < (1<<16))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   447
		return (3);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   448
	else if (length < (1<<24))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   449
		return (4);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   450
	else
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   451
		return (5);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   452
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   453
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   454
static void
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   455
der_write_length(unsigned char ** buf, int length)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   456
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   457
	if (length < (1<<7)) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   458
		*(*buf)++ = (unsigned char) length;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   459
	} else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   460
		*(*buf)++ = (unsigned char) (der_length_size(length)+127);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   461
		if (length >= (1<<24))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   462
			*(*buf)++ = (unsigned char) (length>>24);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   463
		if (length >= (1<<16))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   464
			*(*buf)++ = (unsigned char) ((length>>16)&0xff);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   465
		if (length >= (1<<8))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   466
			*(*buf)++ = (unsigned char) ((length>>8)&0xff);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   467
		*(*buf)++ = (unsigned char) (length&0xff);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   468
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   469
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   470
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   471
static int
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   472
der_read_length(buf, bufsize)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   473
unsigned char **buf;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   474
int *bufsize;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   475
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   476
	unsigned char sf;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   477
	int ret;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   478
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   479
	if (*bufsize < 1)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   480
		return (-1);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   481
	sf = *(*buf)++;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   482
	(*bufsize)--;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   483
	if (sf & 0x80) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   484
		if ((sf &= 0x7f) > ((*bufsize)-1))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   485
			return (-1);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   486
		if (sf > DUMMY_SIZE_OF_INT)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   487
			return (-1);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   488
		ret = 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   489
		for (; sf; sf--) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   490
			ret = (ret<<8) + (*(*buf)++);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   491
			(*bufsize)--;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   492
		}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   493
	} else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   494
		ret = sf;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   495
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   496
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   497
	return (ret);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   498
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   499
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   500
static int
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   501
g_token_size(mech, body_size)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   502
	gss_OID mech;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   503
	unsigned int body_size;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   504
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   505
	/* set body_size to sequence contents size */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   506
	body_size += 4 + (int)mech->length;	/* NEED overflow check */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   507
	return (1 + der_length_size(body_size) + body_size);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   508
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   509
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   510
static void
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   511
g_make_token_header(mech, body_size, buf, tok_type)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   512
	gss_OID mech;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   513
	int body_size;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   514
	unsigned char **buf;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   515
	int tok_type;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   516
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   517
	*(*buf)++ = 0x60;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   518
	der_write_length(buf, 4 + mech->length + body_size);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   519
	*(*buf)++ = 0x06;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   520
	*(*buf)++ = (unsigned char) mech->length;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   521
	TWRITE_STR(*buf, mech->elements, ((int)mech->length));
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   522
	*(*buf)++ = (unsigned char) ((tok_type>>8)&0xff);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   523
	*(*buf)++ = (unsigned char) (tok_type&0xff);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   524
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   525
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   526
static int
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   527
g_verify_token_header(mech, body_size, buf_in, tok_type, toksize)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   528
	gss_OID mech;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   529
	int *body_size;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   530
	unsigned char **buf_in;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   531
	int tok_type;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   532
	int toksize;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   533
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   534
	unsigned char *buf = *buf_in;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   535
	int seqsize;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   536
	gss_OID_desc toid;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   537
	int ret = 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   538
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   539
	if ((toksize -= 1) < 0)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   540
		return (G_BAD_TOK_HEADER);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   541
	if (*buf++ != 0x60)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   542
		return (G_BAD_TOK_HEADER);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   543
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   544
	if ((seqsize = der_read_length(&buf, &toksize)) < 0)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   545
		return (G_BAD_TOK_HEADER);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   546
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   547
	if (seqsize != toksize)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   548
		return (G_BAD_TOK_HEADER);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   549
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   550
	if ((toksize -= 1) < 0)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   551
		return (G_BAD_TOK_HEADER);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   552
	if (*buf++ != 0x06)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   553
		return (G_BAD_TOK_HEADER);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   554
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   555
	if ((toksize -= 1) < 0)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   556
		return (G_BAD_TOK_HEADER);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   557
	toid.length = *buf++;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   558
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   559
	if ((toksize -= toid.length) < 0)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   560
		return (G_BAD_TOK_HEADER);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   561
	toid.elements = buf;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   562
	buf += toid.length;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   563
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   564
	if (! g_OID_equal(&toid, mech))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   565
		ret = G_WRONG_MECH;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   566
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   567
	/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   568
	 * G_WRONG_MECH is not returned immediately because it's more important
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   569
	 * to return G_BAD_TOK_HEADER if the token header is in fact bad
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   570
	 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   571
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   572
	if ((toksize -= 2) < 0)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   573
		return (G_BAD_TOK_HEADER);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   574
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   575
	if ((*buf++ != ((tok_type>>8)&0xff)) ||
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   576
	    (*buf++ != (tok_type&0xff)))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   577
		return (G_BAD_TOK_HEADER);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   578
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   579
	if (!ret) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   580
		*buf_in = buf;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   581
		*body_size = toksize;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   582
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   583
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   584
	return (ret);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   585
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   586
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   587
static gss_buffer_desc
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   588
make_dummy_token_msg(void *data, int dataLen)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   589
{
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   590
	gss_buffer_desc buffer;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   591
	int tlen;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   592
	unsigned char *t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   593
	unsigned char *ptr;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   594
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   595
	if (data == NULL) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   596
		buffer.length = 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   597
		buffer.value = NULL;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   598
		return (buffer);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   599
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   600
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   601
	tlen = g_token_size((gss_OID)gss_mech_dummy, dataLen);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   602
	t = (unsigned char *) MALLOC(tlen);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   603
	ptr = t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   604
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   605
	g_make_token_header((gss_OID)gss_mech_dummy, dataLen, &ptr, 0);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   606
	(void) memcpy(ptr, data, dataLen);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   607
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   608
	buffer.length = tlen;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   609
	buffer.value = (void *) t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   610
	return (buffer);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   611
}