Skip to content

Commit 5f2c7f5

Browse files
committed
rfr: use std::string in favor of fixed buffers
References: GXL-51
1 parent 2afd3ca commit 5f2c7f5

File tree

1 file changed

+11
-23
lines changed

1 file changed

+11
-23
lines changed

exch/rfr.cpp

Lines changed: 11 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,7 @@ namespace {
3131

3232
struct RFRGETNEWDSA_IN final : public rpc_request {
3333
uint32_t flags = 0;
34-
char puserdn[1024]{};
35-
char punused[256]{};
36-
char pserver[256]{};
34+
std::string puserdn, pserver;
3735
};
3836

3937
struct RFRGETNEWDSA_OUT final : public rpc_response {
@@ -43,7 +41,7 @@ struct RFRGETNEWDSA_OUT final : public rpc_response {
4341

4442
struct RFRGETFQDNFROMLEGACYDN_IN final : public rpc_request {
4543
uint32_t flags = 0, cb = 0;
46-
char mbserverdn[1024]{};
44+
std::string mbserverdn;
4745
};
4846

4947
struct RFRGETFQDNFROMLEGACYDN_OUT final : public rpc_response {
@@ -58,17 +56,14 @@ static DCERPC_ENDPOINT *ep_6001, *ep_6002;
5856
static ec_error_t rfr_get_newdsa(uint32_t flags, const char *puserdn,
5957
std::string &server)
6058
{
61-
char *ptoken;
62-
char username[UADDR_SIZE];
63-
6459
auto rpc_info = get_rpc_info();
6560
unsigned int user_id = 0;
6661
if (!mysql_adaptor_get_user_ids(rpc_info.username, &user_id, nullptr, nullptr))
6762
return ecError;
68-
memset(username, 0, sizeof(username));
63+
char username[13]{};
6964
gx_strlcpy(username, rpc_info.username, std::size(username));
70-
ptoken = strchr(username, '@');
7165
HX_strlower(username);
66+
auto ptoken = strchr(rpc_info.username, '@');
7267
if (ptoken != nullptr)
7368
ptoken ++;
7469
else
@@ -117,7 +112,7 @@ static pack_result exchange_rfr_ndr_pull(unsigned int opnum, NDR_PULL &x,
117112
if (offset != 0 || length > size || length > 1024)
118113
return pack_result::array_size;
119114
TRY(x.check_str(length, sizeof(uint8_t)));
120-
TRY(x.g_str(prfr->puserdn, length));
115+
TRY(x.g_str(&prfr->puserdn, length));
121116
TRY(x.g_genptr(&ptr));
122117
if (0 != ptr) {
123118
TRY(x.g_genptr(&ptr));
@@ -128,12 +123,9 @@ static pack_result exchange_rfr_ndr_pull(unsigned int opnum, NDR_PULL &x,
128123
if (offset != 0 || length > size || length > 256)
129124
return pack_result::array_size;
130125
TRY(x.check_str(length, sizeof(uint8_t)));
131-
TRY(x.g_str(prfr->punused, length));
132-
} else {
133-
prfr->punused[0] = '\0';
126+
std::string unused;
127+
TRY(x.g_str(&unused, length));
134128
}
135-
} else {
136-
prfr->punused[0] = '\0';
137129
}
138130
TRY(x.g_genptr(&ptr));
139131
if (0 != ptr) {
@@ -145,12 +137,8 @@ static pack_result exchange_rfr_ndr_pull(unsigned int opnum, NDR_PULL &x,
145137
if (offset != 0 || length > size || length > 256)
146138
return pack_result::array_size;
147139
TRY(x.check_str(length, sizeof(uint8_t)));
148-
TRY(x.g_str(prfr->pserver, length));
149-
} else {
150-
prfr->pserver[0] = '\0';
140+
TRY(x.g_str(&prfr->pserver, length));
151141
}
152-
} else {
153-
prfr->pserver[0] = '\0';
154142
}
155143
in = std::move(prfr);
156144
return pack_result::ok;
@@ -167,7 +155,7 @@ static pack_result exchange_rfr_ndr_pull(unsigned int opnum, NDR_PULL &x,
167155
if (offset != 0 || length > size || length > 1024)
168156
return pack_result::array_size;
169157
TRY(x.check_str(length, sizeof(uint8_t)));
170-
TRY(x.g_str(prfr_dn->mbserverdn, length));
158+
TRY(x.g_str(&prfr_dn->mbserverdn, length));
171159
in = std::move(prfr_dn);
172160
return pack_result::ok;
173161
}
@@ -188,15 +176,15 @@ static int exchange_rfr_dispatch(unsigned int opnum, const GUID *pobject,
188176
auto prfr_in = static_cast<const RFRGETNEWDSA_IN *>(pin);
189177
auto prfr_out = std::make_unique<RFRGETNEWDSA_OUT>();
190178
prfr_out->result = rfr_get_newdsa(prfr_in->flags,
191-
prfr_in->puserdn, prfr_out->pserver);
179+
prfr_in->puserdn.c_str(), prfr_out->pserver);
192180
out = std::move(prfr_out);
193181
return DISPATCH_SUCCESS;
194182
}
195183
case RfrGetFQDNFromServerDN: {
196184
auto prfr_dn_in = static_cast<const RFRGETFQDNFROMLEGACYDN_IN *>(pin);
197185
auto prfr_dn_out = std::make_unique<RFRGETFQDNFROMLEGACYDN_OUT>();
198186
prfr_dn_out->result = rfr_get_fqdnfromlegacydn(prfr_dn_in->flags,
199-
prfr_dn_in->cb, prfr_dn_in->mbserverdn,
187+
prfr_dn_in->cb, prfr_dn_in->mbserverdn.c_str(),
200188
prfr_dn_out->serverfqdn);
201189
out = std::move(prfr_dn_out);
202190
return DISPATCH_SUCCESS;

0 commit comments

Comments
 (0)