Blame nscd/dbg_log.c

Packit Service 82fcde
/* Copyright (c) 1998-2018 Free Software Foundation, Inc.
Packit Service 82fcde
   This file is part of the GNU C Library.
Packit Service 82fcde
   Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1998.
Packit Service 82fcde
Packit Service 82fcde
   This program is free software; you can redistribute it and/or modify
Packit Service 82fcde
   it under the terms of the GNU General Public License as published
Packit Service 82fcde
   by the Free Software Foundation; version 2 of the License, or
Packit Service 82fcde
   (at your option) any later version.
Packit Service 82fcde
Packit Service 82fcde
   This program is distributed in the hope that it will be useful,
Packit Service 82fcde
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 82fcde
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit Service 82fcde
   GNU General Public License for more details.
Packit Service 82fcde
Packit Service 82fcde
   You should have received a copy of the GNU General Public License
Packit Service 82fcde
   along with this program; if not, see <http://www.gnu.org/licenses/>.  */
Packit Service 82fcde
Packit Service 82fcde
#include <stdarg.h>
Packit Service 82fcde
#include <stdio.h>
Packit Service 82fcde
#include <string.h>
Packit Service 82fcde
#include <syslog.h>
Packit Service 82fcde
#include <unistd.h>
Packit Service 82fcde
#include "dbg_log.h"
Packit Service 82fcde
#include "nscd.h"
Packit Service 82fcde
Packit Service 82fcde
/* if in debug mode and we have a debug file, we write the messages to it,
Packit Service 82fcde
   if in debug mode and no debug file, we write the messages to stderr,
Packit Service 82fcde
   else to syslog.  */
Packit Service 82fcde
Packit Service 82fcde
static char *logfilename;
Packit Service 82fcde
FILE *dbgout;
Packit Service 82fcde
int debug_level;
Packit Service 82fcde
Packit Service 82fcde
void
Packit Service 82fcde
set_logfile (const char *logfile)
Packit Service 82fcde
{
Packit Service 82fcde
  logfilename = strdup (logfile);
Packit Service 82fcde
}
Packit Service 82fcde
Packit Service 82fcde
int
Packit Service 82fcde
init_logfile (void)
Packit Service 82fcde
{
Packit Service 82fcde
  if (logfilename)
Packit Service 82fcde
    {
Packit Service 82fcde
      dbgout = fopen64 (logfilename, "a");
Packit Service 82fcde
      return dbgout == NULL ? 0 : 1;
Packit Service 82fcde
    }
Packit Service 82fcde
  return 1;
Packit Service 82fcde
}
Packit Service 82fcde
Packit Service 82fcde
void
Packit Service 82fcde
dbg_log (const char *fmt,...)
Packit Service 82fcde
{
Packit Service 82fcde
  va_list ap;
Packit Service 82fcde
  char msg2[512];
Packit Service 82fcde
Packit Service 82fcde
  va_start (ap, fmt);
Packit Service 82fcde
  vsnprintf (msg2, sizeof (msg2), fmt, ap);
Packit Service 82fcde
Packit Service 82fcde
  if (debug_level > 0)
Packit Service 82fcde
    {
Packit Service 82fcde
      time_t t = time (NULL);
Packit Service 82fcde
Packit Service 82fcde
      struct tm now;
Packit Service 82fcde
      localtime_r (&t, &now;;
Packit Service 82fcde
Packit Service 82fcde
      char buf[256];
Packit Service 82fcde
      strftime (buf, sizeof (buf), "%c", &now;;
Packit Service 82fcde
Packit Service 82fcde
      char msg[1024];
Packit Service 82fcde
      snprintf (msg, sizeof (msg), "%s - %d: %s%s", buf, getpid (), msg2,
Packit Service 82fcde
		msg2[strlen (msg2) - 1] == '\n' ? "" : "\n");
Packit Service 82fcde
      if (dbgout)
Packit Service 82fcde
	{
Packit Service 82fcde
	  fputs (msg, dbgout);
Packit Service 82fcde
	  fflush (dbgout);
Packit Service 82fcde
	}
Packit Service 82fcde
      else
Packit Service 82fcde
	fputs (msg, stderr);
Packit Service 82fcde
    }
Packit Service 82fcde
  else
Packit Service 82fcde
    syslog (LOG_NOTICE, "%d %s", getpid (), msg2);
Packit Service 82fcde
Packit Service 82fcde
  va_end (ap);
Packit Service 82fcde
}