5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * Copyright 1993 by OpenVision Technologies, Inc.
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * Permission to use, copy, modify, distribute, and sell this software
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * and its documentation for any purpose is hereby granted without fee,
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * provided that the above copyright notice appears in all copies and
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * that both that copyright notice and this permission notice appear in
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * supporting documentation, and that the name of OpenVision not be used
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * in advertising or publicity pertaining to distribution of the software
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * without specific, written prior permission. OpenVision makes no
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * representations about the suitability of this software for any
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * purpose. It is provided "as is" without express or implied warranty.
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * OPENVISION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * EVENT SHALL OPENVISION BE LIABLE FOR ANY SPECIAL, INDIRECT OR
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * PERFORMANCE OF THIS SOFTWARE.
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry/* X internationalization!! */
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barrystatic inline int
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry else if (a == b)
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barrystatic inline void
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry#define get_error_message spnego_gss_get_error_message
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry gsserrmap *p = k5_getspecific(K5_KEY_GSS_SPNEGO_ERROR_MESSAGE);
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry fprintf(stderr, "%s(%lu, p=%p)", __func__, (unsigned long) minor_code,
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry (void *) p);
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry fprintf(stderr, " -> %p/%s\n", (void *) msg, msg);
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barrystatic int save_error_string_nocopy(OM_uint32 minor_code, char *msg)
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry fprintf(stderr, "%s(%lu, %s)", __func__, (unsigned long) minor_code, msg);
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry p = k5_getspecific(K5_KEY_GSS_SPNEGO_ERROR_MESSAGE);
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry p = malloc(sizeof(*p));
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry if (k5_setspecific(K5_KEY_GSS_SPNEGO_ERROR_MESSAGE, p) != 0) {
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry ret = gsserrmap_replace_or_insert(p, minor_code, msg);
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry /* Solaris SPNEGO */
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry fprintf(stderr, " p=%p %s\n", (void *)p, ret ? "FAIL" : "SUCCESS");
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barryvoid save_error_string(OM_uint32 minor_code, char *msg)
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry if (save_error_string_nocopy(minor_code, s) != 0)
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barryvoid save_error_message(OM_uint32 minor_code, const char *format, ...)
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry if (n >= 0) {
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry if (save_error_string_nocopy(minor_code, s) != 0)
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barryvoid spnego_gss_save_error_info(OM_uint32 minor_code, spnego_gss_ctx_id_t ctx)
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry s = (char *)spnego_get_error_message(ctx, minor_code);
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry fprintf(stderr, "%s(%lu, ctx=%p) saving: %s\n", __func__,
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry /* The get_error_message call above resets the error message in
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry ctx. Put it back, in case we make this call again *sigh*. */
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry spnego_set_error_message(ctx, minor_code, "%s", s);
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barryspnego_gss_display_status2(minor_status, status_value, status_type,
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry return(g_display_major_status(minor_status, status_value,
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * Solaris SPNEGO
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * This init call appears to be not needed as
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * gss_spnegoint_lib_init() is called on dl open.
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry /* If this fails, there's not much we can do... */