/* * dhcpcd - DHCP client daemon * Copyright 2006-2008 Roy Marples * All rights reserved * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #define SYSLOG_NAMES #define COM_CH "/var/tmp/com.socket" #include #include #include #include #include #include #include #include #include #include "common.h" #include "logger.h" #include "logwriter.h" static int loglevel = LOG_WARNING; static char logprefix[12] = { 0 }; int logtolevel(const char *priority) { CODE *c; if (isdigit ((int) *priority)) return (atoi(priority)); for (c = prioritynames; c->c_name; c++) if (!strcasecmp(priority, c->c_name)) return (c->c_val); return (-1); } static const char *leveltolog(int level) { CODE *c; for (c = prioritynames; c->c_name; c++) if (c->c_val == level) return (c->c_name); return (NULL); } void setloglevel(int level) { loglevel = level; } void setlogprefix(const char *prefix) { snprintf(logprefix, sizeof(logprefix), "%s", prefix); } void logger(int level, const char *fmt, ...) { va_list p; //va_list p2; // FILE *f = stderr; FILE *f; FILE *f2; char* path = "/tmp/cdhcpcd.log"; char* msgpath = "/tmp/cdhcpcd-msg.log"; int size = 512; char *msg = (char *) malloc (size); f = fopen(path, "a"); f2 = fopen(msgpath, "a"); va_start (p, fmt); //va_copy (p2, p); vsnprintf (msg, size, fmt, p); strcat(msg, "\n"); logToQt(level, DHCPCD_LOG, msg); fprintf(f2, "%s, %s", leveltolog(level), logprefix); fprintf(f2, "%s", msg); fputc('\n', f2); fprintf(f, "%s, %s", leveltolog(level), logprefix); vfprintf(f, fmt, p); fputc('\n', f); /* stdout, stderr may be re-directed to some kind of buffer. * So we always flush to ensure it's written. */ fflush(f); // //logLoggerToQt(level, fmt, p); // if (level <= LOG_ERR || level <= loglevel) { // // /* new function by Niklas Goby // * send the log message also to our Qt programm. // * implemented in logwriter.c // * */ // //logLoggerToQt(level, fmt, p); // // if (level == LOG_DEBUG || level == LOG_INFO) // f = stdout; // fprintf(f, "%s, %s", leveltolog(level), logprefix); // vfprintf(f, fmt, p); // fputc('\n', f); // // /* stdout, stderr may be re-directed to some kind of buffer. // * So we always flush to ensure it's written. */ // fflush(f); // } // if (level < LOG_DEBUG || level <= loglevel) { // size_t len = strlen(logprefix); // size_t fmt2len = strlen(fmt) + len + 1; // char *fmt2 = malloc(sizeof(char) * fmt2len); // char *pf = fmt2; // if (fmt2) { // memcpy(pf, logprefix, len); // pf += len; // strlcpy(pf, fmt, fmt2len - len); // vsyslog(level, fmt2, p2); // free(fmt2); // } else { // vsyslog(level, fmt, p2); // syslog(LOG_ERR, "logger: memory exhausted"); // exit(EXIT_FAILURE); // } // } //va_end (p2); va_end (p); }