void oio_log_syslog(const gchar *log_domain, GLogLevelFlags log_level, const gchar *message, gpointer user_data UNUSED) { if (!glvl_allowed(log_level)) return; GString *gstr = g_string_new(""); g_string_append_printf(gstr, "%d %04X", getpid(), oio_log_current_thread_id()); if (LOG_LOCAL1 == get_facility(log_domain)) { g_string_append(gstr, " access "); g_string_append(gstr, glvl_to_str(log_level)); } else { if (!log_domain || !*log_domain) log_domain = "-"; g_string_append(gstr, " log "); g_string_append(gstr, glvl_to_str(log_level)); g_string_append_c(gstr, ' '); g_string_append(gstr, log_domain); } g_string_append_c(gstr, ' '); _append_message(gstr, message); syslog(get_facility(log_domain)|glvl_to_lvl(log_level), "%s", gstr->str); g_string_free(gstr, TRUE); }
void f2b_log_msg(log_msgtype_t l, const char *fmt, ...) { va_list args; char msg[LOGLINE_MAX] = ""; char when[64] = ""; time_t now = time(NULL); if (l < minlevel) return; va_start(args, fmt); vsnprintf(msg, sizeof(msg), fmt, args); va_end(args); switch (dest) { case log_syslog: syslog(get_facility(l), "%s", msg); break; default: case log_stderr: logfile = stderr; case log_file: strftime(when, sizeof(when), "%F %H:%M:%S", localtime(&now)); fprintf(logfile, "%s [%s] %s\n", when, loglevels[l], msg); break; } return; }
static void _logger_stderr(const gchar *log_domain, GLogLevelFlags log_level, const gchar *message, gpointer user_data) { static guint longest_prefix = 38; GString *gstr = g_string_sized_new(256); (void) user_data; g_string_append_printf(gstr, "%"G_GINT64_FORMAT" %d %04X ", g_get_monotonic_time () / G_TIME_SPAN_MILLISECOND, getpid(), oio_log_current_thread_id()); if (!log_domain || !*log_domain) log_domain = "-"; if (LOG_LOCAL1 == get_facility(log_domain)) { g_string_append_printf(gstr, "acc %s ", glvl_to_str(log_level)); } else { g_string_append_printf(gstr, "log %s ", glvl_to_str(log_level)); /* print the domain */ if (!(oio_log_flags & LOG_FLAG_TRIM_DOMAIN)) g_string_append(gstr, log_domain); else { const gchar *p = log_domain; while (p && *p) { g_string_append_c(gstr, *p); p = strchr(p, '.'); if (p) { g_string_append_c(gstr, '.'); p ++; } } } } /* prefix done, print a separator */ if (oio_log_flags & LOG_FLAG_COLUMNIZE) { longest_prefix = MAX(gstr->len+1,longest_prefix); do { g_string_append_c(gstr, ' '); } while (gstr->len < longest_prefix); } else g_string_append_c(gstr, ' '); /* now append the message */ _append_message(gstr, message); g_string_append_c(gstr, '\n'); if (oio_log_flags & LOG_FLAG_PURIFY) _purify(gstr->str); /* send the buffer */ fwrite(gstr->str, gstr->len, 1, stderr); g_string_free(gstr, TRUE); }
static foreign_t pl_openlog(term_t Ident, term_t Option, term_t Facility) { char *ident; int option = 0; int facility = 0; if ( PL_get_chars(Ident, &ident, CVT_ATOM|REP_MB|CVT_EXCEPTION) && get_option(Option, &option) && get_facility(Facility, &facility) ) { openlog(strdup(ident), option, facility); return TRUE; } return FALSE; }
void get_options(int argc, char *const argv[]) { extern u_char *logfile, *lockfile, *user, *group, *ifstring; int opt; while ((opt = getopt_long(argc, argv, opts, longopts, NULL)) != EOF) { switch (opt) { case 10: enable(optarg, LOG_TCP); break; case 11: enable(optarg, LOG_UDP); break; case 12: enable(optarg, LOG_ICMP); break; case 13: facility = get_facility(optarg); break; case 14: priority = get_priority(optarg); break; case 15: if (lockfile != NULL) free(lockfile); lockfile = xstrdup(optarg); break; case 'w': enable(optarg, LOG_IP); break; case 'd': flags |= IGNORE_NS; break; case 'u': if (user != NULL) free(user); user = xstrdup(optarg); break; case 'g': if (group != NULL) free(group); group = xstrdup(optarg); break; case 'k': kill_iplog(15, lockfile); break; case 'l': if (opt_enabled(LOG_STDOUT)) { mysyslog("Warning: Overriding --stdout"); flags &= ~LOG_STDOUT; } else if (logfile != NULL) free(logfile); logfile = xstrdup(optarg); break; case 'L': if (logfile != NULL) { mysyslog("Warning: Overriding --logfile"); xfree(logfile); } flags |= LOG_STDOUT; break; case 'm': enable(optarg, SCANS_ONLY); break; case 'o': flags |= NO_FORK; break; case 'c': enable(optarg, DNS_CACHE); break; case 'y': enable(optarg, LOG_FRAG); break; case 'a': flags |= (PROMISC | LOG_DEST); if (pcap_network != NULL) free(pcap_network); pcap_network = xstrdup(optarg); break; case 'D': enable(optarg, LOG_DEST); break; case 'e': #ifdef __linux__ enable(optarg, GET_IDENT); #else mysyslog("Ident lookups are only supported on Linux."); #endif break; case 'T': enable(optarg, TCP_RES); break; case 'U': enable(optarg, UDP_RES); break; case 'V': enable(optarg, VERBOSE); break; case 'I': enable(optarg, ICMP_RES); break; case 'S': enable(optarg, SMURF); break; case 'b': enable(optarg, BOGUS); break; case 'P': enable(optarg, PING_FLOOD); break; case 'p': enable(optarg, PORTSCAN); break; case 'x': enable(optarg, XMAS_SCAN); break; case 'f': enable(optarg, FIN_SCAN); break; case 'q': enable(optarg, SYN_SCAN); break; case 'F': enable(optarg, UDP_SCAN); break; case 'N': flags |= NO_RESOLV; break; case 'n': enable(optarg, NULL_SCAN); break; case 's': enable(optarg, SYN_FLOOD); break; case 't': enable(optarg, TRACEROUTE); break; case 'i': if (ifstring != NULL) free(ifstring); ifstring = xstrdup(optarg); break; case 'R': kill_iplog(1, lockfile); break; case 'z': enable(optarg, FOOL_NMAP); break; case 'v': mysyslog("iplog version %s\nby %s\n%s", VERSION, AUTHORS, WEBPAGE); exit(0); case 'h': default: print_help(); break; } } }
/* Called before a cyrus application starts (but after command line parameters * are read) */ EXPORTED int cyrus_init(const char *alt_config, const char *ident, unsigned flags, int config_need_data) { char *p; const char *val; const char *prefix; int umaskval = 0; int syslog_opts = LOG_PID; const char *facility; if(cyrus_init_run != NOT_RUNNING) { fatal("cyrus_init called twice!", EC_CONFIG); } else { cyrus_init_run = RUNNING; } cyrus_init_nodb = (flags & CYRUSINIT_NODB); #ifdef LOG_PERROR if ((flags & CYRUSINIT_PERROR)) syslog_opts |= LOG_PERROR; #endif initialize_imap_error_table(); initialize_mupd_error_table(); if(!ident) fatal("service name was not specified to cyrus_init", EC_CONFIG); config_ident = ident; /* xxx we lose here since we can't have the prefix until we load the * config file */ openlog(config_ident, syslog_opts, SYSLOG_FACILITY); /* Load configuration file. This will set config_dir when it finds it */ config_read(alt_config, config_need_data); prefix = config_getstring(IMAPOPT_SYSLOG_PREFIX); facility = config_getstring(IMAPOPT_SYSLOG_FACILITY); /* Reopen the log with the new prefix, if needed */ if (prefix || facility) { char *ident_buf; int facnum = facility ? get_facility(facility) : SYSLOG_FACILITY; if (prefix) ident_buf = strconcat(prefix, "/", ident, (char *)NULL); else ident_buf = xstrdup(ident); closelog(); openlog(ident_buf, syslog_opts, facnum); /* don't free the openlog() string! */ } /* allow debug logging */ if (!config_debug) setlogmask(~LOG_MASK(LOG_DEBUG)); /* Look up default partition */ config_defpartition = config_getstring(IMAPOPT_DEFAULTPARTITION); for (p = (char *)config_defpartition; p && *p; p++) { if (!Uisalnum(*p)) fatal("defaultpartition option contains non-alphanumeric character", EC_CONFIG); if (Uisupper(*p)) *p = tolower((unsigned char) *p); } /* Look up umask */ val = config_getstring(IMAPOPT_UMASK); while (*val) { if (*val >= '0' && *val <= '7') umaskval = umaskval*8 + *val - '0'; val++; } umask(umaskval); config_fulldirhash = config_getswitch(IMAPOPT_FULLDIRHASH); /* look up and canonify the implicit rights of mailbox owners */ cyrus_acl_strtomask(config_getstring(IMAPOPT_IMPLICIT_OWNER_RIGHTS), &config_implicitrights); /* XXX and if strtomask fails? */ config_metapartition_files = config_getbitfield(IMAPOPT_METAPARTITION_FILES); val = config_getstring(IMAPOPT_SUPPRESS_CAPABILITIES); if (val) suppressed_capabilities = strarray_split(val, NULL, 0); if (config_getswitch(IMAPOPT_SEARCH_SKIPDIACRIT)) charset_flags |= CHARSET_SKIPDIACRIT; switch (config_getenum(IMAPOPT_SEARCH_WHITESPACE)) { case IMAP_ENUM_SEARCH_WHITESPACE_MERGE: charset_flags |= CHARSET_MERGESPACE; break; case IMAP_ENUM_SEARCH_WHITESPACE_SKIP: charset_flags |= CHARSET_SKIPSPACE; break; default: break; } if (config_getswitch(IMAPOPT_SEARCH_SKIPHTML)) charset_flags |= CHARSET_SKIPHTML; if (config_getswitch(IMAPOPT_RFC2047_UTF8)) charset_flags |= CHARSET_MIME_UTF8; /* Set snippet conversion flags. */ charset_snippet_flags = CHARSET_SNIPPET; if (config_getenum(IMAPOPT_SEARCH_ENGINE) != IMAP_ENUM_SEARCH_ENGINE_XAPIAN) { /* All search engines other than Xapian require escaped HTML */ charset_snippet_flags |= CHARSET_ESCAPEHTML; } if (!cyrus_init_nodb) { /* lookup the database backends */ config_mboxlist_db = config_getstring(IMAPOPT_MBOXLIST_DB); config_quota_db = config_getstring(IMAPOPT_QUOTA_DB); config_subscription_db = config_getstring(IMAPOPT_SUBSCRIPTION_DB); config_annotation_db = config_getstring(IMAPOPT_ANNOTATION_DB); config_seenstate_db = config_getstring(IMAPOPT_SEENSTATE_DB); config_mboxkey_db = config_getstring(IMAPOPT_MBOXKEY_DB); config_duplicate_db = config_getstring(IMAPOPT_DUPLICATE_DB); config_tls_sessions_db = config_getstring(IMAPOPT_TLS_SESSIONS_DB); config_ptscache_db = config_getstring(IMAPOPT_PTSCACHE_DB); config_statuscache_db = config_getstring(IMAPOPT_STATUSCACHE_DB); config_userdeny_db = config_getstring(IMAPOPT_USERDENY_DB); config_zoneinfo_db = config_getstring(IMAPOPT_ZONEINFO_DB); config_conversations_db = config_getstring(IMAPOPT_CONVERSATIONS_DB); config_backup_db = config_getstring(IMAPOPT_BACKUP_DB); /* configure libcyrus as needed */ libcyrus_config_setstring(CYRUSOPT_CONFIG_DIR, config_dir); libcyrus_config_setswitch(CYRUSOPT_AUTH_UNIX_GROUP_ENABLE, config_getswitch(IMAPOPT_UNIX_GROUP_ENABLE)); libcyrus_config_setswitch(CYRUSOPT_USERNAME_TOLOWER, config_getswitch(IMAPOPT_USERNAME_TOLOWER)); libcyrus_config_setswitch(CYRUSOPT_SKIPLIST_UNSAFE, config_getswitch(IMAPOPT_SKIPLIST_UNSAFE)); libcyrus_config_setstring(CYRUSOPT_TEMP_PATH, config_getstring(IMAPOPT_TEMP_PATH)); libcyrus_config_setint(CYRUSOPT_PTS_CACHE_TIMEOUT, config_getint(IMAPOPT_PTSCACHE_TIMEOUT)); libcyrus_config_setswitch(CYRUSOPT_FULLDIRHASH, config_getswitch(IMAPOPT_FULLDIRHASH)); libcyrus_config_setstring(CYRUSOPT_PTSCACHE_DB, config_getstring(IMAPOPT_PTSCACHE_DB)); libcyrus_config_setstring(CYRUSOPT_PTSCACHE_DB_PATH, config_getstring(IMAPOPT_PTSCACHE_DB_PATH)); libcyrus_config_setstring(CYRUSOPT_PTLOADER_SOCK, config_getstring(IMAPOPT_PTLOADER_SOCK)); libcyrus_config_setswitch(CYRUSOPT_VIRTDOMAINS, config_getenum(IMAPOPT_VIRTDOMAINS)); libcyrus_config_setstring(CYRUSOPT_AUTH_MECH, config_getstring(IMAPOPT_AUTH_MECH)); libcyrus_config_setstring(CYRUSOPT_DELETERIGHT, config_getstring(IMAPOPT_DELETERIGHT)); libcyrus_config_setstring(CYRUSOPT_SQL_DATABASE, config_getstring(IMAPOPT_SQL_DATABASE)); libcyrus_config_setstring(CYRUSOPT_SQL_ENGINE, config_getstring(IMAPOPT_SQL_ENGINE)); libcyrus_config_setstring(CYRUSOPT_SQL_HOSTNAMES, config_getstring(IMAPOPT_SQL_HOSTNAMES)); libcyrus_config_setstring(CYRUSOPT_SQL_USER, config_getstring(IMAPOPT_SQL_USER)); libcyrus_config_setstring(CYRUSOPT_SQL_PASSWD, config_getstring(IMAPOPT_SQL_PASSWD)); libcyrus_config_setswitch(CYRUSOPT_SQL_USESSL, config_getswitch(IMAPOPT_SQL_USESSL)); libcyrus_config_setswitch(CYRUSOPT_SKIPLIST_ALWAYS_CHECKPOINT, config_getswitch(IMAPOPT_SKIPLIST_ALWAYS_CHECKPOINT)); /* Not until all configuration parameters are set! */ libcyrus_init(); } return 0; }