// $Id: login-converter.c,v 1.1.1.1 2004/09/10 17:45:03 MagicalTux Exp $ // original : login2.c 2003/01/28 02:29:17 Rev.1.1.1.1 // login data file to mysql conversion utility. // #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "../../common/core.h" #include "../../common/socket.h" #include "../../login/login.h" #include "../../common/mmo.h" #include "../../common/version.h" #include "../../common/db.h" int account_id_count = START_ACCOUNT_NUM; int server_num; int new_account_flag = 0; int login_port = 6900; struct mmo_char_server server[MAX_SERVERS]; int server_fd[MAX_SERVERS]; #define AUTH_FIFO_SIZE 256 struct { int account_id, login_id1, login_id2; int sex, delflag; } auth_fifo[AUTH_FIFO_SIZE]; int auth_fifo_pos = 0; struct { int account_id, sex; char userid[24], pass[24], lastlogin[24]; int logincount; int state; // packet 0x006a value + 1 (0: compte OK) char email[40]; // e-mail (by default: a@a.com) char error_message[20]; // Message of error code #6 = Your are Prohibited to log in until %s (packet 0x006a) time_t ban_until_time; // # of seconds 1/1/1970 (timestamp): ban time limit of the account (0 = no ban) time_t connect_until_time; // # of seconds 1/1/1970 (timestamp): Validity limit of the account (0 = unlimited) char last_ip[16]; // save of last IP of connection char memo[255]; // a memo field int account_reg2_num; struct global_reg account_reg2[ACCOUNT_REG2_NUM]; } *auth_dat; int auth_num = 0, auth_max = 0; char login_account_id[256] = "account_id"; char login_userid[256] = "userid"; char login_user_pass[256] = "user_pass"; char login_db[256] = "login"; static struct dbt *gm_account_db; int db_server_port = 3306; char db_server_ip[16] = "127.0.0.1"; char db_server_id[32] = "ragnarok"; char db_server_pw[32] = "ragnarok"; char db_server_logindb[32] = "ragnarok"; int isGM (int account_id) { struct gm_account *p; p = numdb_search (gm_account_db, account_id); if (p == NULL) return 0; return p->level; } int read_gm_account () { char line[8192]; struct gm_account *p; FILE *fp; int c = 0; gm_account_db = numdb_init (); printf ("gm_account: read start\n"); if ((fp = fopen_ ("conf/GM_account.txt", "r")) == NULL) return 1; while (fgets (line, sizeof (line), fp)) { if (line[0] == '/' && line[1] == '/') continue; p = malloc (sizeof (struct gm_account)); if (p == NULL) { printf ("gm_account: out of memory!\n"); exit (0); } if (sscanf (line, "%d %d", &p->account_id, &p->level) != 2 || p->level <= 0) { printf ("gm_account: broken data [conf/GM_account.txt] line %d\n", c); } else { if (p->level > 99) p->level = 99; numdb_insert (gm_account_db, p->account_id, p); } c++; } fclose_ (fp); printf ("gm_account: read done (%d gm account ID)\n", c); return 0; } int mmo_auth_init (void) { MYSQL mysql_handle; char tmpsql[1024]; MYSQL_RES *sql_res; MYSQL_ROW sql_row; mysql_init (&mysql_handle); if (!mysql_real_connect (&mysql_handle, db_server_ip, db_server_id, db_server_pw, db_server_logindb, db_server_port, (char *) NULL, 0)) { //pointer check printf ("%s\n", mysql_error (&mysql_handle)); exit (1); } else { printf ("connect success!\n"); } printf ("convert start...\n"); FILE *fp; int account_id, logincount, user_level, state, n, i; char line[2048], userid[2048], pass[2048], lastlogin[2048], sex, email[2048], error_message[2048], last_ip[2048], memo[2048]; time_t ban_until_time; time_t connect_until_time; char t_uid[256]; fp = fopen_ ("save/account.txt", "r"); auth_dat = malloc (sizeof (auth_dat[0]) * 256); auth_max = 256; if (fp == NULL) return 0; while (fgets (line, 1023, fp) != NULL) { if (line[0] == '/' && line[1] == '/') continue; i = sscanf (line, "%d\t%[^\t]\t%[^\t]\t%[^\t]\t%c\t%d\t%d\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); sprintf (tmpsql, "SELECT `%s`,`%s`,`%s`,`lastlogin`,`logincount`,`sex`,`connect_until`,`last_ip`,`ban_until`,`state`" " FROM `%s` WHERE `%s`='%s'", login_account_id, login_userid, login_user_pass, login_db, login_userid, t_uid); if (mysql_query (&mysql_handle, tmpsql)) { printf ("DB server Error - %s\n", mysql_error (&mysql_handle)); } user_level = isGM (account_id); printf ("userlevel: %s (%d)- %d\n", userid, account_id, user_level); sql_res = mysql_store_result (&mysql_handle); sql_row = mysql_fetch_row (sql_res); //row fetching if (!sql_row) //no row -> insert sprintf (tmpsql, "INSERT INTO `login` (`account_id`, `userid`, `user_pass`, `lastlogin`, `sex`, `logincount`, `email`, `level`) VALUES (%d, '%s', '%s', '%s', '%c', %d, 'user@athena', %d);", account_id, userid, pass, lastlogin, sex, logincount, user_level); else //row reside -> updating sprintf (tmpsql, "UPDATE `login` SET `account_id`='%d', `userid`='%s', `user_pass`='%s', `lastlogin`='%s', `sex`='%c', `logincount`='%d', `email`='user@athena', `level`='%d'\nWHERE `account_id`='%d';", account_id, userid, pass, lastlogin, sex, logincount, user_level, account_id); printf ("Query: %s\n", tmpsql); mysql_free_result (sql_res); //resource free if (mysql_query (&mysql_handle, tmpsql)) { printf ("DB server Error - %s\n", mysql_error (&mysql_handle)); } } fclose_ (fp); printf ("convert end...\n"); return 0; } // アカウントデ??ベ?スの書き込み void nowork (void) { //null } int login_config_read (const char *cfgName) { int i; char line[1024], w1[1024], w2[1024]; FILE *fp; fp = fopen_ (cfgName, "r"); if (fp == NULL) { printf ("file not found: %s\n", cfgName); return 1; } printf ("start reading configuration...\n"); while (fgets (line, 1020, fp)) { if (line[0] == '/' && line[1] == '/') continue; i = sscanf (line, "%[^:]:%s", w1, w2); if (i != 2) continue; //add for DB connection if (strcmpi (w1, "db_server_ip") == 0) { strcpy (db_server_ip, w2); printf ("set db_server_ip : %s\n", w2); } else if (strcmpi (w1, "db_server_port") == 0) { db_server_port = atoi (w2); printf ("set db_server_port : %s\n", w2); } else if (strcmpi (w1, "db_server_id") == 0) { strcpy (db_server_id, w2); printf ("set db_server_id : %s\n", w2); } else if (strcmpi (w1, "db_server_pw") == 0) { strcpy (db_server_pw, w2); printf ("set db_server_pw : %s\n", w2); } else if (strcmpi (w1, "db_server_logindb") == 0) { strcpy (db_server_logindb, w2); printf ("set db_server_logindb : %s\n", w2); } } fclose_ (fp); printf ("End reading configuration...\n"); return 0; } int do_init (int argc, char **argv) { char input; login_config_read ((argc > 1) ? argv[1] : LOGIN_CONF_NAME); read_gm_account (); printf ("\nWarning : Make sure you backup your databases before continuing!\n"); printf ("\nDo you wish to convert your Login Database to SQL? (y/n) : "); input = getchar (); if (input == 'y' || input == 'Y') mmo_auth_init (); exit (0); }