m_pass: store unverified SID in preClient for use in m_server
This commit is contained in:
parent
8d93dd76ad
commit
d4b2529a61
3 changed files with 23 additions and 18 deletions
|
@ -316,6 +316,8 @@ struct PreClient
|
|||
struct AuthClient auth;
|
||||
|
||||
struct rb_sockaddr_storage lip; /* address of our side of the connection */
|
||||
|
||||
char id[IDLEN]; /* UID/SID, unique on the network (unverified) */
|
||||
};
|
||||
|
||||
struct ListClient
|
||||
|
|
|
@ -296,22 +296,25 @@ mr_server(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *sourc
|
|||
return;
|
||||
}
|
||||
|
||||
if(has_id(client_p) && (target_p = find_id(client_p->id)) != NULL)
|
||||
{
|
||||
sendto_realops_snomask(SNO_GENERAL, is_remote_connect(client_p) ? L_NETWIDE : L_ALL,
|
||||
"Attempt to re-introduce SID %s from %s%s (already in use by %s)",
|
||||
client_p->id,
|
||||
EmptyString(client_p->name) ? name : "",
|
||||
client_p->name, target_p->name);
|
||||
ilog(L_SERVER, "Attempt to re-introduce SID %s from %s%s (already in use by %s)",
|
||||
client_p->id,
|
||||
EmptyString(client_p->name) ? name : "",
|
||||
log_client_name(client_p, SHOW_IP),
|
||||
target_p->name);
|
||||
if (client_p->preClient && !EmptyString(client_p->preClient->id)) {
|
||||
if ((target_p = find_id(client_p->preClient->id)) != NULL) {
|
||||
sendto_realops_snomask(SNO_GENERAL, is_remote_connect(client_p) ? L_NETWIDE : L_ALL,
|
||||
"Attempt to re-introduce SID %s from %s%s (already in use by %s)",
|
||||
client_p->preClient->id,
|
||||
EmptyString(client_p->name) ? name : "",
|
||||
client_p->name, target_p->name);
|
||||
ilog(L_SERVER, "Attempt to re-introduce SID %s from %s%s (already in use by %s)",
|
||||
client_p->preClient->id,
|
||||
EmptyString(client_p->name) ? name : "",
|
||||
log_client_name(client_p, SHOW_IP),
|
||||
target_p->name);
|
||||
|
||||
sendto_one(client_p, "ERROR :SID already exists.");
|
||||
exit_client(client_p, client_p, client_p, "SID Exists");
|
||||
return;
|
||||
sendto_one(client_p, "ERROR :SID already exists.");
|
||||
exit_client(client_p, client_p, client_p, "SID Exists");
|
||||
return;
|
||||
} else {
|
||||
rb_strlcpy(client_p->id, client_p->preClient->id, sizeof(client_p->id));
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -83,7 +83,7 @@ mr_pass(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source_
|
|||
client_p->localClient->auth_user = rb_strndup(auth_user, PASSWDLEN);
|
||||
|
||||
/* These are for servers only */
|
||||
if(parc > 2 && client_p->user == NULL)
|
||||
if(parc > 2 && client_p->user == NULL && client_p->preClient != NULL)
|
||||
{
|
||||
/*
|
||||
* It looks to me as if orabidoo wanted to have more
|
||||
|
@ -101,10 +101,10 @@ mr_pass(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *source_
|
|||
/* only mark as TS6 if the SID is valid.. */
|
||||
if(IsDigit(parv[4][0]) && IsIdChar(parv[4][1]) &&
|
||||
IsIdChar(parv[4][2]) && parv[4][3] == '\0' &&
|
||||
EmptyString(client_p->id))
|
||||
EmptyString(client_p->preClient->id))
|
||||
{
|
||||
client_p->localClient->caps |= CAP_TS6;
|
||||
rb_strlcpy(client_p->id, parv[4], sizeof(client_p->id));
|
||||
rb_strlcpy(client_p->preClient->id, parv[4], sizeof(client_p->preClient->id));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue