Files
djhackersdev_bemanitools/src/main/iidxhook-util/config-eamuse.c
T
icex2 5531726fc2 feat(iidxhook1): Use sdk-hook and support config api
Summary:

Test Plan:
Read any configuration values through bemanitools's
configuration API abstraction. This still had to be
hooked up when a hook dll is being loaded. The
current implementation relies on an environment
variable providing the path to the original inject
configuration file, then it extracts the relevant hook
configuration section for the currently loaded hook
library.

This adheres to the limitations of not having any
other entry points than DllMain for a hook library
(as of now).
2024-08-15 13:24:47 +02:00

213 lines
6.9 KiB
C

#include <string.h>
#include "cconfig/cconfig-util.h"
#include "core/config-ext.h"
#include "iidxhook-util/config-eamuse.h"
#include "iface-core/log.h"
#include "security/mcode.h"
#include "util/str.h"
#define IIDXHOOK_CONFIG_EAMUSE_CARD_TYPE_KEY "eamuse.card_type"
#define IIDXHOOK_CONFIG_EAMUSE_SERVER_KEY "eamuse.server"
#define IIDXHOOK_CONFIG_EAMUSE_PCBID_KEY "eamuse.pcbid"
#define IIDXHOOK_CONFIG_EAMUSE_EAMID_KEY "eamuse.eamid"
#define IIDXHOOK_CONFIG_EAMUSE_DEFAULT_CARD_TYPE_VALUE \
SECURITY_MCODE_GAME_IIDX_9
#define IIDXHOOK_CONFIG_EAMUSE_DEFAULT_SERVER_VALUE "localhost:80"
#define IIDXHOOK_CONFIG_EAMUSE_DEFAULT_PCBID_VALUE security_id_default
#define IIDXHOOK_CONFIG_EAMUSE_DEFAULT_PCBID_VALUE_LEN \
sizeof(security_id_default)
#define IIDXHOOK_CONFIG_EAMUSE_DEFAULT_EAMID_VALUE security_id_default
#define IIDXHOOK_CONFIG_EAMUSE_DEFAULT_EAMID_VALUE_LEN \
sizeof(security_id_default)
const struct net_addr iidxhook_eamuse_default_server = {
.type = NET_ADDR_TYPE_HOSTNAME,
.hostname.host = "localhost",
.hostname.port = 80,
};
void iidxhook_util_config_eamuse_init(struct cconfig *config)
{
cconfig_util_set_str(
config,
IIDXHOOK_CONFIG_EAMUSE_CARD_TYPE_KEY,
IIDXHOOK_CONFIG_EAMUSE_DEFAULT_CARD_TYPE_VALUE,
"Magnetic card type, format XXX, 3 digit string (supports: C02, "
"D01, "
"E11, ECO)");
cconfig_util_set_str(
config,
IIDXHOOK_CONFIG_EAMUSE_SERVER_KEY,
IIDXHOOK_CONFIG_EAMUSE_DEFAULT_SERVER_VALUE,
"URL (e.g. http://my.eamuse.server:80/whatever) or IPV4 "
"(e.g. 127.0.0.1:80) of the target eamuse server. The port is "
"optional "
"but defaults to 80.");
cconfig_util_set_data(
config,
IIDXHOOK_CONFIG_EAMUSE_PCBID_KEY,
(uint8_t *) &IIDXHOOK_CONFIG_EAMUSE_DEFAULT_PCBID_VALUE,
IIDXHOOK_CONFIG_EAMUSE_DEFAULT_PCBID_VALUE_LEN,
"PCBID");
cconfig_util_set_data(
config,
IIDXHOOK_CONFIG_EAMUSE_EAMID_KEY,
(uint8_t *) &IIDXHOOK_CONFIG_EAMUSE_DEFAULT_EAMID_VALUE,
IIDXHOOK_CONFIG_EAMUSE_DEFAULT_EAMID_VALUE_LEN,
"EAMID");
}
void iidxhook_util_config_eamuse_get(
struct iidxhook_util_config_eamuse *config_eamuse, struct cconfig *config)
{
char server_url[1024];
char *tmp;
char *tmp2;
memset(config_eamuse, 0, sizeof(struct iidxhook_util_config_eamuse));
if (!cconfig_util_get_str(
config,
IIDXHOOK_CONFIG_EAMUSE_CARD_TYPE_KEY,
config_eamuse->card_type,
sizeof(config_eamuse->card_type) - 1,
IIDXHOOK_CONFIG_EAMUSE_DEFAULT_CARD_TYPE_VALUE)) {
log_warning(
"Invalid value for key '%s' specified, fallback "
"to default '%s'",
IIDXHOOK_CONFIG_EAMUSE_CARD_TYPE_KEY,
IIDXHOOK_CONFIG_EAMUSE_DEFAULT_CARD_TYPE_VALUE);
}
if (!cconfig_util_get_str(
config,
IIDXHOOK_CONFIG_EAMUSE_SERVER_KEY,
server_url,
sizeof(server_url),
IIDXHOOK_CONFIG_EAMUSE_DEFAULT_SERVER_VALUE)) {
log_warning(
"Invalid value for key '%s' specified, fallback "
"to default '%s'",
IIDXHOOK_CONFIG_EAMUSE_SERVER_KEY,
IIDXHOOK_CONFIG_EAMUSE_DEFAULT_SERVER_VALUE);
}
if (!net_str_parse(server_url, &config_eamuse->server)) {
memcpy(
&config_eamuse->server,
&iidxhook_eamuse_default_server,
sizeof(config_eamuse->server));
tmp = net_addr_to_str(&config_eamuse->server);
log_warning(
"Invalid value for key '%s' specified, fallback "
"to default",
tmp);
free(tmp);
}
if (!cconfig_util_get_data(
config,
IIDXHOOK_CONFIG_EAMUSE_PCBID_KEY,
(uint8_t *) &config_eamuse->pcbid,
IIDXHOOK_CONFIG_EAMUSE_DEFAULT_PCBID_VALUE_LEN,
(uint8_t *) &IIDXHOOK_CONFIG_EAMUSE_DEFAULT_PCBID_VALUE)) {
tmp = security_id_to_str(
&IIDXHOOK_CONFIG_EAMUSE_DEFAULT_PCBID_VALUE, false);
log_warning(
"Invalid value for key '%s' specified, fallback "
"to default",
tmp);
free(tmp);
}
if (!security_id_verify(&config_eamuse->pcbid)) {
tmp = security_id_to_str(
&IIDXHOOK_CONFIG_EAMUSE_DEFAULT_PCBID_VALUE, false);
tmp2 = security_id_to_str(&config_eamuse->pcbid, false);
log_warning(
"PCBID verification of '%s' failed, fallback to default "
"PCBID '%s'",
tmp2,
tmp);
free(tmp);
free(tmp2);
}
if (!cconfig_util_get_data(
config,
IIDXHOOK_CONFIG_EAMUSE_EAMID_KEY,
(uint8_t *) &config_eamuse->eamid,
IIDXHOOK_CONFIG_EAMUSE_DEFAULT_EAMID_VALUE_LEN,
(uint8_t *) &IIDXHOOK_CONFIG_EAMUSE_DEFAULT_EAMID_VALUE)) {
tmp = security_id_to_str(
&IIDXHOOK_CONFIG_EAMUSE_DEFAULT_EAMID_VALUE, false);
log_warning(
"Invalid value for key '%s' specified, fallback "
"to default",
tmp);
free(tmp);
}
if (!security_id_verify(&config_eamuse->eamid)) {
tmp = security_id_to_str(
&IIDXHOOK_CONFIG_EAMUSE_DEFAULT_EAMID_VALUE, false);
tmp2 = security_id_to_str(&config_eamuse->eamid, false);
log_warning(
"EAMID verification of '%s' failed, fallback to default "
"EAMID '%s'",
tmp2,
tmp);
free(tmp);
free(tmp2);
}
}
static void _iidxhook_util_config_eamuse_verify(
const iidxhook_util_config_eamuse_t *config)
{
char *tmp;
if (!str_eq(config->card_type, "C02") &&
!str_eq(config->card_type, "D01") &&
!str_eq(config->card_type, "E11") &&
!str_eq(config->card_type, "ECO")) {
log_fatal("Invalid card_type in eamuse configuration: %s", config->card_type);
}
if (!security_id_verify(&config->pcbid)) {
tmp = security_id_to_str(&config->pcbid, false);
log_fatal("Invalid pcbid in eamuse configuration: %s", tmp);
free(tmp);
}
if (!security_id_verify(&config->eamid)) {
tmp = security_id_to_str(&config->eamid, false);
log_fatal("Invalid eamid in eamuse configuration: %s", tmp);
free(tmp);
}
}
void iidxhook_util_config_eamuse_get2(
const bt_core_config_t *config,
iidxhook_util_config_eamuse_t *config_eamuse)
{
bt_core_config_ext_str_get(config, "eamuse/card_type", config_eamuse->card_type, sizeof(config_eamuse->card_type));
bt_core_config_ext_net_addr_get(config, "eamuse/server", &config_eamuse->server);
bt_core_config_ext_bin_get(config, "eamuse/pcbid",
(uint8_t *) &config_eamuse->pcbid, sizeof(config_eamuse->pcbid));
bt_core_config_ext_bin_get(config, "eamuse/eamid",
(uint8_t *) &config_eamuse->eamid, sizeof(config_eamuse->eamid));
_iidxhook_util_config_eamuse_verify(config_eamuse);
}