/ kdc / log.c
log.c
  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  
 38  #ifndef DEFAULT_KDC_LOG_DEST
 39  #define DEFAULT_KDC_LOG_DEST "FILE:" KDC_LOG_DIR "/" KDC_LOG_FILE
 40  #endif
 41  
 42  void
 43  kdc_openlog(krb5_context context,
 44  	    const char *service,
 45  	    krb5_kdc_configuration *config)
 46  {
 47      char **s = NULL, **p;
 48      krb5_initlog(context, service, &config->logf);
 49      s = krb5_config_get_strings(context, NULL, service, "logging", NULL);
 50      if(s == NULL)
 51  	s = krb5_config_get_strings(context, NULL, "logging", service, NULL);
 52      if(s){
 53  	for(p = s; *p; p++)
 54  	    krb5_addlog_dest(context, config->logf, *p);
 55  	krb5_config_free_strings(s);
 56      }else {
 57  	char *ss = NULL;
 58  	asprintf(&ss, "0-10/%s", DEFAULT_KDC_LOG_DEST);
 59  	krb5_addlog_dest(context, config->logf, ss);
 60  	free(ss);
 61      }
 62      krb5_set_warn_dest(context, config->logf);
 63  }
 64  
 65  char*
 66  kdc_log_msg_va(krb5_context context,
 67  	       krb5_kdc_configuration *config,
 68  	       int level, const char *fmt, va_list ap)
 69      HEIMDAL_PRINTF_ATTRIBUTE((printf, 4, 0))
 70  {
 71      char *msg;
 72      krb5_vlog_msg(context, config->logf, &msg, level, fmt, ap);
 73      return msg;
 74  }
 75  
 76  char*
 77  kdc_log_msg(krb5_context context,
 78  	    krb5_kdc_configuration *config,
 79  	    int level, const char *fmt, ...)
 80      HEIMDAL_PRINTF_ATTRIBUTE((printf, 4, 5))
 81  {
 82      va_list ap;
 83      char *s;
 84      va_start(ap, fmt);
 85      s = kdc_log_msg_va(context, config, level, fmt, ap);
 86      va_end(ap);
 87      return s;
 88  }
 89  
 90  void
 91  kdc_log(krb5_context context,
 92  	krb5_kdc_configuration *config,
 93  	int level, const char *fmt, ...)
 94      HEIMDAL_PRINTF_ATTRIBUTE((printf, 4, 5))
 95  {
 96      va_list ap;
 97      char *s;
 98      va_start(ap, fmt);
 99      s = kdc_log_msg_va(context, config, level, fmt, ap);
100      if(s) free(s);
101      va_end(ap);
102  }