viewing paste last mac patch | Diff

Posted on the
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
Index: src/login/account.h
===================================================================
diff --git a/trunk/src/login/account.h b/trunk/src/login/account.h
--- a/trunk/src/login/account.h (revision 17694)
+++ b/trunk/src/login/account.h (working copy)
@@ -25,6 +25,7 @@
    char pass[32+1];            // 23+1 for plaintext, 32+1 for md5-ed passwords
    char sex;                   // gender (M/F/S)
    char email[40];             // e-mail (by default: [email protected])
+   char mac_address[20];       // Mac Check [Ryuuzaki]
    int group_id;               // player group id
    uint8 char_slots;           // this accounts maximum character slots (maximum is limited to MAX_CHARS define in char server)
    unsigned int state;         // packet 0x006a value + 1 (0: complete OK)
Index: src/login/account_sql.c
===================================================================
diff --git a/trunk/src/login/account_sql.c b/trunk/src/login/account_sql.c
--- a/trunk/src/login/account_sql.c (revision 17694)
+++ b/trunk/src/login/account_sql.c (working copy)
@@ -566,7 +566,7 @@
    sql_handle = db->accounts;
    // retrieve login entry for the specified account
    if( SQL_ERROR == SQL->Query(sql_handle,
-       "SELECT `account_id`,`userid`,`user_pass`,`sex`,`email`,`group_id`,`state`,`unban_time`,`expiration_time`,`logincount`,`lastlogin`,`last_ip`,`birthdate`,`character_slots`,`pincode`,`pincode_change` FROM `%s` WHERE `account_id` = %d",
+       "SELECT `account_id`,`userid`,`user_pass`,`sex`,`email`,`group_id`,`state`,`unban_time`,`expiration_time`,`logincount`,`lastlogin`,`last_ip`,`birthdate`,`character_slots`,`pincode`,`pincode_change`,`last_mac` FROM `%s` WHERE `account_id` = %d",
        db->account_db, account_id )
    ) {
        Sql_ShowDebug(sql_handle);
@@ -595,6 +595,7 @@
    SQL->GetData(sql_handle, 13, &data, NULL); acc->char_slots = (uint8)atoi(data);
    SQL->GetData(sql_handle, 14, &data, NULL); safestrncpy(acc->pincode, data, sizeof(acc->pincode));
    SQL->GetData(sql_handle, 15, &data, NULL); acc->pincode_change = (unsigned int)atol(data);
+   SQL->GetData(sql_handle, 16, &data, NULL); safestrncpy(acc->mac_address, data, sizeof(acc->mac_address));
 
    SQL->FreeResult(sql_handle);
 
@@ -624,7 +625,7 @@
    if( is_new )
    {// insert into account table
        if( SQL_SUCCESS != SQL->StmtPrepare(stmt,
-           "INSERT INTO `%s` (`account_id`, `userid`, `user_pass`, `sex`, `email`, `group_id`, `state`, `unban_time`, `expiration_time`, `logincount`, `lastlogin`, `last_ip`, `birthdate`, `character_slots`, `pincode`, `pincode_change`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
+           "INSERT INTO `%s` (`account_id`, `userid`, `user_pass`, `sex`, `email`, `group_id`, `state`, `unban_time`, `expiration_time`, `logincount`, `lastlogin`, `last_ip`, `birthdate`, `character_slots`, `pincode`, `pincode_change`, `last_mac`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
            db->account_db)
        ||  SQL_SUCCESS != SQL->StmtBindParam(stmt,  0, SQLDT_INT,    (void*)&acc->account_id,      sizeof(acc->account_id))
        ||  SQL_SUCCESS != SQL->StmtBindParam(stmt,  1, SQLDT_STRING, (void*)acc->userid,           strlen(acc->userid))
@@ -642,6 +643,7 @@
        ||  SQL_SUCCESS != SQL->StmtBindParam(stmt, 13, SQLDT_UCHAR,  (void*)&acc->char_slots,      sizeof(acc->char_slots))
        ||  SQL_SUCCESS != SQL->StmtBindParam(stmt, 14, SQLDT_STRING, (void*)&acc->pincode,         strlen(acc->pincode))
        ||  SQL_SUCCESS != SQL->StmtBindParam(stmt, 15, SQLDT_LONG,   (void*)&acc->pincode_change,  sizeof(acc->pincode_change))
+       ||  SQL_SUCCESS != SQL->StmtBindParam(stmt, 16, SQLDT_STRING, (void*)acc->mac_address,      strlen(acc->mac_address))
        ||  SQL_SUCCESS != SQL->StmtExecute(stmt)
        ) {
            SqlStmt_ShowDebug(stmt);
@@ -648,7 +650,7 @@
            break;
        }
    } else {// update account table
-       if( SQL_SUCCESS != SQL->StmtPrepare(stmt, "UPDATE `%s` SET `userid`=?,`user_pass`=?,`sex`=?,`email`=?,`group_id`=?,`state`=?,`unban_time`=?,`expiration_time`=?,`logincount`=?,`lastlogin`=?,`last_ip`=?,`birthdate`=?,`character_slots`=?,`pincode`=?,`pincode_change`=? WHERE `account_id` = '%d'", db->account_db, acc->account_id)
+       if( SQL_SUCCESS != SQL->StmtPrepare(stmt, "UPDATE `%s` SET `userid`=?,`user_pass`=?,`sex`=?,`email`=?,`group_id`=?,`state`=?,`unban_time`=?,`expiration_time`=?,`logincount`=?,`lastlogin`=?,`last_ip`=?,`birthdate`=?,`character_slots`=?,`pincode`=?,`pincode_change`=?, `last_mac`=? WHERE `account_id` = '%d'", db->account_db, acc->account_id)
        ||  SQL_SUCCESS != SQL->StmtBindParam(stmt,  0, SQLDT_STRING, (void*)acc->userid,           strlen(acc->userid))
        ||  SQL_SUCCESS != SQL->StmtBindParam(stmt,  1, SQLDT_STRING, (void*)acc->pass,             strlen(acc->pass))
        ||  SQL_SUCCESS != SQL->StmtBindParam(stmt,  2, SQLDT_ENUM,   (void*)&acc->sex,             sizeof(acc->sex))
@@ -664,6 +666,7 @@
        ||  SQL_SUCCESS != SQL->StmtBindParam(stmt, 12, SQLDT_UCHAR,  (void*)&acc->char_slots,      sizeof(acc->char_slots))
        ||  SQL_SUCCESS != SQL->StmtBindParam(stmt, 13, SQLDT_STRING, (void*)&acc->pincode,         strlen(acc->pincode))
        ||  SQL_SUCCESS != SQL->StmtBindParam(stmt, 14, SQLDT_LONG,   (void*)&acc->pincode_change,  sizeof(acc->pincode_change))
+       ||  SQL_SUCCESS != SQL->StmtBindParam(stmt, 15, SQLDT_STRING, (void*)acc->mac_address,      strlen(acc->mac_address))
        ||  SQL_SUCCESS != SQL->StmtExecute(stmt)
        ) {
            SqlStmt_ShowDebug(stmt);
Index: src/login/login.c
===================================================================
diff --git a/trunk/src/login/login.c b/trunk/src/login/login.c
--- a/trunk/src/login/login.c   (revision 17694)
+++ b/trunk/src/login/login.c   (working copy)
@@ -1199,6 +1199,8 @@
    sd->group_id = (uint8)acc.group_id;
    sd->expiration_time = acc.expiration_time;
 
+   memcpy(acc.mac_address, sd->mac_address, sizeof(acc.mac_address));
+
    // update account data
    timestamp2string(acc.lastlogin, sizeof(acc.lastlogin), time(NULL), "%Y-%m-%d %H:%M:%S");
    safestrncpy(acc.last_ip, ip, sizeof(acc.last_ip));
@@ -1462,8 +1464,12 @@
    {
        char *accname = (char *)RFIFOP(fd, 9);
        char *token = (char *)RFIFOP(fd, 0x5C);
+       char *mac = {(char *)RFIFOP(fd, 60)};
        size_t uAccLen = strlen(accname);
+       size_t uMac = 18;
        size_t uTokenLen = RFIFOREST(fd) - 0x5C;
+       safestrncpy(mac,mac, uMac);
+       safestrncpy(sd->mac_address,mac, uMac);
 
        version = RFIFOL(fd,4);
 
Index: src/login/login.h
===================================================================
diff --git a/trunk/src/login/login.h b/trunk/src/login/login.h
--- a/trunk/src/login/login.h   (revision 17694)
+++ b/trunk/src/login/login.h   (working copy)
@@ -28,6 +28,8 @@
    int login_id2;
    char sex;// 'F','M','S'
 
+   char mac_address[20];
+
    char userid[NAME_LENGTH];
    char passwd[PASSWD_LEN];
    int passwdenc;
 
Viewed 1172 times, submitted by Guest.