summaryrefslogtreecommitdiffstats
path: root/proxy/src/gp_log.c
blob: b6eb16124b1ac3d3ce443b7704fb1e28aae5a224 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
/* Copyright (C) 2012 the GSS-PROXY contributors, see COPYING for license */

#include "config.h"
#include "gp_log.h"
#include <stdio.h>
#include <stdarg.h>

void gp_logging_init(void)
{
    openlog("gssproxy",
            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);
}