#include "ServerSocket.h"
#include "UserSession.h"
#include "tools.h"
+#include "IRCClient.h"
static void userclient_callback(struct IOEvent *event);
}
if(login->username)
free(login->username);
+ if(login->realname)
+ free(login->realname);
if(login->password)
free(login->password);
if(login->nick)
free(login->reject_reason);
if(login->session_class)
free(login->session_class);
+ if(login->bind_address)
+ free(login->bind_address);
+ if(login->server_address)
+ free(login->server_address);
free(login);
}
iohandler_close(client->iofd);
login->password = strdup(delimiter);
} else
login->password = strdup(argv[2]);
- } else if(!stricmp(argv[1], "USER")) {
+ } else if(!stricmp(argv[1], "USER") && argc >= 6) {
if(!login->username)
login->username = strdup(argv[2]);
+ login->realname = strdup(argv[5]);
} else if(!stricmp(argv[1], "NICK")) {
if(login->nick)
free(login->nick);
iohandler_printf(client->iofd, "NOTICE AUTH :*** [TransparentIRC] You need to send your LOC data. Try /quote PASS <username>:<password>");
}
}
- if(login->username && login->password && login->nick && !(client->flags & USERCLIENT_LOGIN_PROCESSING)) {
+ if(login->username && login->password && login->nick && login->realname && !(client->flags & USERCLIENT_LOGIN_PROCESSING)) {
//try to login
iohandler_printf(client->iofd, "NOTICE AUTH :*** [TransparentIRC] Checking login...");
usersession_login(login);
}
} else {
+ struct UserSession *session = client->user;
+ if(!stricmplen(line, "QUIT", 4))
+ return;
+ if(session->irc)
+ ircclient_send(session->irc, line);
}
}
free(login->nick);
free(login);
client->user = session;
+ client->flags |= USERCLIENT_LOGGED_IN;
if(recover) {
iohandler_printf(client->iofd, "NOTICE AUTH :*** [TransparentIRC] Recovering previous link (Nick: %s).", session->nick);