1 /*
2 * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
3 */
4 /*
5 * lib/krb5/krb/kerrs.c
6 *
7 * Copyright 2006 Massachusetts Institute of Technology.
8 * All Rights Reserved.
9 *
10 * Export of this software from the United States of America may
11 * require a specific license from the United States Government.
12 * It is the responsibility of any person or organization contemplating
13 * export to obtain such a license before exporting.
14 *
15 * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
16 * distribute this software and its documentation for any purpose and
17 * without fee is hereby granted, provided that the above copyright
18 * notice appear in all copies and that both that copyright notice and
19 * this permission notice appear in supporting documentation, and that
20 * the name of M.I.T. not be used in advertising or publicity pertaining
21 * to distribution of the software without specific, written prior
22 * permission. Furthermore if you modify this software you must label
23 * your software as modified software and not distribute it in such a
24 * fashion that it might be confused with the original M.I.T. software.
25 * M.I.T. makes no representations about the suitability of
26 * this software for any purpose. It is provided "as is" without express
27 * or implied warranty.
28 *
29 * error-message functions
30 */
31 #include <sys/param.h>
32 #include <unistd.h>
33 #include <assert.h>
34 #include <stdio.h>
35 #include <stdlib.h>
36 #include <string.h>
37 #include <k5-int.h>
38 #include <krb5.h>
39 #include <mglueP.h>
40 #include "gssapiP_spnego.h"
41 #include "gssapiP_generic.h"
42 #include <gssapi_err_generic.h>
43
44 #ifdef DEBUG
45 static int error_message_debug = 0;
46 #ifndef ERROR_MESSAGE_DEBUG
47 #define ERROR_MESSAGE_DEBUG() (error_message_debug != 0)
48 #endif
49 #endif
50
51 void
spnego_set_error_message(spnego_gss_ctx_id_t ctx,spnego_error_code code,const char * fmt,...)52 spnego_set_error_message (spnego_gss_ctx_id_t ctx, spnego_error_code code,
53 const char *fmt, ...)
54 {
55 va_list args;
56 if (ctx == NULL)
57 return;
58 va_start (args, fmt);
59 #ifdef DEBUG
60 if (ERROR_MESSAGE_DEBUG())
61 fprintf(stderr,
62 "spnego_set_error_message(ctx=%p/err=%p, code=%ld, ...)\n",
63 ctx, &ctx->err, (long) code);
64 #endif
65 krb5int_vset_error (&ctx->err, code, fmt, args);
66 #ifdef DEBUG
67 if (ERROR_MESSAGE_DEBUG())
68 fprintf(stderr, "->%s\n", ctx->err.msg);
69 #endif
70 va_end (args);
71 }
72
73 void
spnego_vset_error_message(spnego_gss_ctx_id_t ctx,spnego_error_code code,const char * fmt,va_list args)74 spnego_vset_error_message (spnego_gss_ctx_id_t ctx, spnego_error_code code,
75 const char *fmt, va_list args)
76 {
77 #ifdef DEBUG
78 if (ERROR_MESSAGE_DEBUG())
79 fprintf(stderr, "spnego_vset_error_message(ctx=%p, code=%ld, ...)\n",
80 ctx, (long) code);
81 #endif
82 if (ctx == NULL)
83 return;
84 krb5int_vset_error (&ctx->err, code, fmt, args);
85 #ifdef DEBUG
86 if (ERROR_MESSAGE_DEBUG())
87 fprintf(stderr, "->%s\n", ctx->err.msg);
88 #endif
89 }
90
91 const char *
spnego_get_error_message(spnego_gss_ctx_id_t ctx,spnego_error_code code)92 spnego_get_error_message (spnego_gss_ctx_id_t ctx, spnego_error_code code)
93 {
94 #ifdef DEBUG
95 if (ERROR_MESSAGE_DEBUG())
96 fprintf(stderr, "spnego_get_error_message(%p, %ld)\n", ctx, (long) code);
97 #endif
98 if (ctx == NULL)
99 return error_message(code);
100 return krb5int_get_error (&ctx->err, code);
101 }
102
103 void
spnego_free_error_message(spnego_gss_ctx_id_t ctx,const char * msg)104 spnego_free_error_message (spnego_gss_ctx_id_t ctx, const char *msg)
105 {
106 #ifdef DEBUG
107 if (ERROR_MESSAGE_DEBUG())
108 fprintf(stderr, "spnego_free_error_message(%p, %p)\n", ctx, msg);
109 #endif
110 if (ctx == NULL)
111 return;
112 krb5int_free_error (&ctx->err, msg);
113 }
114
115 void
spnego_clear_error_message(spnego_gss_ctx_id_t ctx)116 spnego_clear_error_message (spnego_gss_ctx_id_t ctx)
117 {
118 #ifdef DEBUG
119 if (ERROR_MESSAGE_DEBUG())
120 fprintf(stderr, "spnego_clear_error_message(%p)\n", ctx);
121 #endif
122 if (ctx == NULL)
123 return;
124 krb5int_clear_error (&ctx->err);
125 }
126