mirror of
https://github.com/matrix-construct/construct
synced 2024-11-15 22:41:12 +01:00
authd: fix auth->cid type sizes
* long is too small on 32-bit systems, use unsigned long long if we want to check for out of range values * UINT32_MAX is a valid cid, and 0 isn't * make auth->cid a uint32_t not uint16_t
This commit is contained in:
parent
a4da4fe574
commit
2392770f4d
3 changed files with 12 additions and 11 deletions
|
@ -53,7 +53,7 @@ static void
|
|||
handle_stat(int parc, char *parv[])
|
||||
{
|
||||
authd_stat_handler handler;
|
||||
long lrid;
|
||||
unsigned long long rid;
|
||||
|
||||
if(parc < 3)
|
||||
{
|
||||
|
@ -61,16 +61,16 @@ handle_stat(int parc, char *parv[])
|
|||
return;
|
||||
}
|
||||
|
||||
if((lrid = strtol(parv[1], NULL, 16)) > UINT32_MAX)
|
||||
if((rid = strtoull(parv[1], NULL, 16)) > UINT32_MAX)
|
||||
{
|
||||
warn_opers(L_CRIT, "BUG: handle_stat got a rid that was too large: %lx", lrid);
|
||||
warn_opers(L_CRIT, "BUG: handle_stat got a rid that was too large: %s", parv[1]);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(handler = authd_stat_handlers[(unsigned char)parv[2][0]]))
|
||||
return;
|
||||
|
||||
handler((uint32_t)lrid, parv[2][0]);
|
||||
handler((uint32_t)rid, parv[2][0]);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -280,10 +280,10 @@ static void
|
|||
start_auth(const char *cid, const char *l_ip, const char *l_port, const char *c_ip, const char *c_port)
|
||||
{
|
||||
struct auth_client *auth;
|
||||
long lcid = strtol(cid, NULL, 16);
|
||||
unsigned long long lcid = strtoull(cid, NULL, 16);
|
||||
rb_dlink_node *ptr;
|
||||
|
||||
if(lcid >= UINT32_MAX)
|
||||
if(lcid == 0 || lcid > UINT32_MAX)
|
||||
return;
|
||||
|
||||
auth = rb_malloc(sizeof(struct auth_client));
|
||||
|
@ -293,7 +293,7 @@ start_auth(const char *cid, const char *l_ip, const char *l_port, const char *c_
|
|||
rb_dictionary_add(auth_clients, RB_UINT_TO_POINTER(auth->cid), auth);
|
||||
else
|
||||
{
|
||||
warn_opers(L_CRIT, "provider: duplicate client added via start_auth: %x", auth->cid);
|
||||
warn_opers(L_CRIT, "provider: duplicate client added via start_auth: %s", cid);
|
||||
exit(EX_PROVIDER_ERROR);
|
||||
}
|
||||
|
||||
|
@ -357,7 +357,7 @@ void
|
|||
handle_cancel_connection(int parc, char *parv[])
|
||||
{
|
||||
struct auth_client *auth;
|
||||
long lcid;
|
||||
unsigned long long lcid;
|
||||
|
||||
if(parc < 2)
|
||||
{
|
||||
|
@ -365,9 +365,10 @@ handle_cancel_connection(int parc, char *parv[])
|
|||
exit(EX_PROVIDER_ERROR);
|
||||
}
|
||||
|
||||
if((lcid = strtol(parv[1], NULL, 16)) > UINT32_MAX)
|
||||
lcid = strtoull(parv[1], NULL, 16);
|
||||
if(lcid == 0 || lcid > UINT32_MAX)
|
||||
{
|
||||
warn_opers(L_CRIT, "provider: got a request to cancel a connection that can't exist: %lx", lcid);
|
||||
warn_opers(L_CRIT, "provider: got a request to cancel a connection that can't exist: %s", parv[1]);
|
||||
exit(EX_PROVIDER_ERROR);
|
||||
}
|
||||
|
||||
|
|
|
@ -44,7 +44,7 @@ struct auth_client_data
|
|||
|
||||
struct auth_client
|
||||
{
|
||||
uint16_t cid; /* Client ID */
|
||||
uint32_t cid; /* Client ID */
|
||||
|
||||
char l_ip[HOSTIPLEN + 1]; /* Listener IP address */
|
||||
uint16_t l_port; /* Listener port */
|
||||
|
|
Loading…
Reference in a new issue