/*
* Copyright 1993 by OpenVision Technologies, Inc.
*
* Permission to use, copy, modify, distribute, and sell this software
* and its documentation for any purpose is hereby granted without fee,
* provided that the above copyright notice appears in all copies and
* that both that copyright notice and this permission notice appear in
* supporting documentation, and that the name of OpenVision not be used
* in advertising or publicity pertaining to distribution of the software
* without specific, written prior permission. OpenVision makes no
* representations about the suitability of this software for any
* purpose. It is provided "as is" without express or implied warranty.
*
* OPENVISION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
* EVENT SHALL OPENVISION BE LIABLE FOR ANY SPECIAL, INDIRECT OR
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
* USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*/
/*
*/
#include <unistd.h>
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <k5-int.h>
#include <krb5.h>
#include <mglueP.h>
#include "gssapiP_spnego.h"
#include "gssapiP_generic.h"
#include <gssapi_err_generic.h>
/* X internationalization!! */
static inline int
{
if (a < b)
return -1;
else if (a == b)
return 0;
else
return 1;
}
static inline void
free_string (char *s)
{
free(s);
}
#include "error_map.h"
#include <stdio.h>
{
#ifdef DEBUG
(void *) p);
#endif
if (p) {
char **v = gsserrmap_find(p, minor_code);
if (v) {
msg = *v;
#ifdef DEBUG
#endif
}
}
if (msg == 0)
#ifdef DEBUG
#endif
return msg;
}
{
gsserrmap *p;
int ret;
#ifdef DEBUG
#endif
if (!p) {
p = malloc(sizeof(*p));
if (p == NULL) {
ret = 1;
goto fail;
}
if (gsserrmap_init(p) != 0) {
free(p);
p = NULL;
ret = 1;
goto fail;
}
if (k5_setspecific(K5_KEY_GSS_SPNEGO_ERROR_MESSAGE, p) != 0) {
free(p);
p = NULL;
ret = 1;
goto fail;
}
}
/* Solaris SPNEGO */
if (ret) {
free(p);
p = NULL;
}
fail:
#ifdef DEBUG
#endif
return ret;
}
{
if (s) {
if (save_error_string_nocopy(minor_code, s) != 0)
free(s);
}
}
{
char *s;
int n;
if (n >= 0) {
if (save_error_string_nocopy(minor_code, s) != 0)
free(s);
}
}
{
char *s;
#ifdef DEBUG
(unsigned long) minor_code, (void *)ctx);
#endif
#ifdef DEBUG
(unsigned long) minor_code, (void *)ctx, s);
#endif
/* The get_error_message call above resets the error message in
ctx. Put it back, in case we make this call again *sigh*. */
}
void spnego_gss_delete_error_info(void *p)
{
}
int status_type;
{
status_string->length = 0;
if ((mech_type != GSS_C_NULL_OID) &&
*minor_status = 0;
return(GSS_S_BAD_MECH);
}
if (status_type == GSS_C_GSS_CODE) {
} else if (status_type == GSS_C_MECH_CODE) {
/*
* Solaris SPNEGO
* This init call appears to be not needed as
* gss_spnegoint_lib_init() is called on dl open.
*/
#if 0
(void) gss_spnegoint_initialize_library();
#endif
if (*message_context) {
return(GSS_S_FAILURE);
}
/* If this fails, there's not much we can do... */
/* Solaris Kerberos - g_make_string_buffer() returns 0 on failure */
status_string) == 0) {
*minor_status = ENOMEM;
return(GSS_S_FAILURE);
} else
*minor_status = 0;
return(0);
} else {
*minor_status = 0;
return(GSS_S_BAD_STATUS);
}
}