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 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
|
||||||
|
|
|
@ -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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue