Skip to content

Commit 11dc448

Browse files
AdamZvarasedmicha
authored andcommitted
ASN: O2 optimalization fix
When turning on release mode in CMake, ASN module stopped working because of shenanigans with sockaddr structures
1 parent e6b052b commit 11dc448

File tree

1 file changed

+8
-13
lines changed
  • src/plugins/intermediate/asn

1 file changed

+8
-13
lines changed

src/plugins/intermediate/asn/asn.c

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -79,18 +79,14 @@ struct ipx_modifier_field asn_fields[] = {
7979
* \return 0 (reserved AS number) if number was not found
8080
*/
8181
static uint32_t
82-
mmdb_lookup(MMDB_s *db, struct sockaddr *address, int *err)
82+
mmdb_lookup(MMDB_s *db, struct sockaddr *address)
8383
{
84-
assert(db != NULL && address != NULL && err != NULL);
85-
86-
int rc;
87-
*err = MMDB_SUCCESS;
84+
int rc = 0;
8885
MMDB_lookup_result_s result;
8986

9087
// Search for address
9188
result = MMDB_lookup_sockaddr(db, address, &rc);
9289
if (rc) {
93-
*err = rc;
9490
return 0;
9591
}
9692

@@ -103,11 +99,11 @@ mmdb_lookup(MMDB_s *db, struct sockaddr *address, int *err)
10399
MMDB_entry_data_s data;
104100
rc = MMDB_get_value(&(result.entry), &data, ASN_LOOKUP_STRING, NULL);
105101
if (rc) {
106-
*err = rc;
102+
MMDB_strerror(rc);
107103
return 0;
108104
}
109105

110-
// Address was not found
106+
// No AS number found
111107
if (!data.has_data) {
112108
return 0;
113109
}
@@ -128,30 +124,29 @@ mmdb_lookup(MMDB_s *db, struct sockaddr *address, int *err)
128124
static int
129125
get_asn(MMDB_s *db, struct ipx_modifier_output *out, uint8_t *address, size_t length)
130126
{
131-
int rc;
127+
int rc = 0;
132128
uint32_t asn;
133-
struct sockaddr *addr;
134129

135130
if (length == 4) {
136131
// IPv4 address
137132
struct sockaddr_in addr_4 = {
138133
.sin_family = AF_INET,
139134
.sin_addr.s_addr = *((uint32_t *)address)
140135
};
141-
addr = (struct sockaddr *) &addr_4;
136+
asn = mmdb_lookup(db, (struct sockaddr *) &addr_4);
142137
} else if (length == 16) {
143138
// IPv6 address
144139
struct sockaddr_in6 addr_6 = {
145140
.sin6_family = AF_INET6
146141
};
147142
memcpy(&(addr_6.sin6_addr), address, 16);
148-
addr = (struct sockaddr *) &addr_6;
143+
asn = mmdb_lookup(db, (struct sockaddr *) &addr_6);
149144
} else {
150145
// Unknown address format
151146
return IPX_ERR_ARG;
152147
}
153148

154-
asn = htonl(mmdb_lookup(db, addr, &rc));
149+
asn = htonl(asn);
155150
if (rc) {
156151
// MMDB error
157152
return IPX_ERR_DENIED;

0 commit comments

Comments
 (0)