-
Notifications
You must be signed in to change notification settings - Fork 378
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #2007 from evgenyz/fix-coverity-1.3.8
Fix coverity 1.3.8
- Loading branch information
Showing
8 changed files
with
256 additions
and
183 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,161 @@ | ||
/* | ||
* Copyright 2023 Red Hat Inc., Durham, North Carolina. | ||
* All Rights Reserved. | ||
* | ||
* 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 Street, Fifth Floor, Boston, MA 02110-1301 USA | ||
* | ||
* Authors: | ||
* Evgenii Kolesnikov <ekolesni@redhat.com> | ||
*/ | ||
|
||
#ifdef HAVE_CONFIG_H | ||
#include <config.h> | ||
#endif | ||
|
||
#include <limits.h> | ||
#include "common/util.h" | ||
#include "oscap_helpers.h" | ||
#include "common/debug_priv.h" | ||
#include "oval_dbus.h" | ||
|
||
|
||
char *oval_dbus_value_to_string(DBusMessageIter *iter) | ||
{ | ||
const int arg_type = dbus_message_iter_get_arg_type(iter); | ||
if (dbus_type_is_basic(arg_type)) { | ||
_DBusBasicValue value; | ||
dbus_message_iter_get_basic(iter, &value); | ||
|
||
switch (arg_type) | ||
{ | ||
case DBUS_TYPE_BYTE: | ||
return oscap_sprintf("%c", value.byt); | ||
|
||
case DBUS_TYPE_BOOLEAN: | ||
return oscap_strdup(value.bool_val ? "true" : "false"); | ||
|
||
case DBUS_TYPE_INT16: | ||
return oscap_sprintf("%i", value.i16); | ||
|
||
case DBUS_TYPE_UINT16: | ||
return oscap_sprintf("%u", value.u16); | ||
|
||
case DBUS_TYPE_INT32: | ||
return oscap_sprintf("%i", value.i32); | ||
|
||
case DBUS_TYPE_UINT32: | ||
return oscap_sprintf("%u", value.u32); | ||
|
||
#ifdef DBUS_HAVE_INT64 | ||
case DBUS_TYPE_INT64: | ||
return oscap_sprintf("%li", value.i64); | ||
|
||
case DBUS_TYPE_UINT64: | ||
return oscap_sprintf("%lu", value.u64); | ||
#endif | ||
|
||
case DBUS_TYPE_DOUBLE: | ||
return oscap_sprintf("%g", value.dbl); | ||
|
||
case DBUS_TYPE_STRING: | ||
case DBUS_TYPE_OBJECT_PATH: | ||
case DBUS_TYPE_SIGNATURE: | ||
return oscap_strdup(value.str); | ||
|
||
// We skip non-basic types for now | ||
//case DBUS_TYPE_ARRAY: | ||
//case DBUS_TYPE_STRUCT: | ||
//case DBUS_TYPE_DICT_ENTRY: | ||
//case DBUS_TYPE_VARIANT: | ||
//case DBUS_TYPE_UNIX_FD: | ||
// return oscap_sprintf("%i", value.fd); | ||
|
||
default: | ||
dD("Encountered unknown D-Bus basic type: %d!", arg_type); | ||
return oscap_strdup("error, unknown basic type!"); | ||
} | ||
} else if (arg_type == DBUS_TYPE_ARRAY) { | ||
DBusMessageIter array; | ||
dbus_message_iter_recurse(iter, &array); | ||
|
||
char *ret = NULL; | ||
do { | ||
char *element = oval_dbus_value_to_string(&array); | ||
|
||
if (element == NULL) | ||
continue; | ||
|
||
char *old_ret = ret; | ||
if (old_ret == NULL) | ||
ret = oscap_sprintf("%s", element); | ||
else | ||
ret = oscap_sprintf("%s, %s", old_ret, element); | ||
|
||
free(old_ret); | ||
free(element); | ||
} | ||
while (dbus_message_iter_next(&array)); | ||
|
||
return ret; | ||
} | ||
|
||
return NULL; | ||
} | ||
|
||
DBusConnection *oval_connect_dbus(void) | ||
{ | ||
DBusConnection *conn = NULL; | ||
|
||
DBusError err; | ||
dbus_error_init(&err); | ||
|
||
const char *prefix = getenv("OSCAP_PROBE_ROOT"); | ||
if (prefix != NULL) { | ||
char dbus_address[PATH_MAX] = {0}; | ||
snprintf(dbus_address, PATH_MAX, "unix:path=%s/run/dbus/system_bus_socket", prefix); | ||
setenv("DBUS_SYSTEM_BUS_ADDRESS", dbus_address, 0); | ||
/* We won't overwrite DBUS_SYSTEM_BUS_ADDRESS so that | ||
* user could have a way to define some non-standard system bus socket location */ | ||
} | ||
|
||
conn = dbus_bus_get(DBUS_BUS_SYSTEM, &err); | ||
if (dbus_error_is_set(&err)) { | ||
dD("Failed to get DBUS_BUS_SYSTEM connection - %s", err.message); | ||
goto cleanup; | ||
} | ||
if (conn == NULL) { | ||
dD("DBusConnection == NULL!"); | ||
goto cleanup; | ||
} | ||
|
||
dbus_bus_register(conn, &err); | ||
if (dbus_error_is_set(&err)) { | ||
dD("Failed to register on dbus - %s", err.message); | ||
goto cleanup; | ||
} | ||
|
||
cleanup: | ||
dbus_error_free(&err); | ||
|
||
return conn; | ||
} | ||
|
||
void oval_disconnect_dbus(DBusConnection *conn) | ||
{ | ||
// NOOP | ||
|
||
// Connections retrieved via dbus_bus_get shall not be destroyed, | ||
// these connections are shared. | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
/* | ||
* Copyright 2023 Red Hat Inc., Durham, North Carolina. | ||
* All Rights Reserved. | ||
* | ||
* 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 Street, Fifth Floor, Boston, MA 02110-1301 USA | ||
* | ||
* Authors: | ||
* Evgenii Kolesnikov <ekolesni@redhat.com> | ||
*/ | ||
|
||
#ifndef OPENSCAP_OVAL_DBUS_H_ | ||
#define OPENSCAP_OVAL_DBUS_H_ | ||
|
||
#include <dbus/dbus.h> | ||
|
||
|
||
// Old versions of libdbus API don't have DBusBasicValue and DBus8ByteStruct | ||
// as a public typedefs. | ||
// These two typedefs were copied from libdbus 1.8 branch, see | ||
// http://cgit.freedesktop.org/dbus/dbus/tree/dbus/dbus-types.h?h=dbus-1.8#n137 | ||
typedef struct | ||
{ | ||
dbus_uint32_t first32; | ||
dbus_uint32_t second32; | ||
} _DBus8ByteStruct; | ||
|
||
typedef union | ||
{ | ||
unsigned char bytes[8]; /**< as 8 individual bytes */ | ||
dbus_int16_t i16; /**< as int16 */ | ||
dbus_uint16_t u16; /**< as int16 */ | ||
dbus_int32_t i32; /**< as int32 */ | ||
dbus_uint32_t u32; /**< as int32 */ | ||
dbus_bool_t bool_val; /**< as boolean */ | ||
#ifdef DBUS_HAVE_INT64 | ||
dbus_int64_t i64; /**< as int64 */ | ||
dbus_uint64_t u64; /**< as int64 */ | ||
#endif | ||
_DBus8ByteStruct eight; /**< as 8-byte struct */ | ||
double dbl; /**< as double */ | ||
unsigned char byt; /**< as byte */ | ||
char *str; /**< as char* (string, object path or signature) */ | ||
int fd; /**< as Unix file descriptor */ | ||
} _DBusBasicValue; | ||
|
||
|
||
char *oval_dbus_value_to_string(DBusMessageIter *iter); | ||
|
||
DBusConnection *oval_connect_dbus(void); | ||
|
||
void oval_disconnect_dbus(DBusConnection *conn); | ||
|
||
#endif |
Oops, something went wrong.