Иконка ресурса

Admin Password Checker 1.3.1

Нет прав для скачивания

Danyas

Модератор
Сообщения
2,031
Реакции
809
Пользователь Danyas разместил новый ресурс:

Admin Password Checker - Замена steamid protector-ов простым плагином

Admin Password Checker используется для защиты админов от подмены их SteamID.
Плагин в первую очередь актуален для NoSteam \ CSSv34 серверов, но может использоваться на Steam-версиях игры (для дополнительной проверки, например).

За основу был взят плагин sb_auth от AlexTheRegent (а.k.a. Reiko1231).
Целью переписи было отключение использование базы данных и расширения функционала.

Что было сделано:
1) Вместо использования базы данных были использованы функции для локального извлечения...
Узнать больше об этом ресурсе...
 

Danyas

Модератор
Сообщения
2,031
Реакции
809
Пользователь Danyas обновил ресурс Admin Password Checker новой записью:

Фиксы и доп. проверка пароля

(DarkSlide)
- Удалены пустые блоки.
- Исключена возможность получения значения PassInfoVar с закоменченого значения. (многострочного в т.ч.)
PHP:
/*
 "PassInfoVar" "_password0"
 */
 // "PassInfoVar" "_password1"
 "PassInfoVar" "_password"
В данном случае плагин будет брать значение _password вместо _password0 и _password1.
- Закрыты возможные утечеки.

(Danyas)
- Добавлена проверка на пустой пароль.
Раньше писало в логах так:
PHP:
L 02/28/2016 -...
Узнать больше об этом обновлении...
 
Сообщения
685
Реакции
52
Спасибо! Работает.Проверил на домашнем сервере.Вот только не понял зачем это сообщение ?" "Админ без пароля" показывть на сервере.По стиму и так не пустит это и понятно а по ip я захожу.Мне кажется показывать всему серверу что Админ без пароля это лишнее.На врятли можно ip потделать(или можно ?).Я даже у себя на сервере меняю ники чтобы не догадались кто админ.
 
Последнее редактирование:

R1KO

всё тлен
Супермодератор
Сообщения
8,401
Реакции
5,839
@Danyas,
PHP:
stock bool:GetPassInfoVar(String:value[], maxlength)
{
    new Handle:file = OpenFile("addons/sourcemod/configs/core.cfg", "rt");
    new bool:find = false;
    if (file != INVALID_HANDLE)
    {
        new Handle:re = INVALID_HANDLE;
        re = CompileRegex("^\\s+\"PassInfoVar\"\\s+\"(\\w+)\""); // ([^\"]*)
        if (re != INVALID_HANDLE)
        {
            decl String:buffer[PLATFORM_MAX_PATH];
            while (!IsEndOfFile(file) && ReadFileLine(file, buffer, sizeof(buffer)))
            {
                if (MatchRegex(re, buffer) > 0 && GetRegexSubString(re, 1, value, maxlength))
                {
                    find = true;
                    break;
                }
            }
           CloseHandle(re);
        }
        CloseHandle(file);
    }
    return find;
}
можно так:
PHP:
bool:GetPassInfoVar(String:value[], maxlength)
{
    new Handle:file = OpenFile("addons/sourcemod/configs/core.cfg", "rt");
    if (file != INVALID_HANDLE)
    {
        new Handle:re = CompileRegex("^\\s+\"PassInfoVar\"\\s+\"(\\w+)\""); // ([^\"]*)
        if (re != INVALID_HANDLE)
        {
            decl String:buffer[PLATFORM_MAX_PATH];
            while (!IsEndOfFile(file) && ReadFileLine(file, buffer, sizeof(buffer)))
            {
                if (MatchRegex(re, buffer) > 0 && GetRegexSubString(re, 1, value, maxlength))
                {
                    CloseHandle(re);
                   CloseHandle(file);
                   return true;
                }
            }
           CloseHandle(re);
        }
        CloseHandle(file);
    }
    return false;
}
PHP:
ReplaceString(sAuth, sizeof(sAuth), "STEAM_1", "STEAM_0");
Почему бы не так:
PHP:
sAuth[6] = '0';

PHP:
new String:sAuth[64];
и
PHP:
new String:sPassword[64];
лучше decl

PHP:
if (StrEqual(sConVarValue, ""))
лучше
PHP:
if (!sConVarValue[0])
и датапак можно закрыть сразу после извлечения строки.
И не помешало бы проверить в игре ли игрок когда значение получено

PHP:
new Handle:hDataPack = INVALID_HANDLE;
        hDataPack = CreateDataPack();
Зачем так делать? Это лишнее действие.
  • Выделение памяти для переменной
  • Запись туда значения 0
  • Создание датапака и запись указателя в переменную
