summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--conf/login_athena.conf12
-rw-r--r--src/login/login.c185
-rw-r--r--src/login/login.h6
-rw-r--r--src/login_sql/login.c40
4 files changed, 87 insertions, 156 deletions
diff --git a/conf/login_athena.conf b/conf/login_athena.conf
index 3ad980de6..91da4aa16 100644
--- a/conf/login_athena.conf
+++ b/conf/login_athena.conf
@@ -110,18 +110,6 @@ online_check: yes
// So, active this option with a speed hard disk or for debug only.
save_unknown_packets: 0
-// Indicate if you want display the parse of the packets received in a normal connection
-// It's useful for debug. Possible values: 0: no (default), 1: yes
-display_parse_login: 0
-
-// Indicate if you want display the parse of the packets received in administration connection
-// It's useful for debug. Possible values: 0: no (default), 1: yes
-display_parse_admin: 0
-
-// Indicate if you want display the parse of the packets received from a char-server
-// It's useful for debug. Possible values: 0: no (default), 1: yes (without packet 0x2714), 2: all packets
-display_parse_fromchar: 0
-
// Indicate how to display date in logs, to players, etc.
date_format: %Y-%m-%d %H:%M:%S
diff --git a/src/login/login.c b/src/login/login.c
index 311f34327..f992054aa 100644
--- a/src/login/login.c
+++ b/src/login/login.c
@@ -35,7 +35,7 @@ struct Login_Config {
int min_level_to_connect; // minimum level of player/GM (0: player, 1-99: GM) to connect
bool online_check; // reject incoming players that are already registered as online ?
bool check_client_version; // check the clientversion set in the clientinfo ?
- unsigned int client_version_to_connect; // the client version needed to connect (if checking is enabled)
+ int client_version_to_connect; // the client version needed to connect (if checking is enabled)
// bool ipban; // perform IP blocking (via contents of `ipbanlist`) ?
// bool dynamic_pass_failure_ban; // automatic IP blocking due to failed login attemps ?
@@ -71,7 +71,7 @@ int time_allowed = 10; //in seconds
unsigned int new_reg_tick = 0;
int num_regs = 0;
-uint32 account_id_count = START_ACCOUNT_NUM;
+int account_id_count = START_ACCOUNT_NUM;
char account_filename[1024] = "save/account.txt";
char GM_account_filename[1024] = "conf/GM_account.txt";
@@ -82,10 +82,6 @@ int save_unknown_packets = 0;
long creation_time_GM_account_file;
int gm_account_filename_check_timer = 15; // Timer to check if GM_account file has been changed and reload GM account automaticaly (in seconds; default: 15)
-int display_parse_login = 0; // 0: no, 1: yes
-int display_parse_admin = 0; // 0: no, 1: yes
-int display_parse_fromchar = 0; // 0: no, 1: yes (without packet 0x2714), 2: all packets
-
enum {
ACO_DENY_ALLOW = 0,
@@ -113,7 +109,7 @@ struct login_session_data {
#define AUTH_FIFO_SIZE 256
struct _auth_fifo {
- uint32 account_id;
+ int account_id;
uint32 login_id1, login_id2;
uint32 ip;
uint8 sex;
@@ -122,14 +118,14 @@ struct _auth_fifo {
int auth_fifo_pos = 0;
struct online_login_data {
- uint32 account_id;
+ int account_id;
int waiting_disconnect;
int char_server;
};
// holds info about all existing accounts
struct auth_data {
- uint32 account_id;
+ int account_id;
uint8 sex; // 0, 1, 2
char userid[24];
char pass[32+1]; // 23+1 for normal, 32+1 for md5-ed passwords
@@ -157,7 +153,7 @@ uint32 auth_num = 0, auth_max = 0;
#define AUTH_SAVE_FILE_DIVIDER 50
int auth_before_save_file = 0; // Counter. First save when 1st char-server do connection.
-int admin_state = 0;
+bool admin_state = false;
char admin_pass[24] = "";
char gm_pass[64] = "";
int level_new_gm = 60;
@@ -275,7 +271,7 @@ int isGM(int account_id)
//----------------------------------------------------------------------
// Adds a new GM using acc id and level
//----------------------------------------------------------------------
-void addGM(uint32 account_id, int level)
+void addGM(int account_id, int level)
{
unsigned int i;
int do_add = 0;
@@ -538,7 +534,7 @@ int mmo_auth_tostr(char* str, struct auth_data* p)
int i;
char *str_p = str;
- str_p += sprintf(str_p, "%u\t%s\t%s\t%s\t%c\t%d\t%u\t%s\t%s\t%ld\t%s\t%s\t%ld\t",
+ str_p += sprintf(str_p, "%d\t%s\t%s\t%s\t%c\t%d\t%u\t%s\t%s\t%ld\t%s\t%s\t%ld\t",
p->account_id, p->userid, p->pass, p->lastlogin,
p->sex == 2 ? 'S' : p->sex == 1 ? 'M' : 'F',
p->logincount, p->state, p->email, p->error_message,
@@ -557,7 +553,7 @@ int mmo_auth_tostr(char* str, struct auth_data* p)
int mmo_auth_init(void)
{
FILE *fp;
- uint32 account_id;
+ int account_id;
uint32 state;
int logincount, n;
uint32 i, j;
@@ -594,11 +590,11 @@ int mmo_auth_init(void)
memset(memo, 0, sizeof(memo));
// database version reading (v2)
- if (((i = sscanf(line, "%u\t%[^\t]\t%[^\t]\t%[^\t]\t%c\t%d\t%u\t"
+ if (((i = sscanf(line, "%d\t%[^\t]\t%[^\t]\t%[^\t]\t%c\t%d\t%u\t"
"%[^\t]\t%[^\t]\t%ld\t%[^\t]\t%[^\t]\t%ld%n",
&account_id, userid, pass, lastlogin, &sex, &logincount, &state,
email, error_message, &connect_until_time, last_ip, memo, &ban_until_time, &n)) == 13 && line[n] == '\t') ||
- ((i = sscanf(line, "%u\t%[^\t]\t%[^\t]\t%[^\t]\t%c\t%d\t%u\t"
+ ((i = sscanf(line, "%d\t%[^\t]\t%[^\t]\t%[^\t]\t%c\t%d\t%u\t"
"%[^\t]\t%[^\t]\t%ld\t%[^\t]\t%[^\t]%n",
&account_id, userid, pass, lastlogin, &sex, &logincount, &state,
email, error_message, &connect_until_time, last_ip, memo, &n)) == 12 && line[n] == '\t')) {
@@ -725,7 +721,7 @@ int mmo_auth_init(void)
account_id_count = account_id + 1;
// Old athena database version reading (v1)
- } else if ((i = sscanf(line, "%u\t%[^\t]\t%[^\t]\t%[^\t]\t%c\t%d\t%u\t%n",
+ } else if ((i = sscanf(line, "%d\t%[^\t]\t%[^\t]\t%[^\t]\t%c\t%d\t%u\t%n",
&account_id, userid, pass, lastlogin, &sex, &logincount, &state, &n)) >= 5) {
if (account_id > END_ACCOUNT_NUM) {
ShowError(CL_RED"mmmo_auth_init: an account has an id higher than %d\n", END_ACCOUNT_NUM);
@@ -831,7 +827,7 @@ int mmo_auth_init(void)
} else {
int i = 0;
- if (sscanf(line, "%u\t%%newid%%\n%n", &account_id, &i) == 1 &&
+ if (sscanf(line, "%d\t%%newid%%\n%n", &account_id, &i) == 1 &&
i > 0 && account_id > account_id_count)
account_id_count = account_id;
}
@@ -884,7 +880,7 @@ void mmo_auth_sync(void)
FILE *fp;
unsigned int i, j, k;
int lock;
- uint32 account_id;
+ int account_id;
CREATE_BUFFER(id, int, auth_num);
char line[65536];
@@ -923,13 +919,13 @@ void mmo_auth_sync(void)
fprintf(fp, "// ban time : 0: no ban, <other value>: banned until the date: date calculated by addition of 1/1/1970 + value (number of seconds since the 1/1/1970)\n");
for(i = 0; i < auth_num; i++) {
k = id[i]; // use of sorted index
- if (auth_dat[k].account_id == (uint32)-1)
+ if (auth_dat[k].account_id == -1)
continue;
mmo_auth_tostr(line, &auth_dat[k]);
fprintf(fp, "%s\n", line);
}
- fprintf(fp, "%u\t%%newid%%\n", account_id_count);
+ fprintf(fp, "%d\t%%newid%%\n", account_id_count);
lock_fclose(fp, account_filename, &lock);
@@ -1369,9 +1365,6 @@ int parse_fromchar(int fd)
{
uint16 command = RFIFOW(fd,0);
- if (display_parse_fromchar == 2 || (display_parse_fromchar == 1 && command != 0x2714)) // 0x2714 is done very often (number of players)
- ShowDebug("parse_fromchar: connection #%d, packet: 0x%x (with being read: %d bytes).\n", fd, command, RFIFOREST(fd));
-
switch( command )
{
@@ -1387,7 +1380,7 @@ int parse_fromchar(int fd)
if( RFIFOREST(fd) < 19 )
return 0;
{
- uint32 account_id = RFIFOL(fd,2);
+ int account_id = RFIFOL(fd,2);
for( i = 0; i < AUTH_FIFO_SIZE; ++i )
{
if( auth_fifo[i].account_id == RFIFOL(fd,2) &&
@@ -1461,8 +1454,8 @@ int parse_fromchar(int fd)
return 0;
{
char email[40];
- uint32 acc = RFIFOL(fd,2);
- memcpy(email, RFIFOP(fd,6), 40); email[39] = '\0';
+ int acc = RFIFOL(fd,2);
+ safestrncpy(email, (char*)RFIFOP(fd,6), 40);
remove_control_chars(email);
if (e_mail_check(email) == 0)
login_log("Char-server '%s': Attempt to create an e-mail on an account with a default e-mail REFUSED - e-mail is invalid (account: %d, ip: %s)\n", server[id].name, acc, ip);
@@ -1489,7 +1482,7 @@ int parse_fromchar(int fd)
return 0;
for(i = 0; i < auth_num; i++) {
- if (auth_dat[i].account_id == RFIFOL(fd,2)) {
+ if (auth_dat[i].account_id == (int)RFIFOL(fd,2)) {
login_log("Char-server '%s': e-mail of the account %d found (ip: %s).\n",
server[id].name, RFIFOL(fd,2), ip);
WFIFOW(fd,0) = 0x2717;
@@ -1569,7 +1562,7 @@ int parse_fromchar(int fd)
return 0;
{
char actual_email[40], new_email[40];
- uint32 acc = RFIFOL(fd,2);
+ int acc = RFIFOL(fd,2);
memcpy(actual_email, RFIFOP(fd,6), 40); actual_email[39] = '\0'; remove_control_chars(actual_email);
memcpy(new_email, RFIFOP(fd,46), 40); new_email[39] = '\0'; remove_control_chars(new_email);
if (e_mail_check(actual_email) == 0)
@@ -1609,7 +1602,8 @@ int parse_fromchar(int fd)
if (RFIFOREST(fd) < 10)
return 0;
{
- uint32 acc, statut;
+ int acc;
+ uint32 statut;
acc = RFIFOL(fd,2);
statut = RFIFOL(fd,6);
for(i = 0; i < auth_num && auth_dat[i].account_id != acc; i++);
@@ -1648,7 +1642,7 @@ int parse_fromchar(int fd)
if (RFIFOREST(fd) < 18)
return 0;
{
- uint32 acc = RFIFOL(fd,2);
+ int acc = RFIFOL(fd,2);
for(i = 0; i < auth_num; i++) {
if (auth_dat[i].account_id == acc) {
time_t timestamp;
@@ -1681,8 +1675,10 @@ int parse_fromchar(int fd)
WBUFL(buf,7) = (unsigned int)timestamp; // status or final date of a banishment
charif_sendallwos(-1, buf, 11);
for(j = 0; j < AUTH_FIFO_SIZE; j++)
- if (auth_fifo[j].account_id == acc)
+ if (auth_fifo[j].account_id == acc) {
auth_fifo[j].login_id1++; // to avoid reconnection error when come back from map-server (char-server will ask again the authentification)
+ break;
+ }
} else {
login_log("Char-server '%s': Error of ban request (account: %d, new date unbans the account, ip: %s).\n",
server[id].name, acc, ip);
@@ -1714,7 +1710,7 @@ int parse_fromchar(int fd)
return 0;
{
uint8 sex;
- uint32 acc = RFIFOL(fd,2);
+ int acc = RFIFOL(fd,2);
for(i = 0; i < auth_num; i++) {
if (auth_dat[i].account_id == acc) {
if (auth_dat[i].sex == 2)
@@ -1755,7 +1751,7 @@ int parse_fromchar(int fd)
return 0;
{
int p;
- uint32 acc = RFIFOL(fd,4);
+ int acc = RFIFOL(fd,4);
for(i = 0; i < auth_num; i++) {
if (auth_dat[i].account_id == acc) {
//unsigned char buf[rfifow(fd,2)+1];
@@ -1800,7 +1796,7 @@ int parse_fromchar(int fd)
if (RFIFOREST(fd) < 6)
return 0;
{
- uint32 acc = RFIFOL(fd,2);
+ int acc = RFIFOL(fd,2);
for(i = 0; i < auth_num; i++) {
if (auth_dat[i].account_id == acc) {
if (auth_dat[i].ban_until_time != 0) {
@@ -1864,8 +1860,8 @@ int parse_fromchar(int fd)
if (RFIFOREST(fd) < 10)
return 0;
{
- uint32 account_id = RFIFOL(fd, 2);
- uint32 char_id = RFIFOL(fd, 6);
+ int account_id = RFIFOL(fd, 2);
+ int char_id = RFIFOL(fd, 6);
int p;
WFIFOW(fd,0) = 0x2729;
WFIFOL(fd,4) = account_id;
@@ -1980,9 +1976,6 @@ int parse_admin(int fd)
{
uint16 command = RFIFOW(fd,0);
- if (display_parse_admin)
- ShowDebug("parse_admin: connection #%d, packet: 0x%x (with being read: %d).\n", fd, command, RFIFOREST(fd));
-
switch( command )
{
@@ -2132,18 +2125,16 @@ int parse_admin(int fd)
memcpy(WFIFOP(fd,6), auth_dat[i].userid, 24);
WFIFOL(fd,2) = auth_dat[i].account_id;
// save deleted account in log file
- login_log("'ladmin': Account deletion (account: %s, id: %d, ip: %s) - saved in next line:\n",
- auth_dat[i].userid, auth_dat[i].account_id, ip);
+ login_log("'ladmin': Account deletion (account: %s, id: %d, ip: %s) - saved in next line:\n", auth_dat[i].userid, auth_dat[i].account_id, ip);
mmo_auth_tostr((char*)buf, &auth_dat[i]);
login_log("%s\n", buf);
// delete account
memset(auth_dat[i].userid, '\0', sizeof(auth_dat[i].userid));
- auth_dat[i].account_id = (uint32)-1;
+ auth_dat[i].account_id = -1;
mmo_auth_sync();
} else {
memcpy(WFIFOP(fd,6), account_name, 24);
- login_log("'ladmin': Attempt to delete an unknown account (account: %s, ip: %s)\n",
- account_name, ip);
+ login_log("'ladmin': Attempt to delete an unknown account (account: %s, ip: %s)\n", account_name, ip);
}
WFIFOSET(fd,30);
RFIFOSKIP(fd,26);
@@ -2531,7 +2522,7 @@ int parse_admin(int fd)
WFIFOL(fd,2) = RFIFOL(fd,2);
memset(WFIFOP(fd,6), '\0', 24);
for(i = 0; i < auth_num; i++) {
- if (auth_dat[i].account_id == RFIFOL(fd,2)) {
+ if (auth_dat[i].account_id == (int)RFIFOL(fd,2)) {
strncpy((char*)WFIFOP(fd,6), auth_dat[i].userid, 24);
login_log("'ladmin': Request (by id) of an account name (account: %s, id: %d, ip: %s)\n",
auth_dat[i].userid, RFIFOL(fd,2), ip);
@@ -2669,8 +2660,10 @@ int parse_admin(int fd)
WBUFL(buf,7) = (unsigned int)timestamp; // status or final date of a banishment
charif_sendallwos(-1, buf, 11);
for(j = 0; j < AUTH_FIFO_SIZE; j++)
- if (auth_fifo[j].account_id == auth_dat[i].account_id)
+ if (auth_fifo[j].account_id == auth_dat[i].account_id) {
auth_fifo[j].login_id1++; // to avoid reconnection error when come back from map-server (char-server will ask again the authentification)
+ break;
+ }
}
auth_dat[i].ban_until_time = timestamp;
mmo_auth_sync();
@@ -2837,7 +2830,7 @@ int parse_admin(int fd)
WFIFOL(fd,2) = RFIFOL(fd,2);
memset(WFIFOP(fd,7), '\0', 24);
for(i = 0; i < auth_num; i++) {
- if (auth_dat[i].account_id == RFIFOL(fd,2)) {
+ if (auth_dat[i].account_id == (int)RFIFOL(fd,2)) {
login_log("'ladmin': Sending information of an account (request by the id; account: %s, id: %d, ip: %s)\n",
auth_dat[i].userid, RFIFOL(fd,2), ip);
WFIFOB(fd,6) = (unsigned char)isGM(auth_dat[i].account_id);
@@ -2960,22 +2953,6 @@ int parse_login(int fd)
{
uint16 command = RFIFOW(fd,0);
- if (display_parse_login)
- {
- if (command == 0x0064 || command == 0x01dd)
- {
- if ((int)RFIFOREST(fd) >= ((command == 0x0064) ? 55 : 47))
- ShowDebug("parse_login: connection #%d, packet: 0x%x (with being read: %d), account: %s.\n", fd, command, RFIFOREST(fd), RFIFOP(fd,6));
- }
- else if (command == 0x2710)
- {
- if (RFIFOREST(fd) >= 86)
- ShowDebug("parse_login: connection #%d, packet: 0x%x (with being read: %d), server: %s.\n", fd, command, RFIFOREST(fd), RFIFOP(fd,60));
- }
- else
- ShowDebug("parse_login: connection #%d, packet: 0x%x (with being read: %d).\n", fd, command, RFIFOREST(fd));
- }
-
switch(command)
{
case 0x0200: // New alive packet: structure: 0x200 <account.userid>.24B. used to verify if client is always alive.
@@ -3164,8 +3141,8 @@ int parse_login(int fd)
uint16 server_port;
memset(&account, 0, sizeof(account));
- safestrncpy(account.userid, RFIFOP(fd,2), NAME_LENGTH); remove_control_chars(account.userid);
- safestrncpy(account.passwd, RFIFOP(fd,26), NAME_LENGTH); remove_control_chars(account.passwd);
+ safestrncpy(account.userid, (char*)RFIFOP(fd,2), NAME_LENGTH); remove_control_chars(account.userid);
+ safestrncpy(account.passwd, (char*)RFIFOP(fd,26), NAME_LENGTH); remove_control_chars(account.passwd);
account.passwdenc = 0;
server_name = (char*)RFIFOP(fd,60); server_name[20] = '\0'; remove_control_chars(server_name);
server_ip = ntohl(RFIFOL(fd, 54));
@@ -3248,16 +3225,18 @@ int parse_login(int fd)
memcpy(password, RFIFOP(fd,4), 24);
password[24] = '\0';
remove_control_chars(password);
- // If remote administration is enabled and password sent by client matches password read from login server configuration file
- if ((admin_state == 1) && (strcmp(password, admin_pass) == 0)) {
+ if( !admin_state )
+ login_log("'ladmin'-login: Connection in administration mode REFUSED - remote administration is disabled (non encrypted password: %s, ip: %s)\n", password, ip);
+ else
+ if( strcmp(password, admin_pass) != 0)
+ login_log("'ladmin'-login: Connection in administration mode REFUSED - invalid password (non encrypted password: %s, ip: %s)\n", password, ip);
+ else {
+ // If remote administration is enabled and password sent by client matches password read from login server configuration file
login_log("'ladmin'-login: Connection in administration mode accepted (non encrypted password: %s, ip: %s)\n", password, ip);
ShowNotice("Connection of a remote administration accepted (non encrypted password).\n");
WFIFOB(fd,2) = 0;
session[fd]->func_parse = parse_admin;
- } else if (admin_state != 1)
- login_log("'ladmin'-login: Connection in administration mode REFUSED - remote administration is disabled (non encrypted password: %s, ip: %s)\n", password, ip);
- else
- login_log("'ladmin'-login: Connection in administration mode REFUSED - invalid password (non encrypted password: %s, ip: %s)\n", password, ip);
+ }
} else { // encrypted password
if (!ld)
ShowError("'ladmin'-login: error! MD5 key not created/requested for an administration login.\n");
@@ -3269,16 +3248,18 @@ int parse_login(int fd)
sprintf(md5str, "%s%s", admin_pass, ld->md5key); // 24 20
}
MD5_String2binary(md5str, md5bin);
- // If remote administration is enabled and password hash sent by client matches hash of password read from login server configuration file
- if ((admin_state == 1) && (memcmp(md5bin, RFIFOP(fd,4), 16) == 0)) {
+ if( !admin_state )
+ login_log("'ladmin'-login: Connection in administration mode REFUSED - remote administration is disabled (encrypted password, ip: %s)\n", ip);
+ else
+ if( memcmp(md5bin, RFIFOP(fd,4), 16) != 0 )
+ login_log("'ladmin'-login: Connection in administration mode REFUSED - invalid password (encrypted password, ip: %s)\n", ip);
+ else {
+ // If remote administration is enabled and password hash sent by client matches hash of password read from login server configuration file
login_log("'ladmin'-login: Connection in administration mode accepted (encrypted password, ip: %s)\n", ip);
ShowNotice("Connection of a remote administration accepted (encrypted password).\n");
WFIFOB(fd,2) = 0;
session[fd]->func_parse = parse_admin;
- } else if (admin_state != 1)
- login_log("'ladmin'-login: Connection in administration mode REFUSED - remote administration is disabled (encrypted password, ip: %s)\n", ip);
- else
- login_log("'ladmin'-login: Connection in administration mode REFUSED - invalid password (encrypted password, ip: %s)\n", ip);
+ }
}
}
}
@@ -3477,7 +3458,7 @@ int login_config_read(const char* cfgName)
msg_silent = atoi(w2);
}
else if (strcmpi(w1, "admin_state") == 0) {
- admin_state = config_switch(w2);
+ admin_state = (bool)config_switch(w2);
} else if (strcmpi(w1, "admin_pass") == 0) {
memset(admin_pass, 0, sizeof(admin_pass));
strncpy(admin_pass, w2, sizeof(admin_pass));
@@ -3534,7 +3515,7 @@ int login_config_read(const char* cfgName)
} else if (strcmpi(w1, "gm_account_filename_check_timer") == 0) {
gm_account_filename_check_timer = atoi(w2);
} else if (strcmpi(w1, "log_login") == 0) {
- login_config.log_login = config_switch(w2);
+ login_config.log_login = (bool)config_switch(w2);
} else if (strcmpi(w1, "login_log_filename") == 0) {
memset(login_log_filename, 0, sizeof(login_log_filename));
strncpy(login_log_filename, w2, sizeof(login_log_filename));
@@ -3545,12 +3526,6 @@ int login_config_read(const char* cfgName)
login_log_unknown_packets_filename[sizeof(login_log_unknown_packets_filename)-1] = '\0';
} else if (strcmpi(w1, "save_unknown_packets") == 0) {
save_unknown_packets = config_switch(w2);
- } else if (strcmpi(w1, "display_parse_login") == 0) {
- display_parse_login = config_switch(w2);
- } else if (strcmpi(w1, "display_parse_admin") == 0) {
- display_parse_admin = config_switch(w2);
- } else if (strcmpi(w1, "display_parse_fromchar") == 0) {
- display_parse_fromchar = config_switch(w2); // 0: no, 1: yes (without packet 0x2714), 2: all packets
} else if (strcmpi(w1, "add_to_unlimited_account") == 0) {
add_to_unlimited_account = config_switch(w2);
} else if (strcmpi(w1, "start_limited_time") == 0) {
@@ -3618,7 +3593,7 @@ int login_config_read(const char* cfgName)
else if(!strcmpi(w1, "check_client_version"))
login_config.check_client_version = (bool)config_switch(w2);
else if(!strcmpi(w1, "client_version_to_connect"))
- login_config.client_version_to_connect = (unsigned int)atoi(w2);
+ login_config.client_version_to_connect = atoi(w2);
else if(!strcmpi(w1, "use_MD5_passwords"))
login_config.use_md5_passwds = (bool)config_switch(w2);
else if(!strcmpi(w1, "min_level_to_connect"))
@@ -3626,7 +3601,7 @@ int login_config_read(const char* cfgName)
else if(!strcmpi(w1, "date_format"))
safestrncpy(login_config.date_format, w2, sizeof(login_config.date_format));
else if(!strcmpi(w1, "console"))
- login_config.console = config_switch(w2);
+ login_config.console = (bool)config_switch(w2);
// else if(!strcmpi(w1, "case_sensitive"))
// login_config.case_sensitive = config_switch(w2);
else if(!strcmpi(w1, "allowed_regs")) //account flood protection system
@@ -3654,12 +3629,7 @@ int login_config_read(const char* cfgName)
//-------------------------------------
void display_conf_warnings(void)
{
- if (admin_state != 0 && admin_state != 1) {
- ShowWarning("Invalid value for admin_state parameter -> setting to 0 (no remote admin).\n");
- admin_state = 0;
- }
-
- if (admin_state == 1) {
+ if( admin_state ) {
if (admin_pass[0] == '\0') {
ShowWarning("Administrator password is void (admin_pass).\n");
} else if (strcmp(admin_pass, "admin") == 0) {
@@ -3704,21 +3674,6 @@ void display_conf_warnings(void)
save_unknown_packets = 0;
}
- if (display_parse_login != 0 && display_parse_login != 1) { // 0: no, 1: yes
- ShowWarning("Invalid value for display_parse_login parameter -> setting to 0 (no display).\n");
- display_parse_login = 0;
- }
-
- if (display_parse_admin != 0 && display_parse_admin != 1) { // 0: no, 1: yes
- ShowWarning("Invalid value for display_parse_admin parameter -> setting to 0 (no display).\n");
- display_parse_admin = 0;
- }
-
- if (display_parse_fromchar < 0 || display_parse_fromchar > 2) { // 0: no, 1: yes (without packet 0x2714), 2: all packets
- ShowWarning("Invalid value for display_parse_fromchar parameter -> setting to 0 (no display).\n");
- display_parse_fromchar = 0;
- }
-
if (login_config.min_level_to_connect < 0) { // 0: all players, 1-99 at least gm level x
ShowWarning("Invalid value for min_level_to_connect (%d) parameter -> setting 0 (any player).\n", login_config.min_level_to_connect);
login_config.min_level_to_connect = 0;
@@ -3776,7 +3731,7 @@ void save_config_in_log(void)
// save configuration in log file
login_log("The configuration of the server is set:\n");
- if (admin_state != 1)
+ if( !admin_state )
login_log("- with no remote administration.\n");
else if (admin_pass[0] == '\0')
login_log("- with a remote administration with a VOID password.\n");
@@ -3827,18 +3782,6 @@ void save_config_in_log(void)
login_log("- to SAVE all unkown packets.\n");
else
login_log("- to SAVE only unkown packets sending by a char-server or a remote administration.\n");
- if (display_parse_login)
- login_log("- to display normal parse packets on console.\n");
- else
- login_log("- to NOT display normal parse packets on console.\n");
- if (display_parse_admin)
- login_log("- to display administration parse packets on console.\n");
- else
- login_log("- to NOT display administration parse packets on console.\n");
- if (display_parse_fromchar)
- login_log("- to display char-server parse packets on console.\n");
- else
- login_log("- to NOT display char-server parse packets on console.\n");
if (login_config.min_level_to_connect == 0) // 0: all players, 1-99 at least gm level x
login_log("- with no minimum level for connection.\n");
diff --git a/src/login/login.h b/src/login/login.h
index f9fc9f484..405b3fab2 100644
--- a/src/login/login.h
+++ b/src/login/login.h
@@ -4,21 +4,21 @@
#ifndef _LOGIN_H_
#define _LOGIN_H_
+#include "../common/mmo.h"
+
#define LOGIN_CONF_NAME "conf/login_athena.conf"
#define LAN_CONF_NAME "conf/subnet_athena.conf"
// supported encryption types: 1- passwordencrypt, 2- passwordencrypt2, 3- both
#define PASSWORDENC 3
-extern uint16 login_port;
-
struct mmo_account {
int version;
char userid[NAME_LENGTH];
char passwd[NAME_LENGTH];
int passwdenc;
- uint32 account_id;
+ int account_id;
long login_id1;
long login_id2;
long char_id;
diff --git a/src/login_sql/login.c b/src/login_sql/login.c
index b45ec0119..a0e4b6964 100644
--- a/src/login_sql/login.c
+++ b/src/login_sql/login.c
@@ -35,7 +35,7 @@ struct Login_Config {
int min_level_to_connect; // minimum level of player/GM (0: player, 1-99: GM) to connect
bool online_check; // reject incoming players that are already registered as online ?
bool check_client_version; // check the clientversion set in the clientinfo ?
- unsigned int client_version_to_connect; // the client version needed to connect (if checking is enabled)
+ int client_version_to_connect; // the client version needed to connect (if checking is enabled)
bool ipban; // perform IP blocking (via contents of `ipbanlist`) ?
bool dynamic_pass_failure_ban; // automatic IP blocking due to failed login attemps ?
@@ -99,19 +99,19 @@ struct login_session_data {
};
#define AUTH_FIFO_SIZE 256
-struct {
- int account_id, login_id1, login_id2;
+struct _auth_fifo {
+ int account_id;
+ uint32 login_id1, login_id2;
uint32 ip;
- char sex;
+ uint8 sex;
bool delflag;
} auth_fifo[AUTH_FIFO_SIZE];
-
int auth_fifo_pos = 0;
struct online_login_data {
int account_id;
int waiting_disconnect;
- short char_server;
+ int char_server;
};
//-----------------------------------------------------
@@ -688,7 +688,7 @@ int parse_fromchar(int fd)
if( RFIFOREST(fd) < 19 )
return 0;
{
- uint32 account_id = RFIFOL(fd,2);
+ int account_id = RFIFOL(fd,2);
for( i = 0; i < AUTH_FIFO_SIZE; ++i )
{
if( auth_fifo[i].account_id == RFIFOL(fd,2) &&
@@ -1155,11 +1155,11 @@ int parse_fromchar(int fd)
Sql_GetData(sql_handle, 0, &data, NULL);
if( *data != '\0' )
{
- off += sprintf(WFIFOP(fd,off), "%s", data)+1; //We add 1 to consider the '\0' in place.
+ off += sprintf((char*)WFIFOP(fd,off), "%s", data)+1; //We add 1 to consider the '\0' in place.
// value
Sql_GetData(sql_handle, 1, &data, NULL);
- off += sprintf(WFIFOP(fd,off), "%s", data)+1;
+ off += sprintf((char*)WFIFOP(fd,off), "%s", data)+1;
}
}
Sql_FreeResult(sql_handle);
@@ -1310,8 +1310,8 @@ int parse_login(int fd)
account.version = RFIFOL(fd,2);
if( !account.version )
account.version = 1; //Force some version...
- safestrncpy(account.userid, RFIFOP(fd,6), NAME_LENGTH);//## does it have to be nul-terminated?
- safestrncpy(account.passwd, RFIFOP(fd,30), NAME_LENGTH);//## does it have to be nul-terminated?
+ safestrncpy(account.userid, (char*)RFIFOP(fd,6), NAME_LENGTH);//## does it have to be nul-terminated?
+ safestrncpy(account.passwd, (char*)RFIFOP(fd,30), NAME_LENGTH);//## does it have to be nul-terminated?
account.passwdenc = (command == 0x01dd) ? PASSWORDENC : 0;
Sql_EscapeStringLen(sql_handle, esc_userid, account.userid, strlen(account.userid));
@@ -1452,7 +1452,7 @@ int parse_login(int fd)
ban_until_time = (time_t)strtoul(data, NULL, 10);
Sql_FreeResult(sql_handle);
- strftime(WFIFOP(fd,3), 20, login_config.date_format, localtime(&ban_until_time));
+ strftime((char*)WFIFOP(fd,3), 20, login_config.date_format, localtime(&ban_until_time));
}
}
else
@@ -1503,8 +1503,8 @@ int parse_login(int fd)
uint16 server_port;
memset(&account, 0, sizeof(account));
- safestrncpy(account.userid, RFIFOP(fd,2), NAME_LENGTH);
- safestrncpy(account.passwd, RFIFOP(fd,26), NAME_LENGTH);
+ safestrncpy(account.userid, (char*)RFIFOP(fd,2), NAME_LENGTH);
+ safestrncpy(account.passwd, (char*)RFIFOP(fd,26), NAME_LENGTH);
account.passwdenc = 0;
server_ip = ntohl(RFIFOL(fd,54));
server_port = ntohs(RFIFOW(fd,58));
@@ -1752,12 +1752,12 @@ int login_config_read(const char* cfgName)
ShowStatus("set login_port : %s\n",w2);
}
else if(!strcmpi(w1, "log_login"))
- login_config.log_login = config_switch(w2);
+ login_config.log_login = (bool)config_switch(w2);
else if(!strcmpi(w1, "ipban"))
- login_config.ipban = config_switch(w2);
+ login_config.ipban = (bool)config_switch(w2);
else if(!strcmpi(w1, "dynamic_pass_failure_ban"))
- login_config.dynamic_pass_failure_ban = config_switch(w2);
+ login_config.dynamic_pass_failure_ban = (bool)config_switch(w2);
else if(!strcmpi(w1, "dynamic_pass_failure_ban_interval"))
login_config.dynamic_pass_failure_ban_interval = atoi(w2);
else if(!strcmpi(w1, "dynamic_pass_failure_ban_limit"))
@@ -1770,7 +1770,7 @@ int login_config_read(const char* cfgName)
else if(!strcmpi(w1, "check_client_version"))
login_config.check_client_version = (bool)config_switch(w2);
else if(!strcmpi(w1, "client_version_to_connect"))
- login_config.client_version_to_connect = (unsigned int)atoi(w2);
+ login_config.client_version_to_connect = atoi(w2);
else if(!strcmpi(w1, "use_MD5_passwords"))
login_config.use_md5_passwds = (bool)config_switch(w2);
else if(!strcmpi(w1, "min_level_to_connect"))
@@ -1778,9 +1778,9 @@ int login_config_read(const char* cfgName)
else if(!strcmpi(w1, "date_format"))
safestrncpy(login_config.date_format, w2, sizeof(login_config.date_format));
else if(!strcmpi(w1, "console"))
- login_config.console = config_switch(w2);
+ login_config.console = (bool)config_switch(w2);
else if(!strcmpi(w1, "case_sensitive"))
- login_config.case_sensitive = config_switch(w2);
+ login_config.case_sensitive = (bool)config_switch(w2);
else if(!strcmpi(w1, "allowed_regs")) //account flood protection system
allowed_regs = atoi(w2);
else if(!strcmpi(w1, "time_allowed"))