Когда запускаеш mangosd появляется консоль загрузки сервера,после загрузки пиши команду. Вот патч на авто регистрацию,хотя зря выложил всё равно неразберёршя)
+// check used symbols in account name at creating +std::string notAllowedChars = "\t\v\b\f\a\n\r\\\"\'\? <>[](){}_=+-|/!@#$%^&*~`.,\0"; + ///Holds the MD5 hash of client patches present on the server Patcher PatchesCache;
std::string address = GetRemoteAddress(); loginDatabase.escape_string(address); - QueryResult *result = loginDatabase.PQuery( "SELECT * FROM ip_banned WHERE ip = '%s'",address.c_str()); + QueryResult *result = loginDatabase.PQuery("SELECT * FROM ip_banned WHERE ip = '%s'",address.c_str()); if(result) { pkt << (uint8)REALM_AUTH_ACCOUNT_BANNED; @@ -526,13 +531,80 @@ _localizationName[i] = ch->country[4-i-1];
sLog.outBasic("[AuthChallenge] account %s is using '%c%c%c%c' locale (%u)", _login.c_str (), ch->country[3], ch->country[2], ch->country[1], ch->country[0], GetLocaleByName(_localizationName)); + + // user authenticated => turn off autoreg, thus account creating + _autoreg = false; } } delete result; } - else //no account + else if(_autoreg) // no account { - pkt<< (uint8) REALM_AUTH_NO_MATCH; + // check username + if(_safelogin.find_first_of(notAllowedChars)!=_safelogin.npos || _safelogin.length()<4) + _autoreg = false; + // check IP + else if(uint32 amountip = sConfig.GetIntDefault("AmountIP", 0)) + { + QueryResult *result2 = loginDatabase.PQuery("SELECT COUNT(last_ip) FROM account WHERE last_ip = '%s'", GetRemoteAddress().c_str()); + if (result2 && (*result2)[0].GetUInt8() >= amountip) + { + _autoreg = false; + delete result2; + } + } + + // still all ok + if(_autoreg) + { + ///- Get the password from the account table, upper it, and make the SRP6 calculation + std::transform(_safelogin.begin(), _safelogin.end(), _safelogin.begin(), std::towupper); + Sha1Hash sha; + std::string sI = _safelogin + ":" + _safelogin; + sha.UpdateData(sI); + sha.Finalize(); + + BigNumber bn; + bn.SetBinary(sha.GetDigest(), sha.GetLength()); + uint8 *val = bn.AsByteArray(); + std::reverse(val, val+bn.GetNumBytes()); + bn.SetBinary(val, bn.GetNumBytes()); + + const char* rI = bn.AsHexStr(); + _SetVSFields(rI); + OPENSSL_free((void*)rI); + + b.SetRand(19 * 8); + BigNumber gmod=g.ModExp(b, N); + B = ((v * 3) + gmod) % N; + + if (B.GetNumBytes() < 32) + sLog.outDetail("Interesting, calculation of B in realmd is < 32."); + + ASSERT(gmod.GetNumBytes() <= 32); + + BigNumber unk3; + unk3.SetRand(16*8); + + ///- Fill the response packet with the result + pkt << (uint8)REALM_AUTH_SUCCESS; + pkt.append(B.AsByteArray(), 32); + pkt << (uint8)1; + pkt.append(g.AsByteArray(), 1); + pkt << (uint8)32; + pkt.append(N.AsByteArray(), 32); + pkt.append(s.AsByteArray(), s.GetNumBytes()); + pkt.append(unk3.AsByteArray(), 16); + pkt << (uint8)0; // Added in 1.12.x client branch + } + else + // username and/or IP is bad + pkt << (uint8) REALM_AUTH_NO_MATCH; + } + else + { + // autoreg off in config, account is wrong + pkt << (uint8) REALM_AUTH_NO_MATCH; } } SendBuf((char const*)pkt.contents(), pkt.size()); @@ -693,6 +765,13 @@ ///- Check if SRP6 results match (password is correct), else send an error if (!memcmp(M.AsByteArray(), lp.M1, 20)) { + //create new account if use autoreg + if(_autoreg) + { + loginDatabase.PExecute("INSERT INTO account (username,sha_pass_hash,joindate) VALUES ('%s',SHA1(CONCAT(UPPER('%s'),':',UPPER('%s'))),NOW())",_safelogin.c_str(),_safelogin.c_str(),_safelogin.c_str()); + sLog.outBasic("New account [%s] created successfully", _login.c_str()); + } + sLog.outBasic("User '%s' successfully authenticated", _login.c_str());
///- Update the sessionkey, last_ip, last login time and reset number of failed logins in the account table for this account diff --git a/src/mangosrealm/AuthSocket.h b/src/mangosrealm/AuthSocket.h --- a/src/mangosrealm/AuthSocket.h +++ b/src/mangosrealm/AuthSocket.h @@ -72,6 +72,8 @@
Когда запускаеш mangosd появляется консоль загрузки сервера,после загрузки пиши команду. Вот патч на авто регистрацию,хотя зря выложил всё равно неразберёршя)
мне появилось что я зарегал а захожу и все равно тоже самое... а насчет авторега ты был прав))
Народ подскажите как обрабатывать кэши игры,какой прогой и что вообще это представляет. На 1 форуме видел чел просил кэши с офа для правки базы. Всем спасибо)
подскажите пожалуйста, не пашит в инстах геройка как ее включить арены не работают заходишь на середину и ни чего не происходитв инстах... что можно сделать? ИЛИ ВОЗМОЖНО СКАЧАТЬ ГДЕ НИБУДЬ ГОТОВУЮ ПАПКУ С ИНСТАМИ РАБОЧИМИИ ИЛИ ЧТО ТО В ЭТОМ ДУХЕ? ПОДСКАЖИТЕ ПОЖАЛУЙСТА ЗАРАНИЕ БЛАГОДАРЕН! Версия 3.3.2 мангос
Сообщение отредактировал KOPT - Суббота, 06.03.2010, 00:58
подскажите в исходниках realmd AuthSocket.h есть N.SetHexStr("...") что ето и как определяется его значение? вопрос отпал (это элемент SRP) интересно а как расшифровали N и g =\
Сообщение отредактировал badik - Вторник, 09.03.2010, 23:39