А так:
PHP:
new Handle:hDataPack = CreateDataPack();
  • Выделение памяти для переменной
  • Создание датапака и запись указателя в переменную
 
Последнее редактирование:

TiBarification

Супермодератор
Сообщения
1,816
Реакции
1,209
можно так:
PHP:
bool:GetPassInfoVar(String:value[], maxlength)
{
    new Handle:file = OpenFile("addons/sourcemod/configs/core.cfg", "rt");
    if (file != INVALID_HANDLE)
    {
        new Handle:re = CompileRegex("^\\s+\"PassInfoVar\"\\s+\"(\\w+)\""); // ([^\"]*)
        if (re != INVALID_HANDLE)
        {
            decl String:buffer[PLATFORM_MAX_PATH];
            while (!IsEndOfFile(file) && ReadFileLine(file, buffer, sizeof(buffer)))
            {
                if (MatchRegex(re, buffer) > 0 && GetRegexSubString(re, 1, value, maxlength))
                {
                    return true;
                }
            }
        }
        CloseHandle(re);
    }
    CloseHandle(file);
    return false;
}
Разве перед
PHP:
return true;
не стоит ли закрыть Handle?
 

R1KO

всё тлен
Супермодератор
Сообщения
8,401
Реакции
5,839
@AlmazON, кстати да. у себя всегда замечаю, у других не замечаю.
 
Сообщения
309
Реакции
38
Классный плагин жаль на моей сервере не работает из-за того, что при прописывании пароля к админке через SB исчезает сама админка. :ab:
 
Сообщения
309
Реакции
38
Это как? У меня всё отлично работает
Даю админку через SB:
- без пароля админка работает;
- когда даю с паролем при заходе на сервер нет админки;
- убираю пароль у админа, админка возвращается.
Какая то мистика непонятная.
Аналогично если напрямую прописывать через файл admins.cfg
Не могу понять в чем дело либо в SM 1.8.0. и css v34 , возможно здесь какая то несовместимость (аналогично было и на SM 1.7.3.).
Либо так в чем то.
Площадки размещения серверов разные, результат один.
 

R1KO

всё тлен
Супермодератор
Сообщения
8,401
Реакции
5,839
@lexx777, так а при входе пароль он ввел?
 
Сообщения
260
Реакции
175
@Danyas, у тебя классный велик :D
Код:
QueryClientConVar(client, sInfoVar, OnQueryClientConVar, hDataPack);
но ты ведь не квар у клиента парсишь, а юзерскую инфу. поэтому тут лучше использовать это:
Код:
new String:Value[64];
GetClientInfo(client, sInfoVar, Value, sizeof(Value));
тут главное помнить, что если GetClientInfo вернет false, то Value не изменится.


Код:
public OnClientAuthorized(client, const String:sAuth[])
// STEAM_ID_PENDING? -> OnClientPutInServer (DarkSlide)   
// but i think OnClientPreAdminCheck better than OnClientPutInServer (Danyas)
так почему же OnClientAuthorized? хотя на мой взгляд тут лучше бы подошел OnClientPostAdminCheck
 

Danyas

Модератор
Сообщения
2,031
Реакции
809
@Danyas, у тебя классный велик :D
Код:
QueryClientConVar(client, sInfoVar, OnQueryClientConVar, hDataPack);
но ты ведь не квар у клиента парсишь, а юзерскую инфу. поэтому тут лучше использовать это:
Код:
new String:Value[64];
GetClientInfo(client, sInfoVar, Value, sizeof(Value));
тут главное помнить, что если GetClientInfo вернет false, то Value не изменится.


Код:
public OnClientAuthorized(client, const String:sAuth[])
// STEAM_ID_PENDING? -> OnClientPutInServer (DarkSlide)  
// but i think OnClientPreAdminCheck better than OnClientPutInServer (Danyas)
так почему же OnClientAuthorized? хотя на мой взгляд тут лучше бы подошел OnClientPostAdminCheck
OnClientPostAdminCheck - однозначно нет, ибо с помощью несложных луя-скриптов и LSS можно будет успеть выполнить какую-то каку перед киком.

OnClientPreAdminCheck - да.

На счёт GetClientValue - плюсик, не подумал чет.
 

Danyas

Модератор
Сообщения
2,031
Реакции
809
Пользователь Danyas обновил ресурс Admin Password Checker новой записью:

Еще оптимизация, ty Reg1oxeN

QueryClientConVar заменил на
GetClientInfo.
(минус датапак)
Сменил
OnClientAuthorized на OnClientPreAdminCheck, который 100% должен выдавать steamid
Узнать больше об этом обновлении...
--- Добавлено позже ---
я вот думаю, может стоить кваров прикрутить, и выпустить как вполне конфигурируемый плагин.
ибо одним нужно скрывать setinfovar, другим - наоборот его показывать
 
Сверху