sd-dhcp6-client: do not expose set_transaction_id()
This is mostly for tests or fuzzers. Hence, this makes the function requires that the client is running in the test mode. Also, now the function mask the value for message type.
This commit is contained in:
@@ -173,6 +173,7 @@ const char *dhcp6_message_status_to_string(DHCP6Status s) _const_;
|
||||
DHCP6Status dhcp6_message_status_from_string(const char *s) _pure_;
|
||||
|
||||
void dhcp6_client_set_test_mode(sd_dhcp6_client *client, bool test_mode);
|
||||
int dhcp6_client_set_transaction_id(sd_dhcp6_client *client, uint32_t transaction_id);
|
||||
|
||||
#define log_dhcp6_client_errno(client, error, fmt, ...) \
|
||||
log_interface_prefix_full_errno( \
|
||||
|
||||
@@ -39,7 +39,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
assert_se(sd_dhcp6_client_set_information_request(client, false) == 0);
|
||||
dhcp6_client_set_test_mode(client, true);
|
||||
assert_se(sd_dhcp6_client_start(client) >= 0);
|
||||
assert_se(sd_dhcp6_client_set_transaction_id(client, htobe32(0x00ffffff) & ((const DHCP6Message *) data)->transaction_id) == 0);
|
||||
assert_se(dhcp6_client_set_transaction_id(client, ((const DHCP6Message *) data)->transaction_id) == 0);
|
||||
|
||||
r = client_process_advertise_or_rapid_commit_reply(client, (DHCP6Message *) data, size, NULL, NULL);
|
||||
if (r < 0)
|
||||
|
||||
@@ -38,7 +38,7 @@ static void fuzz_client(const uint8_t *data, size_t size, bool is_information_re
|
||||
assert_se(sd_dhcp6_client_start(client) >= 0);
|
||||
|
||||
if (size >= sizeof(DHCP6Message))
|
||||
assert_se(sd_dhcp6_client_set_transaction_id(client, htobe32(0x00ffffff) & ((const DHCP6Message *) data)->transaction_id) == 0);
|
||||
assert_se(dhcp6_client_set_transaction_id(client, ((const DHCP6Message *) data)->transaction_id) == 0);
|
||||
|
||||
assert_se(write(test_dhcp_fd[1], data, size) == (ssize_t) size);
|
||||
|
||||
|
||||
@@ -592,10 +592,13 @@ int sd_dhcp6_client_set_address_request(sd_dhcp6_client *client, int request) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int sd_dhcp6_client_set_transaction_id(sd_dhcp6_client *client, uint32_t transaction_id) {
|
||||
assert_return(client, -EINVAL);
|
||||
int dhcp6_client_set_transaction_id(sd_dhcp6_client *client, uint32_t transaction_id) {
|
||||
assert(client);
|
||||
assert(client->test_mode);
|
||||
|
||||
client->transaction_id = transaction_id;
|
||||
/* This is for tests or fuzzers. */
|
||||
|
||||
client->transaction_id = transaction_id & htobe32(0x00ffffff);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -260,8 +260,6 @@ int sd_dhcp6_client_get_address_request(sd_dhcp6_client *client,
|
||||
int *request);
|
||||
int sd_dhcp6_client_set_address_request(sd_dhcp6_client *client,
|
||||
int request);
|
||||
int sd_dhcp6_client_set_transaction_id(sd_dhcp6_client *client,
|
||||
uint32_t transaction_id);
|
||||
int sd_dhcp6_client_add_vendor_option(sd_dhcp6_client *client,
|
||||
sd_dhcp6_option *v);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user