DOCUMENT_ROOT
Корневой каталог документов веб-сервера. Например, если при запросе http://www.my-web-server.ru/ сервер пересылает посетителю файл d:/www/index.html, значением переменной DOCUMENT_ROOT будет d:/www. Это обычно совпадает с тем, что указано в директиве DocumentRoot конфигурационного файла сервера Apache.
CONTENT_LENGTH
Длина тела запроса. Обычно это поле анализируют, если получен запрос типа POST.
CONTENT_TYPE
Тип принятых данных. Например, multipart/form-data.
GATEWAY_INTERFACE
Имя и версия CGI-протокола. Например: CGI/1.1. Эта переменная может оказаться полезной, чтобы определить, откуда запущена программа. Если значение переменной отсутствует, то программа, скорее всего, вызвана не через веб, а запущена из командной строки на сервере.
HTTP_ACCEPT
Список mime-типов, которые способен принять браузер. Переменная может содержать только маску */*, либо список значений, разделенных запятыми: text/html, image/png, image/jpeg, image/gif, image/x-xbitmap, application/msword.
HTTP_ACCEPT_CHARSET
Список воспринимаемых браузером кодировок. Например, windows-1251;q=1.0, utf-8;q=1.0, utf-16;q=1.0, iso-8859-1;q=0.6, *;q=0.1. Обратите внимание, что после каждой кодировки указан ее «вес», который расставляет кодировки в порядке предпочтения.
HTTP_ACCEPT_ENCODING
Список типов кодирования, которые понимает браузер. Например: gzip, deflate, x-gzip.
HTTP_ACCEPT_LANGUAGE
Список языков, которые принимает браузер. Например: ru, en.
HTTP_CACHE_CONTROL
Способ кэширования документов (или указание о его отсутствии). Например: no-cache. В ранних версиях Netscape Navigator это значение доступно в переменной HTTP_PRAGMA.
HTTP_CONNECTION
Тип соединения. Например: Keep-Alive.
HTTP_COOKIE
Список пар вида имя=значение, содержащихся в cookiе для текущей страницы или сервера. Значения cookie устанавливает веб-сервер, а браузер клиента сохраняет их и передает серверу при следующих запросах, ведущих на тот же сервер.
HTTP_HOST
Запрошенное доменное имя. Часто бывает так, что один и тот же сервер доступен по нескольким адресам, например, http://www.my-web-server.ru и http://my-web-server.ru. Переменная примет значения www.my-web-server.ru и my-web-server.ru, соответственно. Переменную можно использовать, чтобы автоматически перенаправлять браузер на другой адрес, например, если вы приобрели новое, более красивое, доменное имя.
HTTP_REFERER
Адрес страницы, с которой пользователь попал на сервер. Например, если на странице http://www.web-server-1.ru/index.html стоит ссылка на ресурс http://www.web-server-2.ru/index.html, то второй веб-сервер получит в этой переменной значение http://www.web-server-1.ru/index.html. С помощью переменной HTTP_REFERER можно узнать, кто ссылается на ваш сервер. Более того, если посетитель пришел с поисковой системы, часто в переменной виден тот запрос, по которому вас нашли.
HTTP_USER_AGENT
Идентификатор клиентской программы (браузера) и операционной системы. Значение этой переменной не стандартизировано и формируется браузером так, что в ней содержится имя и версия браузера одновременно с версией операционной системы. Например, Microsoft Internet Explorer 6.0 под управлением Windоws XP передает такую строку: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705).
QUERY_STRING
Строка запроса. Если пользователь запросил документ и указал дополнительные параметры, например, http://www.my-web-server.ru/index.html?var1=name1, переменная получит значение var1=name. Эта переменная активно применяется при обработке веб-форм.
REDIRECT_QUERY_STRING
Эта и две следующие переменные появляются в том случае, если при запросе некоего ресурса веб-сервер выполнил внутреннее перенаправление, например, на скрипт, который указан в качестве индексного файла для текущего каталога, либо при вызове CGI-программы директивой SSI. В переменной REDIRECT_QUERY_STING содержатся те же данные, что и в переменной QUERY_STRING.
REDIRECT_STATUS
При перенаправлении в этой переменной указан код ответа, например, 200.
REDIRECT_URL
Если на сервере выполнено перенаправление, эта переменная содержит запрошенный URI.
REMOTE_ADDR
IP-адрес пользователя. В том случае, если между пользователем и веб-сервером находится прокси-сервер, переменная скорее всего будет содержать адрес прокси-сервера.
REMOTE_HOST
Имя узла пользователя или его прокси-сервера. Если эта переменная не установлена, можно воспользоваться значением переменной REMOTE_ADDR.
REMOTE_PORT
Номер порта клиента. Если на машине клиента одновременно работают несколько браузеров, значение этой переменной окажется различной для каждого из них. Интересно отметить, что, например, устаревший ныне браузер Netscape Navigator 2 увеличивает номер порта при каждом обновлении страницы.
REQUEST_METHOD
Текущий метод HTTP-запроса. Например: GET или HEAD.
REQUEST_URI
URI запрошенного документа. Понятие URI часто путают с URL. Если запрошена страница http://www.my-web-server.ru/dir/index.html, переменная примет значение /dir/index.html. Если в запросе содержится строка запроса (помещаемая в переменную QUERY_STRING), она останется и в переменной REQUEST_URI.
SCRIPT_FILENAME
Путь к скрипту на веб-сервере. Переменная устанавливается, если пользователь запросил CGI-скрипт или программу, а не html-документ. Например: d:/www/cgi/2/c2.exe.
SCRIPT_NAME
URI скрипта, если запрошен CGI-скрипт или программа, а не html-документ. В отличие от переменной REQUEST_URI, строка запроса теряется.
SERVER_ADDR
IP-адрес веб-сервера.
SERVER_ADMIN
Адрес электронной почты администратора сервера. Значение переменной зависит от того, что указано в файле конфигурации.
SERVER_NAME
Имя сервера. Оно может не совпадать с доменным именем. Значение этой переменной указано в конфигурационном файле.
SERVER_PORT
Номер порта веб-сервера, по которому он ожидает запросы. Наиболее вероятное значение — 80.
SERVER_PROTOCOL
Имя и версия протокола, согласно которому веб-сервер общается с клиентом. Например: HTTP/1.1.
SERVER_SOFTWARE
Название и версия веб-сервера. Здесь также может содержаться упоминание об операционной системе. Например: Apache/1.3.14 (Win32).
Мне вот понадобилось и я оставил на память. Надеюсь кому то помогло.
пятница, 18 мая 2007 г.
вторник, 3 апреля 2007 г.
Как настроить PPPoE в/на Linux
(Тестировалось на Fedora Core 3 - FC3)
Если Вам нужно настроить PPPoE соединение на Linux, а именно на Fedora Core, то вы можете запустить специальный скрипт из консоли adsl-setup, который создаст вам интерфейс (если до этого PPPoE соединений не было настроено, то этот интерфейс будет ppp0). Этот скрипт должен присутствовать в системе Fedora Core. У меня он есть.
Следуйте инструкциям - там не сложно.
После создания интерфейса не забудьте поднять его ifup ppp0
Чтобы дополнительно конфигурировать этот интерфейс откройте и редактируйте файл /etc/sysconfig/network-scripts/ifcfg-ppp0
___________________________________
© Ramzaj
Если Вам нужно настроить PPPoE соединение на Linux, а именно на Fedora Core, то вы можете запустить специальный скрипт из консоли adsl-setup, который создаст вам интерфейс (если до этого PPPoE соединений не было настроено, то этот интерфейс будет ppp0). Этот скрипт должен присутствовать в системе Fedora Core. У меня он есть.
Следуйте инструкциям - там не сложно.
После создания интерфейса не забудьте поднять его ifup ppp0
Чтобы дополнительно конфигурировать этот интерфейс откройте и редактируйте файл /etc/sysconfig/network-scripts/ifcfg-ppp0
___________________________________
© Ramzaj
суббота, 31 марта 2007 г.
Как включить форвардинг (forwarding, ip_forwarding, ip_forward)
(Тестировалось на FC3 - Fedora Core 3)
Можно каждый раз при загрузке Linux выполнять команду
echo "1" > /proc/sys/net/ipv4/ip_forward
Но зачем, если есть возможность в настройках указать, что включать форвадинг пакетов операционной системе надо при загрузке.
1. Открываете файл /etc/sysctl.conf
2. Устанавливаете параметр net.ipv4.ip_forward=1
3. Сохраняете файл.
___________________________________
© Ramzaj
Можно каждый раз при загрузке Linux выполнять команду
echo "1" > /proc/sys/net/ipv4/ip_forward
Но зачем, если есть возможность в настройках указать, что включать форвадинг пакетов операционной системе надо при загрузке.
1. Открываете файл /etc/sysctl.conf
2. Устанавливаете параметр net.ipv4.ip_forward=1
3. Сохраняете файл.
___________________________________
© Ramzaj
понедельник, 26 марта 2007 г.
Как отключить SELinux
Кому необходимо это сделать (если уж вдруг ненароком включили) - то делаете так:
1. Открываете файл /etc/sysconfig/selinux
2. Устанавливаете параметр SELinux = disabled
3. Сохраняете изменения файла.
___________________________________
© Ramzaj
1. Открываете файл /etc/sysconfig/selinux
2. Устанавливаете параметр SELinux = disabled
3. Сохраняете изменения файла.
___________________________________
© Ramzaj
понедельник, 12 марта 2007 г.
Резервное копирование Interbase / Firebird и последующее восстановление
Всем известно, что резервное копирование и восстановление из копии баз данных очень полезное занятие (особенно копирование).
Рассмотрим процесс этот процесс для СУБД Firebird (Interbase).
Создание резервной копии:
gbak [-B] [ключи] файл_базы_данных файл_резервной_копии
Значение ключей:
-g не собирать мусор во время резервного копирования;
-l игнорировать лимбо-транзакции;
-m резервирование только метаданных;
-user имя пользователя;
-password пароль пользователя;
-v показать протоколирование во время выполнения процесса;
-z показать версию gbak.
Пример для Linux:
/opt/firebird/bin/gbak -b -user SYSDBA -password masterkey /home/work.gdb /home/backup/work.gbk
Копировать базу данных может только ее владелец (пользователь, который создал базу данных) или пользователь SYSDBA.
Останов и активация базы данных:
Худшим вариантом является восстановление базы данных с резервной копии поверх существующей базы данных в то время, когда с ней работают другие пользователи. Это гарантированно ведет к разрушению базы данных. По этой причине перед восстановлением базы данных с резервной копии необходимо остановить базу данных — перевести ее в состояние shutdown, — выполнить восстановление, а затем сделать базу данных доступной для пользователей.
Останов базы данных можно выполнить при помощи утилиты gfix. Синтаксис останова:
gfix – sh [ ut ] {- at [ tach ] <целое> | - tr [ an ] <целое> | - force <целое>}
Переключатель – attach предотвращает новые соединения с базой.
- tran предотвращает запуск новых транзакций.
- force останавливает базу данных через указанное количество секунд.
В строку также нужно включить имя пользователя (переключатель – user ), пароль (- pa [ ssword ]) и полный путь к первичному файлу базы данных.
Пример :
gfix –sh –force 5 –user SYSDBA –pa masterkey /home/work.gdb
Для перевода базы данных в активное состояние используется gfix – o [ nline ].
Пример :
gfix –online –user SYSDBA –pa masterkey home/work.gdb
Восстановление базы данных:
gbak [-R/-С] [ключи] файл_базы_данных файл_резервной_копии
Ключи:
-R восстановление базы данных в уже существующий файл;
-С восстановление базы данных в новый файл, если файл уже существует,
то процесс будет прерван с ошибкой;
-p размер страницы (1024,2048,4196 или 8192). По умолчанию 1024;
-v задает отображение утилитой протокола выполняемых ею действий.
Пример:
gbak -R -user SYSDBA -password masterkey /home/work.gbk /home/work.gdb
_________________________________________________________
© Ramzaj
Рассмотрим процесс этот процесс для СУБД Firebird (Interbase).
Создание резервной копии:
gbak [-B] [ключи] файл_базы_данных файл_резервной_копии
Значение ключей:
-g не собирать мусор во время резервного копирования;
-l игнорировать лимбо-транзакции;
-m резервирование только метаданных;
-user имя пользователя;
-password пароль пользователя;
-v показать протоколирование во время выполнения процесса;
-z показать версию gbak.
Пример для Linux:
/opt/firebird/bin/gbak -b -user SYSDBA -password masterkey /home/work.gdb /home/backup/work.gbk
Копировать базу данных может только ее владелец (пользователь, который создал базу данных) или пользователь SYSDBA.
Останов и активация базы данных:
Худшим вариантом является восстановление базы данных с резервной копии поверх существующей базы данных в то время, когда с ней работают другие пользователи. Это гарантированно ведет к разрушению базы данных. По этой причине перед восстановлением базы данных с резервной копии необходимо остановить базу данных — перевести ее в состояние shutdown, — выполнить восстановление, а затем сделать базу данных доступной для пользователей.
Останов базы данных можно выполнить при помощи утилиты gfix. Синтаксис останова:
gfix – sh [ ut ] {- at [ tach ] <целое> | - tr [ an ] <целое> | - force <целое>}
Переключатель – attach предотвращает новые соединения с базой.
- tran предотвращает запуск новых транзакций.
- force останавливает базу данных через указанное количество секунд.
В строку также нужно включить имя пользователя (переключатель – user ), пароль (- pa [ ssword ]) и полный путь к первичному файлу базы данных.
Пример :
gfix –sh –force 5 –user SYSDBA –pa masterkey /home/work.gdb
Для перевода базы данных в активное состояние используется gfix – o [ nline ].
Пример :
gfix –online –user SYSDBA –pa masterkey home/work.gdb
Восстановление базы данных:
gbak [-R/-С] [ключи] файл_базы_данных файл_резервной_копии
Ключи:
-R восстановление базы данных в уже существующий файл;
-С восстановление базы данных в новый файл, если файл уже существует,
то процесс будет прерван с ошибкой;
-p размер страницы (1024,2048,4196 или 8192). По умолчанию 1024;
-v задает отображение утилитой протокола выполняемых ею действий.
Пример:
gbak -R -user SYSDBA -password masterkey /home/work.gbk /home/work.gdb
_________________________________________________________
© Ramzaj
пятница, 9 марта 2007 г.
Настройка кеширующего DNS сервера Bind
Ищем в /etc файл named.conf (это файл настроек сервера Bind), открываем его и редактируем.
Вам надо отредактировать несколько разделов для того чтобы сервер Bind стал кеширующим DNS сервером.
11.11.11.1; и 11.11.11.2; это ip адреса DNS серверов Вашего провайдера. Вы можете включать в этот список сколько хотите DNS серверов.
allow-query {192.168.1/24; 127.0.0.1/32;}; - здесь перечислены ip адреса, которым разрешено запрашивать DNS записи у нашего сервера. В данном случае разрешено для компьютеров локальной сети и для процессов самого сервера.
Отрывок из файла named.conf:
options {
directory "/var/named";
forwarders {
11.11.11.1;
11.11.11.2;
};
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
allow-query {192.168.1/24; 127.0.0.1/32;};
/*
* If there is a firewall between you and nameservers you want
* to talk to, you might need to uncomment the query-source
* directive below. Previous versions of BIND always asked
* questions using port 53, but BIND 8.1 uses an unprivileged
* port by default.
*/
// query-source address * port 53;
};
После редактирования не забудьте рестартовать процесс Bind
______________________________________________
© Ramzaj
Вам надо отредактировать несколько разделов для того чтобы сервер Bind стал кеширующим DNS сервером.
11.11.11.1; и 11.11.11.2; это ip адреса DNS серверов Вашего провайдера. Вы можете включать в этот список сколько хотите DNS серверов.
allow-query {192.168.1/24; 127.0.0.1/32;}; - здесь перечислены ip адреса, которым разрешено запрашивать DNS записи у нашего сервера. В данном случае разрешено для компьютеров локальной сети и для процессов самого сервера.
Отрывок из файла named.conf:
options {
directory "/var/named";
forwarders {
11.11.11.1;
11.11.11.2;
};
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
allow-query {192.168.1/24; 127.0.0.1/32;};
/*
* If there is a firewall between you and nameservers you want
* to talk to, you might need to uncomment the query-source
* directive below. Previous versions of BIND always asked
* questions using port 53, but BIND 8.1 uses an unprivileged
* port by default.
*/
// query-source address * port 53;
};
После редактирования не забудьте рестартовать процесс Bind
______________________________________________
© Ramzaj
воскресенье, 25 февраля 2007 г.
Определение VIP-клиентов Squid по логину
Естественно, если у вас прикручена авторизация в SQUID, то вам скорее всего нужно, чтоб кто то обходил ограничения. Например вы и директор. Естественно желательно, чтоб обход ограничений происходил по логину.
Это очень просто.
Добавьте строку:
acl vipusers proxy_auth "/путь/к/файлу/с/vip-логинами"
И потом не забудьте пустить этих пользователей куда хотите, до строки запретов:
http_access allow vipusers
Все готово,олько не забудьте дать команду SQUID для считывания новой конфигурации
squid -k reconfigure
© Ramzaj
Это очень просто.
Добавьте строку:
acl vipusers proxy_auth "/путь/к/файлу/с/vip-логинами"
И потом не забудьте пустить этих пользователей куда хотите, до строки запретов:
http_access allow vipusers
Все готово,олько не забудьте дать команду SQUID для считывания новой конфигурации
squid -k reconfigure
© Ramzaj
понедельник, 19 февраля 2007 г.
MySQL 4.1 и проблемы авторизации
Warning: mysql_connect(): Client does not support authentication protocol requested by server; consider upgrading MySQL client in ....
Ошибка подключения: 1251: Client does not support authentication protocol requested by server; consider upgrading MySQL client
Вот такая штука как то раз после установки MySQL 4.1 выскочила у меня.
Поисковики рулят - потому был найден ответ по адресу http://forums.mysql.com/read.php?11,6400,6731#msg-6731 и выяснено, что был сменен протокол авторизации пользователей.
Для решения проблемы нужно тупо дать SQL-запрос следющего вида:
SET PASSWORD FOR peter@localhost = OLD_PASSWORD('something');
© Ramzaj
Ошибка подключения: 1251: Client does not support authentication protocol requested by server; consider upgrading MySQL client
Вот такая штука как то раз после установки MySQL 4.1 выскочила у меня.
Поисковики рулят - потому был найден ответ по адресу http://forums.mysql.com/read.php?11,6400,6731#msg-6731 и выяснено, что был сменен протокол авторизации пользователей.
Для решения проблемы нужно тупо дать SQL-запрос следющего вида:
SET PASSWORD FOR peter@localhost = OLD_PASSWORD('something');
© Ramzaj
суббота, 27 января 2007 г.
Блокировка баннеров и мультимедиа в Squid
Не буду писать насколько это важно, сами для себя определяйте.
Я выбрал способ, при котором баннер будет заменяться на рисунок размером 1х1, находящимся на веб-сервере в локальной сети (шлюз то у нас на Linux подразумевается).
Итак настройки в squid.conf
acl media urlpath_regex -i "/usr/local/squid/media.lst"
acl banners dstdom_regex -i "/usr/local/squid/banners.lst"
Далее ниже в соответствующем разделе
http_access deny media
http_access deny banners
Еще ниже в соответствующем разделе
deny_info http://192.168.1.1/empty/empty.gif banners
Это для того чтоб вместо баннера показывался прозрачный рисунок
Сами файлы имеют следующий формат
media.lst
(\.3gp$)
(\.3pm$)
(\.asf$)
(\.au$)
(\.avi$)
(\.mid$)
(\.mmf$)
(\.mp.$)
(\.mov$)
(\.mpeg$)
(\.qt$)
(\.ra$)
(\.rm$)
(\.r.m$)
(\.rv$)
(\.wax$)
(\.wav$)
(\.wm$)
(\.wm.$)
(\.wvx$)
banners.lst
(.*bannerbank\.ru.*)
(.*bannercity\.ru.*)
(.*lbn\.ru.*)
(.*adnet\.ru.*)
(.*tbn\.ru.*)
(.*banner\..*)
(.*smi\.ru.*)
(.*sj3\.ru.*)
(.*bannerhouse\.ru.*)
(.*banners\.rambler\.ru.*)
(.*linkexchange\.ru.*)
(.*reklama\.ru.*)
(.*bizlink\.ru.*)
(.*rb\.rfn\.ru.*)
(.*gnezdo\.ru.*)
(.*rotabanner\.dni\.ru.*)
(.*bs\.yandex\.ru.*)
(.*r\.mail\.ru.*)
(.*business\.lbn\.ru.*)
(.*a\.gismeteo\.ru.*)
(.*banner\.rbc\.ru.*)
(.*pics\.rbc\.ru.*)
(.*pics\.utro\.ru.*)
(.*autocontext\.begun\.ru.*)
(.*banner\.job\.ru.*)
(.*ad\.bannerhost\.ru.*)
(.*ad.\.rambler\.ru.*)
* означает повторение элемента любое количество раз, включая ноль
. означает любой символ
© Ramzaj
Я выбрал способ, при котором баннер будет заменяться на рисунок размером 1х1, находящимся на веб-сервере в локальной сети (шлюз то у нас на Linux подразумевается).
Итак настройки в squid.conf
acl media urlpath_regex -i "/usr/local/squid/media.lst"
acl banners dstdom_regex -i "/usr/local/squid/banners.lst"
Далее ниже в соответствующем разделе
http_access deny media
http_access deny banners
Еще ниже в соответствующем разделе
deny_info http://192.168.1.1/empty/empty.gif banners
Это для того чтоб вместо баннера показывался прозрачный рисунок
Сами файлы имеют следующий формат
media.lst
(\.3gp$)
(\.3pm$)
(\.asf$)
(\.au$)
(\.avi$)
(\.mid$)
(\.mmf$)
(\.mp.$)
(\.mov$)
(\.mpeg$)
(\.qt$)
(\.ra$)
(\.rm$)
(\.r.m$)
(\.rv$)
(\.wax$)
(\.wav$)
(\.wm$)
(\.wm.$)
(\.wvx$)
banners.lst
(.*bannerbank\.ru.*)
(.*bannercity\.ru.*)
(.*lbn\.ru.*)
(.*adnet\.ru.*)
(.*tbn\.ru.*)
(.*banner\..*)
(.*smi\.ru.*)
(.*sj3\.ru.*)
(.*bannerhouse\.ru.*)
(.*banners\.rambler\.ru.*)
(.*linkexchange\.ru.*)
(.*reklama\.ru.*)
(.*bizlink\.ru.*)
(.*rb\.rfn\.ru.*)
(.*gnezdo\.ru.*)
(.*rotabanner\.dni\.ru.*)
(.*bs\.yandex\.ru.*)
(.*r\.mail\.ru.*)
(.*business\.lbn\.ru.*)
(.*a\.gismeteo\.ru.*)
(.*banner\.rbc\.ru.*)
(.*pics\.rbc\.ru.*)
(.*pics\.utro\.ru.*)
(.*autocontext\.begun\.ru.*)
(.*banner\.job\.ru.*)
(.*ad\.bannerhost\.ru.*)
(.*ad.\.rambler\.ru.*)
* означает повторение элемента любое количество раз, включая ноль
. означает любой символ
© Ramzaj
понедельник, 22 января 2007 г.
Система аутентификации пользователей Squid
Данная система призвана обеспечить аутентификацию пользователей Squid через базу данных. В моем случае СУБД Firebird, но т.к. используется DBI, то можно использовать любую СУБД, для которой есть соответствующие драйверы.
В базе данных есть только одна таблица USERS.
Почитав комментарии в конфигурационном файле Squid, можно узнать что в принципе внешняя программа для аутентификации должна на выходе выдавать OK в случае успеха или ERR в случае неудачи процесса аутентификации.
Пароли в базе данных в поле PASSWD хранятся в шифрованном виде и их можно только поменять на новые. Добавление и редактирование пользователей осуществляются через веб-интерфейс (выложено будет позже).
А пока вот программа аутентификации, написана на Perl.
#!/usr/bin/perl
use DBI;
$_=<>;
chomp;
($login, $passwd) = split / +/;
$dbh = DBI->connect(
'dbi:InterBase:' .
'dbname=/home/data/squid.gdb;' .
'host=localhost;' .
'ib_charset=win1251;' ,
'SYSDBA',
'masterkey', { RaiseError => 1, AutoCommit => 0 });
$sql = "select passwd from users where login='$login'";
$sth = $dbh->prepare( $sql );
$sth->execute();
@res = $sth->fetchrow_array;
$pass=$res [ 0 ];
$sth->finish();
$dbh->commit();
$dbh->disconnect();
unless($pass) {
print "ERR\n";
} else {
if ($pass eq crypt($passwd, $passwd)) {
print "OK\n";
} else {
print "ERR\n";
}
}
© Ramzaj
В базе данных есть только одна таблица USERS.

Пароли в базе данных в поле PASSWD хранятся в шифрованном виде и их можно только поменять на новые. Добавление и редактирование пользователей осуществляются через веб-интерфейс (выложено будет позже).
А пока вот программа аутентификации, написана на Perl.
#!/usr/bin/perl
use DBI;
$_=<>;
chomp;
($login, $passwd) = split / +/;
$dbh = DBI->connect(
'dbi:InterBase:' .
'dbname=/home/data/squid.gdb;' .
'host=localhost;' .
'ib_charset=win1251;' ,
'SYSDBA',
'masterkey', { RaiseError => 1, AutoCommit => 0 });
$sql = "select passwd from users where login='$login'";
$sth = $dbh->prepare( $sql );
$sth->execute();
@res = $sth->fetchrow_array;
$pass=$res [ 0 ];
$sth->finish();
$dbh->commit();
$dbh->disconnect();
unless($pass) {
print "ERR\n";
} else {
if ($pass eq crypt($passwd, $passwd)) {
print "OK\n";
} else {
print "ERR\n";
}
}
© Ramzaj
Подписаться на:
Сообщения (Atom)