@@ -31,9 +31,7 @@ namespace {
3131
3232struct 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
3937struct RFRGETNEWDSA_OUT final : public rpc_response {
@@ -43,7 +41,7 @@ struct RFRGETNEWDSA_OUT final : public rpc_response {
4341
4442struct RFRGETFQDNFROMLEGACYDN_IN final : public rpc_request {
4543 uint32_t flags = 0 , cb = 0 ;
46- char mbserverdn[ 1024 ]{} ;
44+ std::string mbserverdn;
4745};
4846
4947struct RFRGETFQDNFROMLEGACYDN_OUT final : public rpc_response {
@@ -58,17 +56,14 @@ static DCERPC_ENDPOINT *ep_6001, *ep_6002;
5856static 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