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