summaryrefslogtreecommitdiffstats
path: root/proxy/src/gp_log.c
diff options
context:
space:
mode:
Diffstat (limited to 'proxy/src/gp_log.c')
-rw-r--r--proxy/src/gp_log.c51
1 files changed, 51 insertions, 0 deletions
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);
+}