Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/src/solaris/native/sun/security/jgss/wrapper/NativeFunc.c
32301 views
/*1* Copyright (c) 2005, 2020, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation. Oracle designates this7* particular file as subject to the "Classpath" exception as provided8* by Oracle in the LICENSE file that accompanied this code.9*10* This code is distributed in the hope that it will be useful, but WITHOUT11* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or12* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License13* version 2 for more details (a copy is included in the LICENSE file that14* accompanied this code).15*16* You should have received a copy of the GNU General Public License version17* 2 along with this work; if not, write to the Free Software Foundation,18* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.19*20* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA21* or visit www.oracle.com if you need additional information or have any22* questions.23*/2425#include <stdio.h>26#include <stdlib.h>27#include <dlfcn.h>28#include "NativeFunc.h"2930/* global GSS function table */31GSS_FUNCTION_TABLE_PTR ftab;3233/* standard GSS method names (ordering is from mapfile) */34static const char RELEASE_NAME[] = "gss_release_name";35static const char IMPORT_NAME[] = "gss_import_name";36static const char COMPARE_NAME[] = "gss_compare_name";37static const char CANONICALIZE_NAME[] = "gss_canonicalize_name";38static const char EXPORT_NAME[] = "gss_export_name";39static const char DISPLAY_NAME[] = "gss_display_name";40static const char ACQUIRE_CRED[] = "gss_acquire_cred";41static const char RELEASE_CRED[] = "gss_release_cred";42static const char INQUIRE_CRED[] = "gss_inquire_cred";43static const char IMPORT_SEC_CONTEXT[] = "gss_import_sec_context";44static const char INIT_SEC_CONTEXT[] = "gss_init_sec_context";45static const char ACCEPT_SEC_CONTEXT[] = "gss_accept_sec_context";46static const char INQUIRE_CONTEXT[] = "gss_inquire_context";47static const char DELETE_SEC_CONTEXT[] = "gss_delete_sec_context";48static const char CONTEXT_TIME[] = "gss_context_time";49static const char WRAP_SIZE_LIMIT[] = "gss_wrap_size_limit";50static const char EXPORT_SEC_CONTEXT[] = "gss_export_sec_context";51static const char GET_MIC[] = "gss_get_mic";52static const char VERIFY_MIC[] = "gss_verify_mic";53static const char WRAP[] = "gss_wrap";54static const char UNWRAP[] = "gss_unwrap";55static const char INDICATE_MECHS[] = "gss_indicate_mechs";56static const char INQUIRE_NAMES_FOR_MECH[] = "gss_inquire_names_for_mech";5758/* additional GSS methods not public thru mapfile */5960static const char ADD_OID_SET_MEMBER[] = "gss_add_oid_set_member";61static const char DISPLAY_STATUS[] = "gss_display_status";62static const char CREATE_EMPTY_OID_SET[] = "gss_create_empty_oid_set";63static const char RELEASE_OID_SET[] = "gss_release_oid_set";64static const char RELEASE_BUFFER[] = "gss_release_buffer";6566/**67* Initialize native GSS function pointers68*/69char* loadNative(const char *libName) {7071char *error;72void *gssLib;73int failed;74OM_uint32 minor, major;7576ftab = NULL;77failed = FALSE;78error = NULL;7980gssLib = dlopen(libName, RTLD_NOW);81if (gssLib == NULL) {82failed = TRUE;83goto out;84}8586/* global function table instance */87ftab = (GSS_FUNCTION_TABLE_PTR)malloc(sizeof(GSS_FUNCTION_TABLE));88if (ftab == NULL) {89failed = TRUE;90goto out;91}9293ftab->releaseName = (RELEASE_NAME_FN_PTR)dlsym(gssLib, RELEASE_NAME);94if (ftab->releaseName == NULL) {95failed = TRUE;96goto out;97}9899ftab->importName = (IMPORT_NAME_FN_PTR)dlsym(gssLib, IMPORT_NAME);100if (ftab->importName == NULL) {101failed = TRUE;102goto out;103}104105ftab->compareName = (COMPARE_NAME_FN_PTR)dlsym(gssLib, COMPARE_NAME);106if (ftab->compareName == NULL) {107failed = TRUE;108goto out;109}110111ftab->canonicalizeName = (CANONICALIZE_NAME_FN_PTR)112dlsym(gssLib, CANONICALIZE_NAME);113if (ftab->canonicalizeName == NULL) {114failed = TRUE;115goto out;116}117118ftab->exportName = (EXPORT_NAME_FN_PTR)dlsym(gssLib, EXPORT_NAME);119if (ftab->exportName == NULL) {120failed = TRUE;121goto out;122}123124ftab->displayName = (DISPLAY_NAME_FN_PTR)dlsym(gssLib, DISPLAY_NAME);125if (ftab->displayName == NULL) {126failed = TRUE;127goto out;128}129130ftab->acquireCred = (ACQUIRE_CRED_FN_PTR)dlsym(gssLib, ACQUIRE_CRED);131if (ftab->acquireCred == NULL) {132failed = TRUE;133goto out;134}135136ftab->releaseCred = (RELEASE_CRED_FN_PTR)dlsym(gssLib, RELEASE_CRED);137if (ftab->releaseCred == NULL) {138failed = TRUE;139goto out;140}141142ftab->inquireCred = (INQUIRE_CRED_FN_PTR)dlsym(gssLib, INQUIRE_CRED);143if (ftab->inquireCred == NULL) {144failed = TRUE;145goto out;146}147148ftab->importSecContext = (IMPORT_SEC_CONTEXT_FN_PTR)149dlsym(gssLib, IMPORT_SEC_CONTEXT);150if (ftab->importSecContext == NULL) {151failed = TRUE;152goto out;153}154155ftab->initSecContext = (INIT_SEC_CONTEXT_FN_PTR)156dlsym(gssLib, INIT_SEC_CONTEXT);157if (ftab->initSecContext == NULL) {158failed = TRUE;159goto out;160}161162ftab->acceptSecContext = (ACCEPT_SEC_CONTEXT_FN_PTR)163dlsym(gssLib, ACCEPT_SEC_CONTEXT);164if (ftab->acceptSecContext == NULL) {165failed = TRUE;166goto out;167}168169ftab->inquireContext = (INQUIRE_CONTEXT_FN_PTR)170dlsym(gssLib, INQUIRE_CONTEXT);171if (ftab->inquireContext == NULL) {172failed = TRUE;173goto out;174}175176ftab->deleteSecContext = (DELETE_SEC_CONTEXT_FN_PTR)177dlsym(gssLib, DELETE_SEC_CONTEXT);178if (ftab->deleteSecContext == NULL) {179failed = TRUE;180goto out;181}182183ftab->contextTime = (CONTEXT_TIME_FN_PTR)dlsym(gssLib, CONTEXT_TIME);184if (ftab->contextTime == NULL) {185failed = TRUE;186goto out;187}188189ftab->wrapSizeLimit = (WRAP_SIZE_LIMIT_FN_PTR)190dlsym(gssLib, WRAP_SIZE_LIMIT);191if (ftab->wrapSizeLimit == NULL) {192failed = TRUE;193goto out;194}195196ftab->exportSecContext = (EXPORT_SEC_CONTEXT_FN_PTR)197dlsym(gssLib, EXPORT_SEC_CONTEXT);198if (ftab->exportSecContext == NULL) {199failed = TRUE;200goto out;201}202203ftab->getMic = (GET_MIC_FN_PTR)dlsym(gssLib, GET_MIC);204if (ftab->getMic == NULL) {205failed = TRUE;206goto out;207}208209ftab->verifyMic = (VERIFY_MIC_FN_PTR)dlsym(gssLib, VERIFY_MIC);210if (ftab->verifyMic == NULL) {211failed = TRUE;212goto out;213}214215ftab->wrap = (WRAP_FN_PTR)dlsym(gssLib, WRAP);216if (ftab->wrap == NULL) {217failed = TRUE;218goto out;219}220221ftab->unwrap = (UNWRAP_FN_PTR)dlsym(gssLib, UNWRAP);222if (ftab->unwrap == NULL) {223failed = TRUE;224goto out;225}226227ftab->indicateMechs = (INDICATE_MECHS_FN_PTR)dlsym(gssLib, INDICATE_MECHS);228if (ftab->indicateMechs == NULL) {229failed = TRUE;230goto out;231}232233ftab->inquireNamesForMech = (INQUIRE_NAMES_FOR_MECH_FN_PTR)234dlsym(gssLib, INQUIRE_NAMES_FOR_MECH);235if (ftab->inquireNamesForMech == NULL) {236failed = TRUE;237goto out;238}239240ftab->addOidSetMember = (ADD_OID_SET_MEMBER_FN_PTR)241dlsym(gssLib, ADD_OID_SET_MEMBER);242if (ftab->addOidSetMember == NULL) {243failed = TRUE;244goto out;245}246247ftab->displayStatus = (DISPLAY_STATUS_FN_PTR)248dlsym(gssLib, DISPLAY_STATUS);249if (ftab->displayStatus == NULL) {250failed = TRUE;251goto out;252}253254ftab->createEmptyOidSet = (CREATE_EMPTY_OID_SET_FN_PTR)255dlsym(gssLib, CREATE_EMPTY_OID_SET);256if (ftab->createEmptyOidSet == NULL) {257failed = TRUE;258goto out;259}260261ftab->releaseOidSet = (RELEASE_OID_SET_FN_PTR)262dlsym(gssLib, RELEASE_OID_SET);263if (ftab->releaseOidSet == NULL) {264failed = TRUE;265goto out;266}267268ftab->releaseBuffer = (RELEASE_BUFFER_FN_PTR)269dlsym(gssLib, RELEASE_BUFFER);270if (ftab->releaseBuffer == NULL) {271failed = TRUE;272goto out;273}274275ftab->mechs = GSS_C_NO_OID_SET;276major = (*ftab->indicateMechs)(&minor, &(ftab->mechs));277if (ftab->mechs == NULL || ftab->mechs == GSS_C_NO_OID_SET) {278failed = TRUE;279goto out;280}281282283out:284if (failed == TRUE) {285error = dlerror();286if (gssLib != NULL) dlclose(gssLib);287if (ftab != NULL) free(ftab);288}289return error;290}291292293