Jump to content
php.lv forumi

AddHandler priekš DOS aplikācijas


Recommended Posts

Ir viena DOS aplikācija (*.com), kura, principā, izvada vienu teksta rindu uz ekrāna. Mēģinu to palaist caur cgi-bin - izmet 500 Internal server error. errror.log > Access is denied. : couldn't create child process: 720005. Cik sapratu, iekš .htassecc ir jāierakstā

AddHandler *** .com

bet ko tieši ir jāierakstā?

Link to comment
Share on other sites

Gadījumā Apache nedarbini zem Windows Vista/7? Jo zem tiem 16-bitu aplikācijas palaist nevar.

Vēl varētu būt tāda lieta, ka procesi, kurus laiž Apache, tiek palaisti ar tādu WinAPI funkcionalitāti, kas atļauj laist tikai 32/64-bitu softu, nevis aizvēsturisku 16-bitu. Tāpēc arī tas nepalaižās. Šim workarounds būtu uztaisīt mazu 32-bitu exe wraperīti, kas palaiž to com failu kā savu child procesu.

Link to comment
Share on other sites

Man šķiet, kā jau bubu teica, ka nāksies taisīt wraperi - izsaukt to com no exe. Sen atpakaļ spēlējoties ar dažādiem cgi backendiem, atminos, ka kaut-kādi executabļi apacim nepatika (šķiet, ka vajadzēja win32 exe? Bet nu tas bija sen, un detaļas jau vairs neatminos). Vēl var paskatīties (mazums kas, varbūt tomēr?) vai tas com vispār padod Content-type: headeri un \n\n?

Link to comment
Share on other sites

Nu izprovēju visu, pārkompilēju source, kā win32 console application - tagad error logā ir

 

Premature end of script headers

httpd.conf:

<Directory "F:/AppServ/www/cgi-bin">
   AllowOverride None
   Options None
   Order allow,deny
   Allow from all
   Options +ExecCGI
   AddHandler cgi-script .exe
</Directory>

Pati aplikācija:

      
entry start
     include 'win32a.inc'

section '.data' data readable writeable
     hello_msg db 'Content-Type: text/html\n\n'
               db 0

section '.code' code readable executable
start:
     ccall [printf],hello_msg
     stdcall [ExitProcess],0

section '.idata' import data readable
     library kernel,'kernel32.dll',\
     msvcrt,'msvcrt.dll'
     import kernel,\
     ExitProcess,'ExitProcess'
     import msvcrt,\
     printf,'printf',\
     getchar,'_fgetchar'  

Aplikācija strādā. Kādam ir idejas?

 

P. S. Vēl atradu iekš error.log:

PHP Warning: PHP Startup: Unable to load dynamic library 'F:/AppServ\\php5\\ext\\php_exif.dll' - The specified module could not be found.\r\n in Unknown on line 0

Tas ierakstās uzreiz pēc httpd palaišanas.

Link to comment
Share on other sites

To koku ģenerē pats Apache, meklējot extensions. Pats extension ir ierakstīts iekš php.ini:

extension=php_exif.dll

Ceļš uz ext ir definēts turpat:

extension_dir = "F:/AppServ\php5\ext"

Samainīju pirmo slash pret \ - tāds pats error. Ar citiem extensions viss kārtībā, un fails faktiski eksistē.

Link to comment
Share on other sites

Vai \n\n reāli pārtop par new-line? Pasties ar kādu hexview no komandrindas app.exe > log

 

Tas php_exif.dll dikti ir vajadzīgs? Gan jau ka neatrod kādu dēli..

 

extension_dir = "F:\\AppServ\\php5\\ext"

vai

extension_dir = "F:/AppServ/php5/ext"

 

Vēl ienāca prātā \n\n vietā pamēģini \r\n\r\n

Edited by marrtins
Link to comment
Share on other sites

marrtins, tu tak esi ģenijs!

Nez kāpēc es domāju, ka browserim pašam ir jāsaprot, ka \n ir new line, neskatījos, ka tie \n arī tiek izvadīti konsolē :)

Beigu variants:

hello_msg db 'Content-Type: text/html', 0x0A, 0x0A
               db '<h1>It workZ!</h1>'
               db 0

Windas kernelis tos 0x0A pats konvertē uz 0x0D, 0x0A. Rezultātā sanāk new line.

 

Paldies!

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...