for (trcup=target->knownon;trcup;trcup=trcup->nextbyuser)
channelcount++;
- if(channelcount >= MAXCHANNELS) {
+ if(channelcount >= (!UIsNoAuthLimit(target) ? MAXCHANNELS : 5 * MAXCHANNELS)) {
chanservstdmessage(sender, QM_TOOMANYCHANNELS);
return CMD_ERROR;
}
return;
}
- pnext = &tslist;
-
- for(ts=*pnext;*pnext;pnext=&((*pnext)->next)) {
+ for(pnext=&tslist;*pnext;pnext=&((*pnext)->next)) {
+ ts=*pnext;
if(ts == sock) {
*pnext = sock->next;
trustfreeconnection(sock, 0);
unsigned char digest[16];
char noncehexbuf[NONCELEN * 2 + 1];
char hexbuf[sizeof(digest) * 2 + 1];
+ trustsocket *ts, **pnext;
for(i=0;i<MAXSERVERS;i++) {
if(trustaccounts[i].used && strcmp(trustaccounts[i].server, server_name) == 0) {
return trustkillconnection(sock, "Bad MAC.");
}
+ for(pnext=&tslist;*pnext;pnext=&((*pnext)->next)) {
+ ts = *pnext;
+ if(ts->authed && strcmp(ts->authuser, server_name) == 0) {
+ trustkillconnection(ts, "New connection with same server name.");
+ *pnext = ts->next;
+ trustfreeconnection(ts, 0);
+ break;
+ }
+ }
+
sock->authed = 1;
strncpy(sock->authuser, server_name, SERVERLEN);
time_t t = time(NULL);
trustsocket **pnext, *sock;
- pnext = &tslist;
-
- for(sock=*pnext;*pnext;pnext=&((*pnext)->next)) {
+ for(pnext=&tslist;*pnext;pnext=&((*pnext)->next)) {
+ sock = *pnext;
if(!sock->authed && t >= sock->timeout) {
trustkillconnection(sock, "Auth timeout.");
*pnext = sock->next;