summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimo Sorce <simo@redhat.com>2014-12-08 12:05:06 -0500
committerSimo Sorce <simo@redhat.com>2015-03-24 11:46:24 -0400
commitcde06ff7cea982c206a99a34457a07d392a65552 (patch)
tree02658157d07e54823785e95ee63a959fac42bae7
parentcc2a47f5ea19df0126774f8ad99534d059323b3a (diff)
downloadgss-proxy-cde06ff7cea982c206a99a34457a07d392a65552.tar.gz
gss-proxy-cde06ff7cea982c206a99a34457a07d392a65552.tar.xz
gss-proxy-cde06ff7cea982c206a99a34457a07d392a65552.zip
Generalize GSS Display Status logger code
This way it can be used both in stderr debugging as well as for sending errors to syslog. Signed-off-by: Simo Sorce <simo@redhat.com>
-rw-r--r--proxy/Makefile.am1
-rw-r--r--proxy/src/gp_debug.c28
-rw-r--r--proxy/src/gp_log.c51
-rw-r--r--proxy/src/gp_log.h7
4 files changed, 65 insertions, 22 deletions
diff --git a/proxy/Makefile.am b/proxy/Makefile.am
index 86b5933..4ba129d 100644
--- a/proxy/Makefile.am
+++ b/proxy/Makefile.am
@@ -183,6 +183,7 @@ proxymech_la_LDFLAGS = \
cli_srv_comm_SOURCES = \
src/gp_conv.c \
src/gp_debug.c \
+ src/gp_log.c \
$(GP_RPCGEN_OBJ) \
$(GP_RPCCLI_OBJ) \
tests/cli_srv_comm.c
diff --git a/proxy/src/gp_debug.c b/proxy/src/gp_debug.c
index dbf7c49..1312488 100644
--- a/proxy/src/gp_debug.c
+++ b/proxy/src/gp_debug.c
@@ -24,8 +24,8 @@
*/
#include "config.h"
-#include <gssapi/gssapi.h>
#include "gp_debug.h"
+#include "gp_log.h"
/* global debug switch */
int gp_debug;
@@ -38,25 +38,9 @@ void gp_debug_enable(void)
void gp_log_failure(gss_OID mech, uint32_t maj, uint32_t min)
{
- uint32_t msgctx;
- uint32_t discard;
- gss_buffer_desc tmp;
-
- fprintf(stderr, "Failed with:");
-
- if (mech != GSS_C_NO_OID) {
- gss_oid_to_str(&discard, mech, &tmp);
- fprintf(stderr, " (OID: %s)", (char *)tmp.value);
- gss_release_buffer(&discard, &tmp);
- }
-
- msgctx = 0;
- gss_display_status(&discard, maj, GSS_C_GSS_CODE, mech, &msgctx, &tmp);
- fprintf(stderr, " %s,", (char *)tmp.value);
- gss_release_buffer(&discard, &tmp);
-
- msgctx = 0;
- gss_display_status(&discard, min, GSS_C_MECH_CODE, mech, &msgctx, &tmp);
- fprintf(stderr, " %s\n", (char *)tmp.value);
- gss_release_buffer(&discard, &tmp);
+ char buf[MAX_LOG_LINE];
+
+ gp_fmt_status(mech, maj, min, buf, MAX_LOG_LINE);
+
+ fprintf(stderr, "Failed with: %s\n", buf);
}
diff --git a/proxy/src/gp_log.c b/proxy/src/gp_log.c
index 31006f6..2fb3d7c 100644
--- a/proxy/src/gp_log.c
+++ b/proxy/src/gp_log.c
@@ -23,7 +23,10 @@
DEALINGS IN THE SOFTWARE.
*/
+#include "config.h"
#include "gp_log.h"
+#include <stdio.h>
+#include <stdarg.h>
void gp_logging_init(void)
{
@@ -31,3 +34,51 @@ void gp_logging_init(void)
LOG_CONS|LOG_NDELAY|LOG_NOWAIT|LOG_PERROR|LOG_PID,
LOG_AUTHPRIV);
}
+static size_t gp_append(char *buf, size_t max, const char *fmt, ...)
+{
+ va_list ap;
+ size_t res;
+
+ if (max <= 0) return 0;
+
+ va_start(ap, fmt);
+ res = vsnprintf(buf, max, fmt, ap);
+ va_end(ap);
+
+ return res;
+}
+
+void gp_fmt_status(gss_OID mech, uint32_t maj, uint32_t min,
+ char *buf, size_t buf_size)
+{
+ uint32_t msgctx;
+ uint32_t discard;
+ gss_buffer_desc tmp;
+ size_t used = 0;
+
+ if (mech != GSS_C_NO_OID) {
+ gss_oid_to_str(&discard, mech, &tmp);
+ used += gp_append(buf + used, buf_size - used,
+ "(OID: %s) ", (char *)tmp.value);
+ gss_release_buffer(&discard, &tmp);
+ }
+
+ msgctx = 0;
+ gss_display_status(&discard, maj, GSS_C_GSS_CODE, mech, &msgctx, &tmp);
+ used += gp_append(buf + used, buf_size - used, "%s, ", (char *)tmp.value);
+ gss_release_buffer(&discard, &tmp);
+
+ msgctx = 0;
+ gss_display_status(&discard, min, GSS_C_MECH_CODE, mech, &msgctx, &tmp);
+ used += gp_append(buf + used, buf_size - used, "%s", (char *)tmp.value);
+ gss_release_buffer(&discard, &tmp);
+}
+
+void gp_log_status(gss_OID mech, uint32_t maj, uint32_t min)
+{
+ char buf[MAX_LOG_LINE];
+
+ gp_fmt_status(mech, maj, min, buf, MAX_LOG_LINE);
+
+ GPERROR("%s\n", buf);
+}
diff --git a/proxy/src/gp_log.h b/proxy/src/gp_log.h
index f3549d1..36ed8d8 100644
--- a/proxy/src/gp_log.h
+++ b/proxy/src/gp_log.h
@@ -27,10 +27,17 @@
#define _GP_LOG_H_
#include <syslog.h>
+#include <gssapi/gssapi.h>
+#define MAX_LOG_LINE 1024
#define GPERROR(...) syslog(LOG_ERR, __VA_ARGS__);
#define GPAUDIT(...) syslog(LOG_INFO, __VA_ARGS__);
void gp_logging_init(void);
+void gp_fmt_status(gss_OID mech, uint32_t maj, uint32_t min,
+ char *buf, size_t buf_size);
+
+void gp_log_status(gss_OID mech, uint32_t maj, uint32_t min);
+
#endif /* _GP_LOG_H_ */