1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22 /* 23 * Copyright 2004 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27 #pragma ident "%Z%%M% %I% %E% SMI" 28 29 #include "dh_gssapi.h" 30 #include <stdlib.h> 31 32 /* 33 * gss_config structure for Diffie-Hellman family of mechanisms. 34 * This structure is defined in mechglueP.h and defines the entry points 35 * that libgss uses to call a backend. 36 */ 37 static struct gss_config dh_mechanism = { 38 {0, 0}, /* OID for mech type. */ 39 0, 40 __dh_gss_acquire_cred, 41 __dh_gss_release_cred, 42 __dh_gss_init_sec_context, 43 __dh_gss_accept_sec_context, 44 /* EXPORT DELETE START */ /* CRYPT DELETE START */ 45 __dh_gss_unseal, 46 /* EXPORT DELETE END */ /* CRYPT DELETE END */ 47 __dh_gss_process_context_token, 48 __dh_gss_delete_sec_context, 49 __dh_gss_context_time, 50 __dh_gss_display_status, 51 NULL, /* Back ends don't implement this */ 52 __dh_gss_compare_name, 53 __dh_gss_display_name, 54 __dh_gss_import_name, 55 __dh_gss_release_name, 56 __dh_gss_inquire_cred, 57 NULL, /* Back ends don't implement this */ 58 /* EXPORT DELETE START */ /* CRYPT DELETE START */ 59 __dh_gss_seal, 60 /* EXPORT DELETE END */ /* CRYPT DELETE END */ 61 __dh_gss_export_sec_context, 62 __dh_gss_import_sec_context, 63 __dh_gss_inquire_cred_by_mech, 64 __dh_gss_inquire_names_for_mech, 65 __dh_gss_inquire_context, 66 __dh_gss_internal_release_oid, 67 __dh_gss_wrap_size_limit, 68 __dh_pname_to_uid, 69 NULL, /* __gss_userok */ 70 __dh_gss_export_name, 71 /* EXPORT DELETE START */ 72 /* CRYPT DELETE START */ 73 /* 74 * This block comment is Sun Proprietary: Need-To-Know. 75 * What we are doing is leaving the seal and unseal entry points 76 * in an obvious place before sign and unsign for the Domestic customer 77 * of the Solaris Source Product. The Domestic customer of the Solaris Source 78 * Product will have to deal with the problem of creating exportable libgss 79 * binaries. 80 * In the binary product that Sun builds, these entry points are elsewhere, 81 * and bracketed with special comments so that the CRYPT_SRC and EXPORT_SRC 82 * targets delete them. 83 */ 84 #if 0 85 /* CRYPT DELETE END */ 86 __dh_gss_seal, 87 __dh_gss_unseal, 88 /* CRYPT DELETE START */ 89 #endif /* 0 */ 90 /* CRYPT DELETE END */ 91 /* EXPORT DELETE END */ 92 __dh_gss_sign, 93 __dh_gss_verify, 94 NULL, /* gss_store_cred() -- DH lacks this for now */ 95 }; 96 97 /* 98 * __dh_gss_initialize: 99 * Each mechanism in the Diffie-Hellman family of mechanisms calls this 100 * routine passing a pointer to a gss_config structure. This routine will 101 * then check that the mech is not already initialized (If so just return 102 * the mech). It will then assign the entry points that are common to the 103 * mechanism family to the uninitialized mech. After which, it allocate space 104 * for that mechanism's context. It will be up to the caller to fill in 105 * its mechanism OID and fill in the corresponding fields in mechanism 106 * specific context. 107 */ 108 gss_mechanism 109 __dh_gss_initialize(gss_mechanism mech) 110 { 111 if (mech->context != NULL) 112 return (mech); /* already initialized */ 113 114 /* Copy the common entry points for this mechcanisms */ 115 *mech = dh_mechanism; 116 117 /* Allocate space for this mechanism's context */ 118 mech->context = New(dh_context_desc, 1); 119 if (mech->context == NULL) 120 return (NULL); 121 122 /* return the mech */ 123 return (mech); 124 }