int log_ShowLevel(struct cmdargs const *arg) { int i; prompt_Printf(arg->prompt, "Log: "); for (i = LogMIN; i <= LogMAX; i++) if (log_IsKept(i) & LOG_KEPT_SYSLOG) prompt_Printf(arg->prompt, " %s", log_Name(i)); prompt_Printf(arg->prompt, "\nLocal:"); for (i = LogMIN; i <= LogMAX; i++) if (log_IsKeptLocal(i, arg->prompt->logmask) & LOG_KEPT_LOCAL) prompt_Printf(arg->prompt, " %s", log_Name(i)); prompt_Printf(arg->prompt, "\n"); return 0; }
void log_Printf(int lev, const char *fmt,...) { va_list ap; struct prompt *prompt; if (log_IsKept(lev)) { char nfmt[200]; va_start(ap, fmt); if (promptlist && (log_IsKept(lev) & LOG_KEPT_LOCAL)) { if ((log_IsKept(LogTUN) & LOG_KEPT_LOCAL) && LogTunno != -1) snprintf(nfmt, sizeof nfmt, "%s%d: %s: %s", TUN_NAME, LogTunno, log_Name(lev), fmt); else snprintf(nfmt, sizeof nfmt, "%s: %s", log_Name(lev), fmt); if (log_PromptContext && lev == LogWARN) /* Warnings just go to the current prompt */ prompt_vPrintf(log_PromptContext, nfmt, ap); else for (prompt = promptlist; prompt; prompt = prompt->next) if (lev > LogMAXCONF || (prompt->logmask & MSK(lev))) prompt_vPrintf(prompt, nfmt, ap); } va_end(ap); va_start(ap, fmt); if ((log_IsKept(lev) & LOG_KEPT_SYSLOG) && (lev != LogWARN || !log_PromptContext)) { if ((log_IsKept(LogTUN) & LOG_KEPT_SYSLOG) && LogTunno != -1) snprintf(nfmt, sizeof nfmt, "%s%d: %s: %s", TUN_NAME, LogTunno, log_Name(lev), fmt); else snprintf(nfmt, sizeof nfmt, "%s: %s", log_Name(lev), fmt); vsyslog(syslogLevel(lev), nfmt, ap); } va_end(ap); } }
int log_SetLevel(struct cmdargs const *arg) { int i, res, argc, local; char const *const *argv, *argp; argc = arg->argc - arg->argn; argv = arg->argv + arg->argn; res = 0; if (argc == 0 || strcasecmp(argv[0], "local")) local = 0; else { if (arg->prompt == NULL) { log_Printf(LogWARN, "set log local: Only available on the" " command line\n"); return 1; } argc--; argv++; local = 1; } if (argc == 0 || (argv[0][0] != '+' && argv[0][0] != '-')) { if (local) log_DiscardAllLocal(&arg->prompt->logmask); else log_DiscardAll(); } while (argc--) { argp = **argv == '+' || **argv == '-' ? *argv + 1 : *argv; /* Special case 'all' */ if (strcasecmp(argp, "all") == 0) { if (**argv == '-') { if (local) for (i = LogMIN; i <= LogMAX; i++) log_DiscardLocal(i, &arg->prompt->logmask); else for (i = LogMIN; i <= LogMAX; i++) log_Discard(i); } else if (local) for (i = LogMIN; i <= LogMAX; i++) log_KeepLocal(i, &arg->prompt->logmask); else for (i = LogMIN; i <= LogMAX; i++) log_Keep(i); argv++; continue; } for (i = LogMIN; i <= LogMAX; i++) if (strcasecmp(argp, log_Name(i)) == 0) { if (**argv == '-') { if (local) log_DiscardLocal(i, &arg->prompt->logmask); else log_Discard(i); } else if (local) log_KeepLocal(i, &arg->prompt->logmask); else log_Keep(i); break; } if (i > LogMAX) { log_Printf(LogWARN, "%s: Invalid log value\n", argp); res = -1; } argv++; } return res; }