Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Права дочерних процессов apacha

279
26 ноября 2007 года
bave
456 / / 07.03.2004
Вообщем дело такое у меня все запросы на http сервер обрабатываются cgi-модулями (написанны на С++ и откомпилены).
Соответственно при каждом запросе соответствующий cgi-обработчик запроса запускается как дочерний процесс apach-а.
Когда-то, когда сервер работал под виндой синхронизацию процессов обрабочиков я осуществлял с помошью Mutex-ов. Теперь кога сервер
работает под Linux-ом я для тех же цеоей стал использовать Семафоры и Разделяемую память. Когда я компилирую cgi-модуль и запускаю его
просто как программу (из под root-а) - он нормально и без ошибок выполняется и даже в stdout выдаёт сформированный ответ как надо,
а вот как только захожу на сервер через FireFox (т.е. фактически посылаю запрос на соотв. cgi и он запускается уже не из под root-а
а как дочерний процес от apach-а) тогда этот cgi процесс вылетает с ошибкой... И что примечательно, как только закоментариваю участки кода связанные с записью и удалением share memory так сразу становится всё номально.
-----------------------------------------------------
Я так понимаю у дочерних процессов apach-а нет прав на запись и удаление расшаренной памяти и из-за этого вся проблема. Как эту проблему решить? Т.е. как разрешить этим процессам ну хотябы писать
в расшаренную память...
361
26 ноября 2007 года
Odissey_
661 / / 19.09.2006
Что мешает при формировании общий памяти, задать ей соответствующие права, а не только права суперпользователя? Насколько я знаю shmget вполне это позволяет, и имеет одним из своих параметров как раз права доступа.
279
26 ноября 2007 года
bave
456 / / 07.03.2004
Почему-то не помогло...
Добавил флаги 0x0002 и 0x0004 и результат тотже...
т.е. флаги я сейчас передаю такие: IPC_CREAT|0x0002|0x0004
361
27 ноября 2007 года
Odissey_
661 / / 19.09.2006
Хм, есть же предопределенные значения :
Цитата:
SHM_R Read access for user.
SHM_W Write access for user.
(SHM_R>>3) Read access for group.
(SHM_W>>3) Write access for group.
(SHM_R>>6) Read access for other.
(SHM_W>>6) Write access for other.


или соответствующие для open(2)
... но вроде это тоже самое.
А что пишет strerror(errno) в месте слета? Или вылетает по сигналу? (про отлов и анализ сигналов, темка мелькала в разделе недавно).

502
27 ноября 2007 года
Jail
550 / / 30.01.2007
Привел бы хоть код для начала, или он у тебя шароварез?!
279
27 ноября 2007 года
bave
456 / / 07.03.2004
проблема ещё в том, что пока с отладодочными средствами в Linux не разобрался...
Под виндой я просто влеплял в нужном месте отладочное
прерывание и при выполнении процесса на нужной точке у меня сам запускался отладчик...
279
27 ноября 2007 года
bave
456 / / 07.03.2004
вот сейчас сделал вывод в stdout значение дескриптора
расшаренной памяти и увидел, что если запуск идёт с
apacha то shmget() возвращает -1.
Есть ли в лине чё нибудь типа GetLastError()?

Цитата:
Привел бы хоть код для начала


Ну, всегда пожлайлуста:

 
Код:
m_shmkey = ftok("/srv/www/htdocs/index.cgi", 1);
m_semkey = ftok("/srv/www/htdocs/index.cgi", 2);

m_shmdescr = shmget(m_shmkey, 4, IPC_CREAT|0x0002|0x0004);
m_semdescr = semget(m_semkey, NUMSEM, IPC_CREAT);

m_pShmBuff = (char*)shmat(m_shmdescr, NULL, 0);
(*(int*)m_pShmBuff)++;
279
28 ноября 2007 года
bave
456 / / 07.03.2004
Разобрался в чём была проблема :)
-------------------------------------------------
Я ж первый раз создал share memory из под root-а, а потом когда поменял флаги и перекомпилировал программу, она пыталась создать
share memory по тому же ключу или получить уже созданную, но так как
разделяемая память уже создана - она не пересоздавалась с новыми параметрами :)
- удалил shm и запустился заново - всё зароботало.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог