Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Снова про УстановитьХэшПароляПользователя() (число прочтений - 3367 )
slider26
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 256
Зарегистрирован: 01. Июня 2006
Снова про УстановитьХэшПароляПользователя()
26. Июля 2007 :: 04:52
Печать  
Ситуация следующая: сделал обработку для смены пароля пользователем:
Код
Выбрать все
Перем ОбСервис,СтрокаКорректныхСимволов;

//*******************************************
Процедура Выполнить()

	Перем ХэшМД5,Пароль,н_стр,СтрокаНекорректныхСимволов;

	ХэшМД5 = ОбСервис.ПолучитьХэшПароляПользователя(ИмяПользователя(), КаталогИБ());
	Если (ХэшМД5 <> ОбСервис.ПолучитьХэшМД5(СокрЛП(ВРег(СтарыйПароль)))) Тогда
	    Предупреждение("Введён неверный старый пароль пользователя!",20);
		Возврат;
	КонецЕсли;

	Если (НовыйПароль <> ПодтверждениеПароля) Тогда
	    Предупреждение("Новый пароль и его подтверждение не совпадают!",20);
		Возврат;
	КонецЕсли;

	Пароль = СокрЛП(ВРег(НовыйПароль));

	СтрокаНекорректныхСимволов = "";
	Для н_стр=1 По СтрДлина(Пароль) Цикл
	    Если (Найти(СтрокаКорректныхСимволов,Сред(Пароль,н_стр,1)) = 0) Тогда
			СтрокаНекорректныхСимволов = СтрокаНекорректныхСимволов + Сред(СокрЛП(НовыйПароль),н_стр,1);
	    КонецЕсли;
	КонецЦикла;

	Если (ПустаяСтрока(СтрокаНекорректныхСимволов) = 0) Тогда
	    Предупреждение("Пароль не должен содержать следующие символы: """+СтрокаНекорректныхСимволов+"""!",20);
		Возврат;
	КонецЕсли;

	ХэшМД5 = ОбСервис.ПолучитьХэшМД5(Пароль);
	ОбСервис.УстановитьХэшПароляПользователя(ИмяПользователя(),ХэшМД5);

КонецПроцедуры
//*******************************************

ОбСервис = СоздатьОбъект("Сервис");
СтрокаКорректныхСимволов = "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";
 


Всё работает, только вот две проблемы:
1. После сброса пароля через обработку пустой пароль работает на входе в конфигурацию, но при попытке снова сменить пароль при помощи обработки отрабатывает первое условие Печаль (Важность - небольшая);
2. После работы с обработкой стоит только войти в список пользователей в конфигураторе, как сразу же слетают настройки соединения с БД (База SQL), что не даёт возможности реально использовать обработку Печаль (Важность - высокая);

Подскажите, pls, как это можно обойти?
  
Наверх
 
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Снова про УстановитьХэшПароляПользователя()
Ответ #1 - 26. Июля 2007 :: 05:17
Печать  
1. Проверь чему равны ХэшМД5 и ОбСервис.ПолучитьХэшМД5(СокрЛП(ВРег(СтарыйПароль))).
2. Не надо одновременно открывать список пользователей в конфигураторе и пытаться изменить его обработкой.
  

FormEx developer
Наверх
www  
IP записан
 
slider26
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 256
Зарегистрирован: 01. Июня 2006
Re: Снова про УстановитьХэшПароляПользователя()
Ответ #2 - 26. Июля 2007 :: 05:49
Печать  
Для (1):
ХэшМД5 для пустой строки равен "00000000000000000000000000000000"
Но при этом:
ОбСервис.ПолучитьХэшПароляПользователя(ИмяПользователя(), КаталогИБ()) = "233"
после выполнения:
000000000000")
Озадачен
В принципе, лечится так:
Код
Выбрать все
ХэшМД5 = ОбСервис.ПолучитьХэшПароляПользователя(ИмяПользователя(), КаталогИБ());
Если (ХэшМД5 <> ОбСервис.ПолучитьХэшМД5(СокрЛП(ВРег(СтарыйПароль)))) Тогда
	Если ((ПустаяСтрока(СтарыйПароль) = 0) или (ХэшМД5 <> "233")) Тогда
		Предупреждение("Введён неверный старый пароль пользователя!",20);
		Возврат;
	КонецЕсли;
КонецЕсли;
 


Это баг или фича?

Для (2):
Следующая послед-ть действий валит соединение:
-Запускаем 1С;
-Запускаем конфигуратор;
-Выполняем обработку;
-Заходим в конф в список пользователей;
-Соединение мертво...

Это очень похоже на последствия работы механизма защиты от подмены Users.usr...

Поэтому вопрос:
А нельзя ли переделать функцию "УстановитьХэшПароля" таким образом, чтобы она возвращала:
1 - Пароль успешно изменён;
0 - Не удалось изменить пароль, так как запущен конфигуратор, заблокирован файл и т.д. и т.п.?
  
Наверх
 
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Снова про УстановитьХэшПароляПользователя()
Ответ #3 - 26. Июля 2007 :: 07:00
Печать  
1. Скорее баг, т.к. эту ситуацию, вроде как, правил. Посмотрю еще раз.
2. Конфигуратор при запуске считывает и запоминает все нужные ему данные. А после изменения пароля снаружи получается несовпадение того, что конфигуратор считал и то, что есть на самом деле. Боюсь, что проблема на стороне конфигуратора и я ни чего сделать не могу.
  

FormEx developer
Наверх
www  
IP записан
 
slider26
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 256
Зарегистрирован: 01. Июня 2006
Re: Снова про УстановитьХэшПароляПользователя()
Ответ #4 - 26. Июля 2007 :: 07:36
Печать  
Цитата:
2. Конфигуратор при запуске считывает и запоминает все нужные ему данные. А после изменения пароля снаружи получается несовпадение того, что конфигуратор считал и то, что есть на самом деле. Боюсь, что проблема на стороне конфигуратора и я ни чего сделать не могу.

Скорее всего время посл. изм. файла конфигуратор запоминает Улыбка
А если его запоминать (время/дату) и восстанавливать?
Или можно доработать функцию следующим образом:
уратора=0)
, чтобы при установке параметра "ПроверятьОтсутствиеКонфигуратора" в 1, при наличии запущеного конфигуратора ф-я возвращала "0" и ничего не делала Улыбка Иначе, возвращала 1...
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать