%PDF- %PDF-
| Direktori : /proc/thread-self/root/backups/router/usr/local/include/syslog-ng/ |
| Current File : //proc/thread-self/root/backups/router/usr/local/include/syslog-ng/cfg.h |
/*
* Copyright (c) 2002-2013 Balabit
* Copyright (c) 1998-2012 Balázs Scheidler
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*
* As an additional exemption you are allowed to compile & link against the
* OpenSSL libraries as published by the OpenSSL project. See the file
* COPYING for details.
*
*/
#ifndef CFG_H_INCLUDED
#define CFG_H_INCLUDED
#include "syslog-ng.h"
#include "cfg-tree.h"
#include "cfg-lexer.h"
#include "cfg-parser.h"
#include "cfg-persist.h"
#include "plugin.h"
#include "persist-state.h"
#include "template/templates.h"
#include "host-resolve.h"
#include "logmsg/type-hinting.h"
#include "stats/stats.h"
#include "healthcheck/healthcheck-stats.h"
#include "dnscache.h"
#include "file-perms.h"
#include <sys/types.h>
#include <regex.h>
/* destination mark modes */
enum
{
MM_INTERNAL = 1,
MM_DST_IDLE,
MM_HOST_IDLE,
MM_PERIODICAL,
MM_NONE,
MM_GLOBAL,
};
/* configuration data as loaded from the config file */
struct _GlobalConfig
{
/* version number specified by the user, set _after_ parsing is complete */
/* hex-encoded syslog-ng major/minor, e.g. 0x0201 is syslog-ng 2.1 format */
gint user_version;
/* config identifier specified by the user */
gchar *user_config_id;
guint8 *config_hash;
const gchar *filename;
PluginContext plugin_context;
gboolean use_plugin_discovery;
gboolean enable_forced_modules;
CfgLexer *lexer;
CfgArgs *globals;
StatsOptions stats_options;
HealthCheckStatsOptions healthcheck_options;
gint mark_freq;
gint flush_lines;
gint mark_mode;
gboolean threaded;
gboolean pass_unix_credentials;
gboolean chain_hostnames;
gboolean keep_hostname;
gboolean check_hostname;
gboolean bad_hostname_compiled;
regex_t bad_hostname;
gchar *bad_hostname_re;
gchar *custom_domain;
DNSCacheOptions dns_cache_options;
gint time_reopen;
gint time_reap;
gint suppress;
gint type_cast_strictness;
gint log_fifo_size;
gint log_msg_size;
gboolean trim_large_messages;
gint log_level;
gboolean create_dirs;
FilePermOptions file_perm_options;
GList *source_mangle_callback_list;
gboolean use_uniqid;
gboolean keep_timestamp;
gchar *recv_time_zone;
LogTemplateOptions template_options;
HostResolveOptions host_resolve_options;
gchar *file_template_name;
gchar *proto_template_name;
LogTemplate *file_template;
LogTemplate *proto_template;
guint min_iw_size_per_reader;
PersistConfig *persist;
PersistState *state;
GHashTable *module_config;
CfgTree tree;
GString *preprocess_config;
GString *original_config;
GList *file_list;
};
gboolean cfg_load_module_with_args(GlobalConfig *cfg, const gchar *module_name, CfgArgs *args);
gboolean cfg_load_module(GlobalConfig *cfg, const gchar *module_name);
gboolean cfg_is_module_available(GlobalConfig *self, const gchar *module_name);
void cfg_discover_candidate_modules(GlobalConfig *self);
Plugin *cfg_find_plugin(GlobalConfig *cfg, gint plugin_type, const gchar *plugin_name);
gpointer cfg_parse_plugin(GlobalConfig *cfg, Plugin *plugin, CFG_LTYPE *yylloc, gpointer arg);
gboolean cfg_allow_config_dups(GlobalConfig *self);
void cfg_bad_hostname_set(GlobalConfig *self, gchar *bad_hostname_re);
gint cfg_lookup_mark_mode(const gchar *mark_mode);
void cfg_set_mark_mode(GlobalConfig *self, const gchar *mark_mode);
gboolean cfg_set_log_level(GlobalConfig *self, const gchar *log_level);
gint cfg_tz_convert_value(gchar *convert);
gint cfg_ts_format_value(gchar *format);
void cfg_set_version_without_validation(GlobalConfig *self, gint version);
gboolean cfg_set_version(GlobalConfig *self, gint version);
gboolean cfg_set_current_version(GlobalConfig *self);
void cfg_set_user_config_id(GlobalConfig *self, const gchar *id);
void cfg_format_id(GlobalConfig *self, GString *id);
void cfg_set_global_paths(GlobalConfig *self);
GlobalConfig *cfg_new(gint version);
GlobalConfig *cfg_new_snippet(void);
GlobalConfig *cfg_new_subordinate(GlobalConfig *master);
gboolean cfg_run_parser(GlobalConfig *self, CfgLexer *lexer, CfgParser *parser, gpointer *result, gpointer arg);
gboolean cfg_run_parser_with_main_context(GlobalConfig *self, CfgLexer *lexer, CfgParser *parser, gpointer *result,
gpointer arg, const gchar *desc);
gboolean cfg_read_config(GlobalConfig *cfg, const gchar *fname, gchar *preprocess_into);
void cfg_load_forced_modules(GlobalConfig *self);
void cfg_shutdown(GlobalConfig *self);
gboolean cfg_is_shutting_down(GlobalConfig *cfg);
void cfg_free(GlobalConfig *self);
gboolean cfg_init(GlobalConfig *cfg);
gboolean cfg_deinit(GlobalConfig *cfg);
PersistConfig *persist_config_new(void);
void persist_config_free(PersistConfig *self);
void cfg_persist_config_move(GlobalConfig *src, GlobalConfig *dest);
void cfg_persist_config_add(GlobalConfig *cfg, const gchar *name, gpointer value, GDestroyNotify destroy);
gpointer cfg_persist_config_fetch(GlobalConfig *cfg, const gchar *name);
typedef gboolean(* mangle_callback)(GlobalConfig *cfg, LogMessage *msg, gpointer user_data);
void register_source_mangle_callback(GlobalConfig *src, mangle_callback cb);
gboolean is_source_mangle_callback_registered(GlobalConfig *src, mangle_callback cb);
void uregister_source_mangle_callback(GlobalConfig *src, mangle_callback cb);
static inline gboolean
__cfg_is_config_version_older(GlobalConfig *cfg, gint req)
{
if (!cfg)
return FALSE;
if (version_convert_from_user(cfg->user_version) >= req)
return FALSE;
return TRUE;
}
/* VERSION_VALUE_LAST_SEMANTIC_CHANGE needs to be bumped in versioning.h whenever
* we add a conditional on the config version anywhere in the codebase. The
* G_STATIC_ASSERT checks that we indeed did that.
*
* We also allow merging the features for the upcoming major version.
*/
#define cfg_is_config_version_older(__cfg, __req) \
({ \
/* check that VERSION_VALUE_LAST_SEMANTIC_CHANGE is set correctly */ G_STATIC_ASSERT((__req) <= VERSION_VALUE_LAST_SEMANTIC_CHANGE || (__req) == VERSION_VALUE_NEXT_MAJOR); \
__cfg_is_config_version_older(__cfg, __req); \
})
/* This function returns TRUE if a version based feature flip is enabled.
* This will enable or disable feature related upgrade warnings.
*
* This was initially introduced for "typing" support, where the following
* is implemented:
*
* As long as we are using a 3.x version number (less than 3.255), the upgrade
* warnings are suppressed and compatibility mode is enabled. Once @version
* is something equal or larger than 3.255, we still enable compatibility but
* warnings will NOT be suppressed. This is controlled with
* FEATURE_TYPING_MIN_VERSION.
*
* Once we release 4.0, FEATURE_TYPING_MIN_VERSION needs to be set to zero in
* versioning.h With that all upgrade notices start to appear when syslog-ng
* finds a 3.x configuration.
*/
#define __cfg_is_feature_enabled(cfg, min_version) \
({ \
/* the flip-over for min_version reached, set min_version to 0 */ G_STATIC_ASSERT(min_version == 0 || VERSION_VALUE_CURRENT < ((min_version) - 1)); \
version_convert_from_user(cfg->user_version) >= (min_version) - 1; \
})
#define cfg_is_feature_enabled(cfg, topic) __cfg_is_feature_enabled(cfg, FEATURE_ ## topic ## _MIN_VERSION)
#define cfg_is_typing_feature_enabled(cfg) cfg_is_feature_enabled(cfg, TYPING)
#define cfg_is_experimental_feature_enabled(cfg) 0
static inline void
cfg_set_use_uniqid(gboolean flag)
{
configuration->use_uniqid = !!flag;
}
gint cfg_get_user_version(const GlobalConfig *cfg);
guint cfg_get_parsed_version(const GlobalConfig *cfg);
const gchar *cfg_get_filename(const GlobalConfig *cfg);
static inline EVTTAG *
cfg_format_version_tag(const gchar *tag_name, gint version)
{
return evt_tag_printf(tag_name, "%d.%d", (version & 0xFF00) >> 8, version & 0xFF);
}
static inline EVTTAG *
cfg_format_config_version_tag(GlobalConfig *self)
{
return cfg_format_version_tag("config-version", self->user_version);
}
#endif