ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 

  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА














     АРХИВ :: Apache-Talk
Apache-Talk mailing list archive (apache-talk@lists.lexa.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[apache-talk] =?koi8-r?B?8sHCz9TBINMgcGlwZSDEzNEgQ0dJ?=



День добрый!

  Вышла непонятная для меня заковырка.
  Если мне нужно вызвать redirect.cgi, который в свою очередь должен
  вызвать другой скрипт и перенаправить его вывод в stdout, то я к
  примеру под шелом могу это проделать несколькими путями:
  (FreeBSD 3.3., Apache 1.3.12 rus)
  1. Используя popen и выдавая через буффер на stdout
  2. Ипользуюя схему vfork -> dup2 -> execv; fdopen
  3. Вызвав без форка exec.

  При запуске redirect.cgi c WWW получаю на выходе содержимое
  мусорного ящика...

  По моему скромному разумению логика вызова у Апача не должна сильно
  отличаться от логики shell (уже похоже ошибаюсь :))
  Вообщем по идее это:

          pipe(2)
            |
          vfork
        /        child.cgi         parent
    |               |
   dup2          fdopen
    |               |
  execv           fgets
    |               |
 printf("%s",)   printf(buf)
    |               |
   exit           exit

В промежутках корректно закрываются все дескрипторы.
Открывается два пайпа.
На стороне  child переопределяются stdout и stdin
parent - просто открывает каждый пайп через fdopen с соответствующими
флагами r,w
-----------------------------
Если я буду запускать CGI, то для него по схеме child будут
переопределены stdin и stdout.

Сам cgi у себя не переопределяет эти потоки.
Переопределяет их child от cgi, а в принципе, как в п.3. может и не
переопределять, так как они пронеслись от самого старшего родителя и
вывод попрет туда.

Дык вот из под апаче я получаю в каждом из трех случаев:
Content-type: text/html 
ELFL_OFFSET_TABLE_d_first_exception_table_matchя%\╓
hл┴ц▀яР┐Гь│ы@╓wс▀]ьЙГU┴еS╩L╓┐=L╓яяЙГU┴еjhщ▒jиэяяjяи■эяяU┴е▀U║p╔
и т.д.

Место сбоя приблизительно обнаружил.
Это чтение из дескриптора информации, которую child отдал в stdout.

В шеле это место работает, а в апаче нет. Как только включаю этот
кусок - "крошиться" весь остальной output cgi. :(

Буду благодарен тому, кто ткнет туда, где можно по данной
"проблеме" почитать или подскажет направление в котором надо искать
решение. :(

С уважением, Alexey V. Meledin <avm@webclub.ru>
InterForge Developers Group,  St-Petersburg, Russia
---------------------------------------------------
> > > > > > "InterForge to Forge Ahead" < < < < < <


=============================================================================
=               Apache-Talk@lists.lexa.ru mailing list                      =
Mail "unsubscribe apache-talk" to majordomo@lists.lexa.ru if you want to quit.
=       Archive avaliable at http://www.lexa.ru/apache-talk                 =



 




Copyright © Lexa Software, 1996-2009.