Столкнулся с такой проблемой: ИИС отказывается запускать скрипт, если он использует функции из user32.dll. Может кто подскажет или ссылку даст на какие-нибудь доки про то, какими длл-ками может пользоваться, а какими — нет скрипт под ИИС5 на 2000ных. В частности наиболее актуален вопрос: может ли такой скрипт слать письма на "чужие" сервера при помощи сокетов?
Здравствуйте konst, Вы писали:
K>Столкнулся с такой проблемой: ИИС отказывается запускать скрипт, если он использует функции из user32.dll. Может кто подскажет или ссылку даст на какие-нибудь доки про то, какими длл-ками может пользоваться, а какими — нет скрипт под ИИС5 на 2000ных. В частности наиболее актуален вопрос: может ли такой скрипт слать письма на "чужие" сервера при помощи сокетов?
Фишка скорее всего в том, что у анонимного юзера нет доступа к каталогу system32, где лежат системные dll'и. В таком случае, ты вообще почти никакие вызовы Win32 API не сможешь использовать. Единственный вариант — просить администраторов сервера дать нужные права.
Здравствуйте Lexey, Вы писали:
L>Фишка скорее всего в том, что у анонимного юзера нет доступа к каталогу system32, где лежат системные dll'и. В таком случае, ты вообще почти никакие вызовы Win32 API не сможешь использовать. Единственный вариант — просить администраторов сервера дать нужные права.
Есть или нет доступа — сейчас сказать не могу, но всё же, кажется есть на чтение и/или запуск точно, т.к. скрипт всё же запускается и работает. Беда просто...что происходит — непонятно...как этот ИИС так работает, ну, вообще не давал бы скрипту работать — понятное дело, но скрипт поработает несколько часиков, а потом отказывается выполнять некоторые действия. Таковых насчитали два: обращение к функциям из "user32.dll" и к сокетам. Т.е. через несколько часов работы при вызове такого кода программа виснет и ИИС её через какой-то таймаут срубает:
socks = socket(AF_INET, SOCK_STREAM, 0);
а до этого проходят WSAStartup и gethostbyname соответственно.
Здравствуйте konst, Вы писали:
K>Есть или нет доступа — сейчас сказать не могу, но всё же, кажется есть на чтение и/или запуск точно, т.к. скрипт всё же запускается и работает. Беда просто...что происходит — непонятно...как этот ИИС так работает, ну, вообще не давал бы скрипту работать — понятное
Тогда мое предположение отменяется.
>дело, но скрипт поработает несколько часиков, а потом отказывается выполнять некоторые действия. Таковых насчитали два: обращение к функциям из "user32.dll" и к сокетам. Т.е. через несколько часов работы при вызове такого кода программа виснет и ИИС её через какой-то таймаут срубает: K>
K>socks = socket(AF_INET, SOCK_STREAM, 0);
K>
K>а до этого проходят WSAStartup и gethostbyname соответственно.
Ошибки в программе (типа различного рода утечек) искать не пробовали?
Здравствуйте Lexey, Вы писали:
L>Ошибки в программе (типа различного рода утечек) искать не пробовали?
Нет ещё, не пробовали
Поищу
Очень похоже на утечки, согласен, только у них на сервере всё тогда должно подвисать или как? Хотя, код этот, что виснет, довольно неплохо проверен...
Здравствуйте konst, Вы писали:
L>>Ошибки в программе (типа различного рода утечек) искать не пробовали?
K>Нет ещё, не пробовали K>Поищу K>Очень похоже на утечки, согласен, только у них на сервере всё тогда должно подвисать или как? Хотя, код этот, что виснет, довольно неплохо проверен...
Нет. IIS позволяет лимитировать ресурсы приложений.
Здравствуйте Lexey, Вы писали:
L>Нет. IIS позволяет лимитировать ресурсы приложений.
Lexey, как я понял, вы хорошо разбираетесь в IIS и веб-программировании. Тогда, начать мне, наверное, надо было с того, что вообще возможно ли CGI-скрипту под IIS и Windows2000:
1) использовать библиотеку сокетов;
2) коннектится к внешним адресам;
3) использовать user32.dll;
4) использовать "свои" dll-ки.
Здравствуйте konst, Вы писали:
K>Здравствуйте Lexey, Вы писали:
L>>Нет. IIS позволяет лимитировать ресурсы приложений.
K>Lexey, как я понял, вы хорошо разбираетесь в IIS и веб-программировании. Тогда, начать
Ну, по крайней мере я так думаю.
мне, наверное, надо было с того, что вообще возможно ли CGI-скрипту под IIS и Windows2000: K>1) использовать библиотеку сокетов; K>2) коннектится к внешним адресам; K>3) использовать user32.dll; K>4) использовать "свои" dll-ки.
Все вполне реально. Можно конечно запретить пункты 1 и 3, настроив права на SYSTEM32 так, что у акаунта, под которым запускается CGI не будет прав на чтение системных библиотек.
2 при большом желании тоже можно запретить, но это уже потребует установки дополнительного ПО
4 тоже можно запретить, поизвращавшись с правами.
Но, по умолчанию такого никто делать скорее всего не станет, ибо все это нафиг не нужно. Достаточно просто ограничить процесс по вычислительным ресурсам и запускать его под каким-нибудь бесправным акаунтом, чтобы он не мог напакостить в системе.
Здравствуйте Lexey, Вы писали:
L>Но, по умолчанию такого никто делать скорее всего не станет, ибо все это нафиг не нужно. Достаточно просто ограничить процесс по вычислительным ресурсам и запускать его под каким-нибудь бесправным акаунтом, чтобы он не мог напакостить в системе.
Так и есть, никаких необычных настроек IIS-а наши хостеры не применяют и никакого особенного софта.
Спасибо, Lexey, за твои ответы. По крайней мере мне стало ясно, чего надо ожидать и скорее всего надо искать какой-то неочевидный баг...
Здравствуйте konst, Вы писали:
K>Здравствуйте Lexey, Вы писали:
L>>Нет. IIS позволяет лимитировать ресурсы приложений.
K>Lexey, как я понял, вы хорошо разбираетесь в IIS и веб-программировании. Тогда, начать мне, наверное, надо было с того, что вообще возможно ли CGI-скрипту под IIS и Windows2000:
зачем CGI когда под IIS нужно писать ISAPI?
ISAPI гораздо производительней ибо использует мультипоточность. также можно(и нужно) настроить уровень изоляции чтобы ISAPI DLL запускалась в отдельном процессе. тогда при критической ошибке DLL не будет валить весь IIS. хотя для отладки удобнее запускать dll внутри inetinfo.exe