1/*
2 * Copyright (c) 1997, 1998, 2002 Kungliga Tekniska Högskolan
3 * (Royal Institute of Technology, Stockholm, Sweden).
4 * All rights reserved.
5 *
6 * Portions Copyright (c) 2009 Apple Inc. All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 *
12 * 1. Redistributions of source code must retain the above copyright
13 *    notice, this list of conditions and the following disclaimer.
14 *
15 * 2. Redistributions in binary form must reproduce the above copyright
16 *    notice, this list of conditions and the following disclaimer in the
17 *    documentation and/or other materials provided with the distribution.
18 *
19 * 3. Neither the name of the Institute nor the names of its contributors
20 *    may be used to endorse or promote products derived from this software
21 *    without specific prior written permission.
22 *
23 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26 * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33 * SUCH DAMAGE.
34 */
35
36#include "kdc_locl.h"
37
38void
39kdc_openlog(krb5_context context,
40	    const char *service,
41	    krb5_kdc_configuration *config)
42{
43    char **s = NULL, **p;
44    krb5_initlog(context, "kdc", &config->logf);
45    s = krb5_config_get_strings(context, NULL, service, "logging", NULL);
46    if(s == NULL)
47	s = krb5_config_get_strings(context, NULL, "logging", service, NULL);
48    if(s){
49	for(p = s; *p; p++)
50	    krb5_addlog_dest(context, config->logf, *p);
51	krb5_config_free_strings(s);
52    }else {
53	char *ss;
54	if (asprintf(&ss, "0-1/FILE:%s/%s", hdb_db_dir(context),
55	    KDC_LOG_FILE) < 0)
56	    err(1, NULL);
57	krb5_addlog_dest(context, config->logf, ss);
58	free(ss);
59    }
60    krb5_set_warn_dest(context, config->logf);
61}
62
63char*
64kdc_log_msg_va(krb5_context context,
65	       krb5_kdc_configuration *config,
66	       int level, const char *fmt, va_list ap)
67{
68    char *msg;
69    krb5_vlog_msg(context, config->logf, &msg, level, fmt, ap);
70    return msg;
71}
72
73char*
74kdc_log_msg(krb5_context context,
75	    krb5_kdc_configuration *config,
76	    int level, const char *fmt, ...)
77{
78    va_list ap;
79    char *s;
80    va_start(ap, fmt);
81    s = kdc_log_msg_va(context, config, level, fmt, ap);
82    va_end(ap);
83    return s;
84}
85
86void
87kdc_log(krb5_context context,
88	krb5_kdc_configuration *config,
89	int level, const char *fmt, ...)
90{
91    va_list ap;
92    char *s;
93    va_start(ap, fmt);
94    s = kdc_log_msg_va(context, config, level, fmt, ap);
95    if(s) free(s);
96    va_end(ap);
97}
98