/** * 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; }
int idmef_message_get_data(idmef_message_t *message, const char *path, unsigned char **data, size_t *size) { int ret; idmef_data_t *dp; idmef_value_t *iv; ret = idmef_message_get_value(message, path, &iv); if ( ret <= 0 ) return ret; if ( idmef_value_get_type(iv) != IDMEF_VALUE_TYPE_DATA || ! (dp = idmef_value_get_data(iv)) ) { ret = -1; goto err; } *size = idmef_data_get_len(dp); *data = malloc(*size); if ( ! *data ) { ret = -1; goto err; } memcpy(*data, idmef_data_get_data(dp), *size); err: idmef_value_destroy(iv); return ret; }
/** * 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; } ret = prelude_string_get_string_released(str, result); err: idmef_value_destroy(iv); return ret; }
/* * 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 void cast_int32(void) { idmef_value_t *value; assert(idmef_value_new_int32(&value, INT32_MIN) == 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_INT8, -1) < 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_INT16, -1) < 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_UINT8, -1) < 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_UINT16, -1) < 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_UINT32, -1) < 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_UINT64, -1) < 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_INT64, -1) == 0); assert(idmef_value_get_type(value) == IDMEF_VALUE_TYPE_INT64); assert(idmef_value_get_int64(value) == INT32_MIN); idmef_value_destroy(value); assert(idmef_value_new_int32(&value, INT32_MIN) == 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_FLOAT, -1) == 0); assert(idmef_value_get_type(value) == IDMEF_VALUE_TYPE_FLOAT); assert(idmef_value_get_float(value) == INT32_MIN); idmef_value_destroy(value); assert(idmef_value_new_int32(&value, INT32_MIN) == 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_DOUBLE, -1) == 0); assert(idmef_value_get_type(value) == IDMEF_VALUE_TYPE_DOUBLE); assert(idmef_value_get_double(value) == INT32_MIN); idmef_value_destroy(value); assert(idmef_value_new_int32(&value, INT32_MIN) == 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_DATA, -1) == 0); assert(idmef_value_get_type(value) == IDMEF_VALUE_TYPE_DATA); assert((int) idmef_data_get_uint32(idmef_value_get_data(value)) == INT32_MIN); idmef_value_destroy(value); assert(idmef_value_new_int32(&value, INT32_MAX) == 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_TIME, -1) == 0); assert(idmef_value_get_type(value) == IDMEF_VALUE_TYPE_TIME); assert(idmef_time_get_sec(idmef_value_get_time(value)) == INT32_MAX); idmef_value_destroy(value); }
static void cast_data(idmef_value_t *value) { assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_INT8, -1) < 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_UINT8, -1) < 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_INT16, -1) < 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_UINT16, -1) < 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_INT32, -1) < 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_UINT32, -1) < 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_INT64, -1) < 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_UINT64, -1) < 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_FLOAT, -1) < 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_DOUBLE, -1) < 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_TIME, -1) < 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_ENUM, -1) < 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_LIST, -1) < 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_CLASS, -1) < 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_STRING, -1) == 0); assert(idmef_value_get_type(value) == IDMEF_VALUE_TYPE_STRING); }
/** * idmef_message_get_number: * @message: Pointer to an #idmef_message_t object. * @path: Path to retrieve the number from within @message. * @result: Pointer where the result should be stored. * * Retrieve the number stored within @path of @message and store it * in the user provided @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_number(idmef_message_t *message, const char *path, double *result) { int ret; idmef_value_t *iv; ret = idmef_message_get_value(message, path, &iv); if ( ret <= 0 ) return ret; if ( idmef_value_get_type(iv) != IDMEF_VALUE_TYPE_DOUBLE ) { ret = _idmef_value_cast(iv, IDMEF_VALUE_TYPE_DOUBLE, 0); if ( ret < 0 ) goto err; } *result = idmef_value_get_double(iv); err: idmef_value_destroy(iv); return ret; }
static void cast_string(void) { idmef_data_t *data; idmef_value_t *value; requiem_string_t *str; assert(requiem_string_new_ref(&str, "abcdefgh") == 0); assert(idmef_value_new_string(&value, str) == 0); idmef_value_dont_have_own_data(value); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_INT8, -1) < 0); // assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_UINT8, -1) < 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_INT16, -1) < 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_UINT16, -1) < 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_INT32, -1) < 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_UINT32, -1) < 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_INT64, -1) < 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_UINT64, -1) < 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_FLOAT, -1) < 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_DOUBLE, -1) < 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_TIME, -1) < 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_ENUM, -1) < 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_LIST, -1) < 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_CLASS, -1) < 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_DATA, -1) == 0); assert(idmef_value_get_type(value) == IDMEF_VALUE_TYPE_DATA); assert(data = idmef_value_get_data(value)); assert(idmef_data_get_len(data) == (requiem_string_get_len(str) + 1)); assert(memcmp(requiem_string_get_string(str), idmef_data_get_data(data), idmef_data_get_len(data)) == 0); requiem_string_destroy(str); cast_data(value); idmef_value_destroy(value); assert(requiem_string_new_ref(&str, "2008-01-01 20:42:31") == 0); assert(idmef_value_new_string(&value, str) == 0); assert(_idmef_value_cast(value, IDMEF_VALUE_TYPE_TIME, -1) == 0); idmef_value_destroy(value); }
static int do_btime_match(const idmef_criterion_value_t *cv, idmef_criterion_operator_t op, idmef_value_t *value) { time_t sec, wanted, matched; struct tm lt, *comp = cv->value; if ( idmef_value_get_type(value) != IDMEF_VALUE_TYPE_TIME ) return -1; sec = idmef_time_get_sec(idmef_value_get_time(value)); if ( ! gmtime_r(&sec, <) ) return prelude_error_from_errno(errno); /* * Apply mask */ if ( comp->tm_sec < 0 ) lt.tm_sec = -1; if ( comp->tm_min < 0 ) lt.tm_min = -1; if ( comp->tm_mon < 0 ) lt.tm_mon = -1; if ( comp->tm_hour < 0 ) lt.tm_hour = -1; if ( comp->tm_mday < 0 ) lt.tm_mday = -1; if ( comp->tm_year < 0 ) lt.tm_year = -1; if ( comp->tm_wday < 0 ) lt.tm_wday = -1; if ( comp->tm_yday < 0 ) lt.tm_yday = -1; wanted = timegm(comp); matched = timegm(<); if ( op & IDMEF_CRITERION_OPERATOR_EQUAL && matched == wanted ) return 1; if ( op & IDMEF_CRITERION_OPERATOR_LESSER && matched < wanted) return 1; if ( op & IDMEF_CRITERION_OPERATOR_GREATER && matched > wanted ) return 1; return 0; }