void prelude_start(char *profile, int argc, char **argv) { int ret; prelude_client = NULL; ret = prelude_init(&argc, argv); if (ret < 0) { merror("%s: %s: Unable to initialize the Prelude library: %s.", ARGV0, prelude_strsource(ret), prelude_strerror(ret)); return; } ret = prelude_client_new(&prelude_client, profile != NULL ? profile : DEFAULT_ANALYZER_NAME); if (!prelude_client) { merror("%s: %s: Unable to create a prelude client object: %s.", ARGV0, prelude_strsource(ret), prelude_strerror(ret)); return; } ret = setup_analyzer(prelude_client_get_analyzer(prelude_client)); if (ret < 0) { merror("%s: %s: Unable to setup analyzer: %s", ARGV0, prelude_strsource(ret), prelude_strerror(ret)); prelude_client_destroy(prelude_client, PRELUDE_CLIENT_EXIT_STATUS_FAILURE); return; } ret = prelude_client_set_flags(prelude_client, prelude_client_get_flags(prelude_client) | PRELUDE_CLIENT_FLAGS_ASYNC_TIMER); if (ret < 0) { merror("%s: %s: Unable to set prelude client flags: %s.", ARGV0, prelude_strsource(ret), prelude_strerror(ret)); } /* Set uid and gid of ossec */ prelude_client_profile_set_uid(prelude_client_get_profile(prelude_client), Privsep_GetUser(USER)); prelude_client_profile_set_gid(prelude_client_get_profile(prelude_client), Privsep_GetGroup(GROUPGLOBAL)); ret = prelude_client_start(prelude_client); if (ret < 0) { merror("%s: %s: Unable to initialize prelude client: %s.", ARGV0, prelude_strsource(ret), prelude_strerror(ret)); prelude_client_destroy(prelude_client, PRELUDE_CLIENT_EXIT_STATUS_FAILURE); return; } return; }
static int send_auth_result(server_generic_client_t *client, int result) { int ret; uint64_t nident; prelude_client_profile_t *cp; if ( ! client->msg ) { ret = prelude_msg_new(&client->msg, 1, sizeof(uint64_t), PRELUDE_MSG_AUTH, 0); if ( ret < 0 ) return -1; cp = prelude_client_get_profile(manager_client); nident = prelude_hton64(prelude_client_profile_get_analyzerid(cp)); prelude_msg_set(client->msg, result, sizeof(nident), &nident); } ret = prelude_msg_write(client->msg, client->fd); if ( ret < 0 ) { if ( prelude_error_get_code(ret) == PRELUDE_ERROR_EAGAIN ) { server_generic_notify_write_enable(client); return 0; } prelude_msg_destroy(client->msg); return -1; } prelude_msg_destroy(client->msg); client->msg = NULL; return (client->state & SERVER_GENERIC_CLIENT_STATE_AUTHENTICATED) ? 1 : -1; }
Client::Client(const std::string& profile, const std::string& config, int permission) { if ( prelude_client_new(&client_, profile.c_str()) < 0 ) throw Exception(SYSTEM_SAVE_LOCATION, "Cannot create prelude client."); if ( prelude_client_set_config_filename(client_, config.c_str()) < 0 ) throw Exception(SYSTEM_SAVE_LOCATION, "Error reading prelude config file " + config); prelude_client_set_required_permission(client_, (prelude_connection_permission_t) permission); const prelude_client_flags_t flags=static_cast<prelude_client_flags_t>(prelude_client_get_flags(client_) | PRELUDE_CLIENT_FLAGS_ASYNC_TIMER); if ( prelude_client_set_flags(client_, flags) < 0 ) throw Exception(SYSTEM_SAVE_LOCATION, "Cannot set ASYNC TIMER."); prelude_client_profile_set_uid(prelude_client_get_profile(client_),getuid()); prelude_client_profile_set_gid(prelude_client_get_profile(client_),getgid()); if ( prelude_client_init(client_) < 0 ) throw Exception(SYSTEM_SAVE_LOCATION, "Cannot initialize prelude client."); if ( prelude_client_start(client_) < 0 ) throw Exception(SYSTEM_SAVE_LOCATION, "Cannot start prelude client."); }
static int add_analyzer(prelude_client_t *client, void *top, void *(*geta)(void *top, idmef_analyzer_t *analyzer), int (*insa)(void *top, idmef_analyzer_t *analyzer, int pos)) { prelude_string_t *str; uint64_t wanted_analyzerid, analyzerid; idmef_analyzer_t *analyzer = NULL, *canalyzer; canalyzer = prelude_client_get_analyzer(client); wanted_analyzerid = prelude_client_profile_get_analyzerid(prelude_client_get_profile(client)); while ( (analyzer = geta(top, analyzer)) && analyzer != canalyzer ) { str = idmef_analyzer_get_analyzerid(analyzer); if ( ! str ) continue; analyzerid = strtoull(prelude_string_get_string(str), NULL, 10); if ( analyzerid == wanted_analyzerid ) return 0; } return insa(top, idmef_analyzer_ref(prelude_client_get_analyzer(client)), IDMEF_LIST_PREPEND); }