m_pass: store unverified SID in preClient for use in m_server

This commit is contained in:
Simon Arlott 2018-08-13 20:53:04 +01:00
parent 8d93dd76ad
commit d4b2529a61
No known key found for this signature in database
GPG key ID: 49BFFEEFD4C3ED53
3 changed files with 23 additions and 18 deletions

View file

@ -316,6 +316,8 @@ struct PreClient
struct AuthClient auth; struct AuthClient auth;
struct rb_sockaddr_storage lip; /* address of our side of the connection */ struct rb_sockaddr_storage lip; /* address of our side of the connection */
char id[IDLEN]; /* UID/SID, unique on the network (unverified) */
}; };
struct ListClient struct ListClient

View file

@ -296,22 +296,25 @@ mr_server(struct MsgBuf *msgbuf_p, struct Client *client_p, struct Client *sourc
return; return;
} }
if(has_id(client_p) && (target_p = find_id(client_p->id)) != NULL) 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, 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)", "Attempt to re-introduce SID %s from %s%s (already in use by %s)",
client_p->id, client_p->preClient->id,
EmptyString(client_p->name) ? name : "", EmptyString(client_p->name) ? name : "",
client_p->name, target_p->name); client_p->name, target_p->name);
ilog(L_SERVER, "Attempt to re-introduce SID %s from %s%s (already in use by %s)", ilog(L_SERVER, "Attempt to re-introduce SID %s from %s%s (already in use by %s)",
client_p->id, client_p->preClient->id,
EmptyString(client_p->name) ? name : "", EmptyString(client_p->name) ? name : "",
log_client_name(client_p, SHOW_IP), log_client_name(client_p, SHOW_IP),
target_p->name); target_p->name);
sendto_one(client_p, "ERROR :SID already exists."); sendto_one(client_p, "ERROR :SID already exists.");
exit_client(client_p, client_p, client_p, "SID Exists"); exit_client(client_p, client_p, client_p, "SID Exists");
return; return;
} else {
rb_strlcpy(client_p->id, client_p->preClient->id, sizeof(client_p->id));
}
} }
/* /*

View file

@ -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); client_p->localClient->auth_user = rb_strndup(auth_user, PASSWDLEN);
/* These are for servers only */ /* 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 * 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.. */ /* only mark as TS6 if the SID is valid.. */
if(IsDigit(parv[4][0]) && IsIdChar(parv[4][1]) && if(IsDigit(parv[4][0]) && IsIdChar(parv[4][1]) &&
IsIdChar(parv[4][2]) && parv[4][3] == '\0' && IsIdChar(parv[4][2]) && parv[4][3] == '\0' &&
EmptyString(client_p->id)) EmptyString(client_p->preClient->id))
{ {
client_p->localClient->caps |= CAP_TS6; 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));
} }
} }
} }