/** * idmef_message_get_string: * @message: Pointer to an #idmef_message_t object. * @path: Path to retrieve the string from within @message. * @result: Pointer where the result should be stored. * * Retrieve the string stored within @path of @message and store it * in the user provided @result. * * The caller is responssible for freeing @result. * * Returns: A positive value in case @path was successfully retrieved * 0 if the path is empty, or a negative value if an error occured. */ int idmef_message_get_string(idmef_message_t *message, const char *path, char **result) { int ret; idmef_value_t *iv; prelude_string_t *str; ret = idmef_message_get_value(message, path, &iv); if ( ret <= 0 ) return ret; if ( idmef_value_get_type(iv) != IDMEF_VALUE_TYPE_STRING ) { ret = _idmef_value_cast(iv, IDMEF_VALUE_TYPE_STRING, 0); if ( ret < 0 ) goto err; } if ( ! (str = idmef_value_get_string(iv)) ) { ret = -1; goto err; } if ( prelude_string_is_empty(str) ) { *result = NULL; return 0; } *result = strdup(prelude_string_get_string(str)); ret = prelude_string_get_len(str); err: idmef_value_destroy(iv); return ret; }
static void send_string(prelude_msgbuf_t *msgbuf, prelude_string_t *out, int type) { size_t len; len = prelude_string_is_empty(out) ? 0 : (prelude_string_get_len(out) + 1); if ( type == PRELUDE_MSG_OPTION_VALUE && ! len ) return; prelude_msgbuf_set(msgbuf, type, len, prelude_string_get_string(out)); }
void server_generic_log_client(server_generic_client_t *cnx, prelude_log_t priority, const char *fmt, ...) { va_list ap; int ret = 0; prelude_string_t *out; char addr[128] = { 0 }; prelude_string_new(&out); if ( ((struct sockaddr *) &cnx->sa)->sa_family == AF_UNIX ) snprintf(addr, sizeof(addr), "unix"); else { void *in_addr; const char *str; unsigned int port; #ifdef HAVE_IPV6 port = ntohs(cnx->sa.sin6_port); #else port = ntohs(cnx->sa.sin_port); #endif in_addr = prelude_sockaddr_get_inaddr((struct sockaddr *) &cnx->sa); if ( ! in_addr ) goto out; str = inet_ntop(((struct sockaddr *)&cnx->sa)->sa_family, in_addr, addr, sizeof(addr)); if ( str ) snprintf(addr + strlen(addr), sizeof(addr) - strlen(addr), ":%u", port); } if ( cnx->ident && cnx->permission ) { ret = prelude_string_sprintf(out, " 0x%" PRELUDE_PRIx64, cnx->ident); if ( ret < 0 ) goto out; ret = prelude_connection_permission_to_string(cnx->permission, out); } ret = prelude_string_sprintf(out, "]: "); if ( ret < 0 ) goto out; va_start(ap, fmt); ret = prelude_string_vprintf(out, fmt, ap); va_end(ap); prelude_log(priority, "[%s%s", addr, prelude_string_get_string(out)); out: prelude_string_destroy(out); }
/* * regex stuff */ static int regex_match(const idmef_criterion_value_t *cv, idmef_criterion_operator_t operator, idmef_value_t *value) { int ret; const char *str = NULL; idmef_class_id_t class; struct regex_value *rv = cv->value; if ( idmef_value_get_type(value) == IDMEF_VALUE_TYPE_STRING ) str = prelude_string_get_string(idmef_value_get_string(value)); else if ( idmef_value_get_type(value) == IDMEF_VALUE_TYPE_ENUM ) { class = idmef_value_get_class(value); str = idmef_class_enum_to_string(class, idmef_value_get_enum(value)); } else if ( idmef_value_get_type(value) == IDMEF_VALUE_TYPE_DATA ) {
static const char *get_restart_string(void) { int ret; size_t i; prelude_string_t *buf; ret = prelude_string_new(&buf); if ( ret < 0 ) return global_argv[0]; for ( i = 0; global_argv[i] != NULL; i++ ) { if ( ! prelude_string_is_empty(buf) ) prelude_string_cat(buf, " "); prelude_string_cat(buf, global_argv[i]); } return prelude_string_get_string(buf); }
static int btime_print(const idmef_criterion_value_t *cv, prelude_io_t *fd) { int ret; prelude_string_t *out; ret = prelude_string_new(&out); if ( ret < 0 ) return ret; ret = btime_to_string(cv, out); if ( ret < 0 ) { prelude_string_destroy(out); return ret; } ret = prelude_io_write(fd, prelude_string_get_string(out), prelude_string_get_len(out)); prelude_string_destroy(out); return ret; }
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); }