Link to home
Start Free TrialLog in
Avatar of kashirmerwe
kashirmerwe

asked on

Cgi related problem

I am on windows with Apache2 server. I am trying to run perl and python scripts from my cgi folder but I get access forbidden. I hope someone can help me out here.  This is how my httpd.conf looks like:

 ScriptAlias /cgi-bin/ "D:/xampp/htdocs/cgi-bin/"

AddHandler cgi-script .cgi .pl .exe .py
<Directory  "D:/xampp/htdocs/cgi-bin/">
 Options +ExecCGI
    Allow from all
</Directory>
Avatar of Fairlight2cx
Fairlight2cx
Flag of United States of America image

In the directory section, try adding:

Order allow,deny

Add it as a line above the Allow from all.
Avatar of kashirmerwe
kashirmerwe

ASKER

Problem persist. This is my error log

[Fri Jul 24 12:00:12 2009] [error] [client 127.0.0.1]   File "D:\\xampp\\htdocs\\cgi-bin\\test.py", line 62\r
[Fri Jul 24 12:00:12 2009] [error] [client 127.0.0.1]     print "\\n[!] Message Sent Successfully" \r
[Fri Jul 24 12:00:12 2009] [error] [client 127.0.0.1]                                           ^\r
[Fri Jul 24 12:00:12 2009] [error] [client 127.0.0.1] SyntaxError: invalid syntax\r
[Fri Jul 24 12:00:27 2009] [error] [client 127.0.0.1] Premature end of script headers: test.py
[Fri Jul 24 12:00:27 2009] [error] [client 127.0.0.1]   File "D:\\xampp\\htdocs\\cgi-bin\\test.py", line 62\r
[Fri Jul 24 12:00:27 2009] [error] [client 127.0.0.1]     print "\\n[!] Message Sent Successfully" \r
[Fri Jul 24 12:00:27 2009] [error] [client 127.0.0.1]                                           ^\r
[Fri Jul 24 12:00:27 2009] [error] [client 127.0.0.1] SyntaxError: invalid syntax\r
Looks like the problem is not in apache, but rather in your python script.  It seems to be trying to execute your script.

Premature end of script headers generally indicates you have not sent a MIME Content-Type header, but have sent output--or gotten an error.

Try making the very first thing the script does be to output:

Content-Type: text/plain

And a blank line after that to end the headers.
#!c:/perl/bin/perl.exe
print("Content-Type: text/html\n\n");

print("Hello world!\n");
exit 0

I tried the above code. Same problem here. This is my error log:

[Fri Jul 24 12:05:33 2009] [error] [client 127.0.0.1] Premature end of script headers: see.pl
[Fri Jul 24 12:16:54 2009] [error] [client 127.0.0.1] Premature end of script headers: see.pl
[Fri Jul 24 12:40:38 2009] [error] [client 127.0.0.1] attempt to invoke directory as script: D:/xampp/htdocs/cgi-bin/
I run the above script in command line and there was no error! What I received was Hello World!

Expecting your prompt response
Still struggling with it. Anyone here to assist?
The directory should not end in a slash.  So, instead of this:
    <Directory  "D:/xampp/htdocs/cgi-bin/">
Try this:
    <Directory  "D:/xampp/htdocs/cgi-bin">
I removed the slash and restarted my apache web server, but the error remains.

This is how my system is structured, my apache resides in drive D: and both activestate and python30 interpreters are located in drive C: do you think that might have caused the problem?
Is c:/perl/bin/perl.exe the correct path to your perl.exe?
Is there anything else in your error log?  
c:\perl\bin\perl.exe is my correct path to perl.exe and there is nothing else in my error log
I dont know if am the only one experiencing this problem. But it really kicking me
You know, you said you're running Apache 2.  Thing is, you also said, "My httpd.conf looks like [...]."

I have yet to see an install of Apache 2.x that utilises only the main httpd.conf.  They entirely redid the configuration system from 1.3 to 2.x.  It's based largely on includes from conf.d and vhosts.d in the distributions I've worked with.

I'm wondering if you've actually got the ScriptAlias and Directory sections in the right place in the configuration, attached to the right host/virtualhost and port.

Doublecheck where you have these placed.

Incidentally, and it probably has no bearing on the issue, but I'd add -Indexes to the Options.  I've never seen a production system without the CGI directory having both +ExecCGI and -Indexes.
this is everything that I have in httpd.conf
#
# This is the main Apache HTTP server configuration file.  It contains the
# configuration directives that give the server its instructions.
# See <URL:http://httpd.apache.org/docs/2.2/> for detailed information.
# In particular, see 
# <URL:http://httpd.apache.org/docs/2.2/mod/directives.html>
# for a discussion of each configuration directive.
#
# Do NOT simply read the instructions in here without understanding
# what they do.  They're here only as hints or reminders.  If you are unsure
# consult the online docs. You have been warned.  
#
# Configuration and logfile names: If the filenames you specify for many
# of the server's control files begin with "/" (or "drive:/" for Win32), the
# server will use that explicit path.  If the filenames do *not* begin
# with "/", the value of ServerRoot is prepended -- so "logs/foo.log"
# with ServerRoot set to "D:/xampp/apache" will be interpreted by the
# server as "D:/xampp/apache/logs/foo.log".
#
# NOTE: Where filenames are specified, you must use forward slashes
# instead of backslashes (e.g., "c:/apache" instead of "c:\apache").
# If a drive letter is omitted, the drive on which Apache.exe is located
# will be used by default.  It is recommended that you always supply
# an explicit drive letter in absolute paths, however, to avoid
# confusion.
#
 
# ThreadsPerChild: constant number of worker threads in the server process
# MaxRequestsPerChild: maximum  number of requests a server process serves
ThreadsPerChild 250
MaxRequestsPerChild  0
 
#
# ServerRoot: The top of the directory tree under which the server's
# configuration, error, and log files are kept.
#
# Do not add a slash at the end of the directory path.  If you point
# ServerRoot at a non-local disk, be sure to point the LockFile directive
# at a local disk.  If you wish to share the same ServerRoot for multiple
# httpd daemons, you will need to change at least LockFile and PidFile.
#
ServerRoot "D:/xampp/apache"
 
#
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to 
# prevent Apache from glomming onto all bound IP addresses (0.0.0.0)
#
#Listen 12.34.56.78:80
Listen 80
 
#
# Dynamic Shared Object (DSO) Support
#
# To be able to use the functionality of a module which was built as a DSO you
# have to place corresponding `LoadModule' lines at this location so the
# directives contained in it are actually available _before_ they are used.
# Statically compiled modules (those listed by `httpd -l') do not need
# to be loaded here.
#
# Example:
# LoadModule foo_module modules/mod_foo.so
#
LoadModule actions_module modules/mod_actions.so
LoadModule alias_module modules/mod_alias.so
LoadModule asis_module modules/mod_asis.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_alias_module modules/mod_authn_alias.so
LoadModule authn_anon_module modules/mod_authn_anon.so
LoadModule authn_dbd_module modules/mod_authn_dbd.so
LoadModule authn_dbm_module modules/mod_authn_dbm.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authn_file_module modules/mod_authn_file.so
#LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
LoadModule authz_dbm_module modules/mod_authz_dbm.so
LoadModule authz_default_module modules/mod_authz_default.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_host_module modules/mod_authz_host.so
#LoadModule authz_owner_module modules/mod_authz_owner.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule cache_module modules/mod_cache.so
#LoadModule disk_cache_module modules/mod_disk_cache.so
#LoadModule file_cache_module modules/mod_file_cache.so
LoadModule mem_cache_module modules/mod_mem_cache.so
LoadModule cern_meta_module modules/mod_cern_meta.so
LoadModule charset_lite_module modules/mod_charset_lite.so
LoadModule cgi_module modules/mod_cgi.so
LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule dir_module modules/mod_dir.so
#LoadModule dumpio_module modules/mod_dumpio.so
LoadModule env_module modules/mod_env.so
LoadModule expires_module modules/mod_expires.so
LoadModule ext_filter_module modules/mod_ext_filter.so
LoadModule headers_module modules/mod_headers.so
LoadModule ident_module modules/mod_ident.so
#LoadModule imagemap_module modules/mod_imagemap.so
LoadModule include_module modules/mod_include.so
LoadModule info_module modules/mod_info.so
LoadModule isapi_module modules/mod_isapi.so
LoadModule ldap_module modules/mod_ldap.so
#LoadModule logio_module modules/mod_logio.so
LoadModule log_config_module modules/mod_log_config.so
#LoadModule log_forensic_module modules/mod_log_forensic.so
LoadModule mime_module modules/mod_mime.so
LoadModule mime_magic_module modules/mod_mime_magic.so
LoadModule negotiation_module modules/mod_negotiation.so
#LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
#LoadModule proxy_connect_module modules/mod_proxy_connect.so
#LoadModule proxy_http_module modules/mod_proxy_http.so
#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule speling_module modules/mod_speling.so
LoadModule status_module modules/mod_status.so
LoadModule unique_id_module modules/mod_unique_id.so
#LoadModule userdir_module modules/mod_userdir.so
LoadModule usertrack_module modules/mod_usertrack.so
#LoadModule version_module modules/mod_version.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule ssl_module modules/mod_ssl.so
 
#LoadModule autoindex_color_module modules/mod_autoindex_color.so
#LoadModule mysql_auth_module modules/mod_auth_mysql.so
#LoadModule auth_remote_module modules/mod_auth_remote.so
#LoadModule sspi_auth_module modules/mod_auth_sspi.so
#LoadModule log_sql_module modules/mod_log_sql.so
#LoadModule log_sql_mysql_module modules/mod_log_sql_mysql.so
#<IfModule ssl_module>
#    LoadModule log_sql_ssl_module modules/mod_log_sql_ssl.so
#</IfModule>
#LoadModule proxy_html_module modules/mod_proxy_html.so
#LoadModule xmlns_module modules/mod_xmlns.so
#LoadModule proxy_xml_module modules/mod_proxy_xml.so
#LoadModule bw_module modules/mod_bw.so
 
### SVN from XAMPP devel package ###
#LoadModule dav_svn_module modules/mod_dav_svn.so
#LoadModule authz_svn_module modules/mod_authz_svn.so
 
# 'Main' server configuration
#
# The directives in this section set up the values used by the 'main'
# server, which responds to any requests that aren't handled by a
# <VirtualHost> definition.  These values also provide defaults for
# any <VirtualHost> containers you may define later in the file.
#
# All of these directives may appear inside <VirtualHost> containers,
# in which case these default settings will be overridden for the
# virtual host being defined.
#
 
#
# ServerAdmin: Your address, where problems with the server should be
# e-mailed.  This address appears on some server-generated pages, such
# as error documents.  e.g. admin@your-domain.com
#
ServerAdmin admin@localhost
 
#
# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify
# it explicitly to prevent problems during startup.
#
# If your host doesn't have a registered DNS name, enter its IP address here.
#
ServerName localhost:80
 
#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "D:/xampp/htdocs"
 
#
# Each directory to which Apache has access can be configured with respect
# to which services and features are allowed and/or disabled in that
# directory (and its subdirectories). 
#
# First, we configure the "default" to be a very restrictive set of 
# features.  
#
<Directory />
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
</Directory>
 
#
# Note that from this point forward you must specifically allow
# particular features to be enabled - so if something's not working as
# you might expect, make sure that you have specifically enabled it
# below.
#
 
#
# This should be changed to whatever you set DocumentRoot to.
#
<Directory "D:/xampp/htdocs">
    #
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important.  Please see
    # http://httpd.apache.org/docs/2.2/mod/core.html#options
    # for more information.
    #
    Options Indexes FollowSymLinks Includes ExecCGI
   
    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   Options FileInfo AuthConfig Limit
    #
    AllowOverride All
 
    #
    # Controls who can get stuff from this server.
    #
    Order allow,deny
    Allow from all
 
</Directory>
 
#
# DirectoryIndex: sets the file that Apache will serve if a directory
# is requested.
#
<IfModule dir_module>
    DirectoryIndex index.cgi index.php index.php4 index.php3 index.pl index.html index.htm index.shtml index.phtml
</IfModule>
 
#
# The following lines prevent .htaccess and .htpasswd files from being 
# viewed by Web clients. 
#
<FilesMatch "^\.ht">
    Order allow,deny
    Deny from all
</FilesMatch>
 
#
# ErrorLog: The location of the error log file.
# If you do not specify an ErrorLog directive within a <VirtualHost>
# container, error messages relating to that virtual host will be
# logged here.  If you *do* define an error logfile for a <VirtualHost>
# container, that host's errors will be logged there and not here.
#
ErrorLog logs/error.log
 
#
# LogLevel: Control the number of messages logged to the error_log.
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
#
LogLevel warn
 
<IfModule log_config_module>
    #
    # The following directives define some format nicknames for use with
    # a CustomLog directive (see below).
    #
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common
 
    <IfModule logio_module>
      # You need to enable mod_logio.c to use %I and %O
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>
 
    #
    # The location and format of the access logfile (Common Logfile Format).
    # If you do not define any access logfiles within a <VirtualHost>
    # container, they will be logged here.  Contrariwise, if you *do*
    # define per-<VirtualHost> access logfiles, transactions will be
    # logged therein and *not* in this file.
    #
    CustomLog logs/access.log common
 
    #
    # If you prefer a logfile with access, agent, and referer information
    # (Combined Logfile Format) you can use the following directive.
    #
    #CustomLog logs/access.log combined
</IfModule>
 
<IfModule alias_module>
    #
    # Redirect: Allows you to tell clients about documents that used to 
    # exist in your server's namespace, but do not anymore. The client 
    # will make a new request for the document at its new location.
    # Example:
    # Redirect permanent /foo http://www.example.com/bar
 
    #
    # Alias: Maps web paths into filesystem paths and is used to
    # access content that does not live under the DocumentRoot.
    # Example:
    # Alias /webpath /full/filesystem/path
    #
    # If you include a trailing / on /webpath then the server will
    # require it to be present in the URL.  You will also likely
    # need to provide a <Directory> section to allow access to
    # the filesystem path.
 
    #
    # ScriptAlias: This controls which directories contain server scripts. 
    # ScriptAliases are essentially the same as Aliases, except that
    # documents in the target directory are treated as applications and
    # run by the server when requested rather than as documents sent to the
    # client.  The same rules about trailing "/" apply to ScriptAlias
    # directives as to Alias.
    #
    
</IfModule>
 
#
# "D:/xampp/cgi-bin" should be changed to whatever your ScriptAliased
# CGI directory exists, if you have that configured.
#
 ScriptAlias /cgi-bin/ "D:/xampp/htdocs/cgi-bin/"
 
AddHandler cgi-script .cgi .pl .exe .py
<Directory  "D:/xampp/htdocs/cgi-bin">
 Options +ExecCGI
 Order allow,deny
    Allow from all
</Directory>
 
 
# 
# Apache parses all CGI scripts for the shebang line by default.
# This comment line, the first line of the script, consists of the symbols
# pound (#) and exclamation (!) followed by the path of the program that 
# can execute this specific script.  For a perl script, with perl.exe in
# the C:\Program Files\Perl directory, the shebang line should be:
 
   #!c:/Python30/python.exe
   #!c:/perl/bin/perl.exe
 
# Note you _must_not_ indent the actual shebang line, and it must be the
# first line of the file.  Of course, CGI processing must be enabled by 
# the appropriate ScriptAlias or Options ExecCGI directives for the files 
# or directory in question.
#
# However, Apache on Windows allows either the Unix behavior above, or can
# use the Registry to match files by extention.  The command to execute 
# a file of this type is retrieved from the registry by the same method as 
# the Windows Explorer would use to handle double-clicking on a file.
# These script actions can be configured from the Windows Explorer View menu, 
# 'Folder Options', and reviewing the 'File Types' tab.  Clicking the Edit
# button allows you to modify the Actions, of which Apache 1.3 attempts to
# perform the 'Open' Action, and failing that it will try the shebang line.
# This behavior is subject to change in Apache release 2.0.
#
# Each mechanism has it's own specific security weaknesses, from the means
# to run a program you didn't intend the website owner to invoke, and the
# best method is a matter of great debate.
#
# To enable the this Windows specific behavior (and therefore -disable- the
# equivilant Unix behavior), uncomment the following directive:
#
ScriptInterpreterSource registry
#
# The directive above can be placed in individual <Directory> blocks or the
# .htaccess file, with either the 'registry' (Windows behavior) or 'script' 
# (Unix behavior) option, and will override this server default option.
#
 
#
# DefaultType: the default MIME type the server will use for a document
# if it cannot otherwise determine one, such as from filename extensions.
# If your server contains mostly text or HTML documents, "text/plain" is
# a good value.  If most of your content is binary, such as applications
# or images, you may want to use "application/octet-stream" instead to
# keep browsers from trying to display binary files as though they are
# text.
#
DefaultType text/plain
 
<IfModule mime_module>
    #
    # TypesConfig points to the file containing the list of mappings from
    # filename extension to MIME-type.
    #
    TypesConfig conf/mime.types
 
    #
    # AddType allows you to add to or override the MIME configuration
    # file specified in TypesConfig for specific file types.
    #
    #AddType application/x-gzip .tgz
    #
    # AddEncoding allows you to have certain browsers uncompress
    # information on the fly. Note: Not all browsers support this.
    #
    #AddEncoding x-compress .Z
    #AddEncoding x-gzip .gz .tgz
    #
    # If the AddEncoding directives above are commented-out, then you
    # probably should define those extensions to indicate media types:
    #
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
 
    #
    # AddHandler allows you to map certain file extensions to "handlers":
    # actions unrelated to filetype. These can be either built into the server
    # or added with the Action directive (see below)
    #
    # To use CGI scripts outside of ScriptAliased directories:
    # (You will also need to add "ExecCGI" to the "Options" directive.)
    #
    AddHandler cgi-script .cgi .py .pl
 
    # For files that include their own HTTP headers:
    #AddHandler send-as-is asis
 
    # For server-parsed imagemap files:
    #AddHandler imap-file map
 
    # For type maps (negotiated resources):
    #AddHandler type-map var
 
    #
    # Filters allow you to process content before it is sent to the client.
    #
    # To parse .shtml files for server-side includes (SSI):
    # (You will also need to add "Includes" to the "Options" directive.)
    #
   AddType text/html .shtml
   AddOutputFilter INCLUDES .shtml
</IfModule>
 
#
# The mod_mime_magic module allows the server to use various hints from the
# contents of the file itself to determine its type.  The MIMEMagicFile
# directive tells the module where the hint definitions are located.
#
#MIMEMagicFile conf/magic
 
#
# Customizable error responses come in three flavors:
# 1) plain text 2) local redirects 3) external redirects
#
# Some examples:
#ErrorDocument 500 "The server made a boo boo."
#ErrorDocument 404 /missing.html
#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
#ErrorDocument 402 http://www.example.com/subscription_info.html
#
 
#
# EnableMMAP and EnableSendfile: On systems that support it, 
# memory-mapping or the sendfile syscall is used to deliver
# files.  This usually improves server performance, but must
# be turned off when serving from networked-mounted 
# filesystems or if support for these functions is otherwise
# broken on your system.
#
EnableMMAP off
EnableSendfile off
 
# Supplemental configuration
#
# The configuration files in the conf/extra/ directory can be 
# included to add extra features or to modify the default configuration of 
# the server, or you may simply copy their contents here and change as 
# necessary.
 
# XAMPP specific settings
Include conf/extra/httpd-xampp.conf
 
# Server-pool management (MPM specific)
# Include conf/extra/httpd-mpm.conf
 
# Multi-language error messages
Include conf/extra/httpd-multilang-errordoc.conf
 
# Fancy directory listings
Include conf/extra/httpd-autoindex.conf
 
# Language settings
Include conf/extra/httpd-languages.conf
 
# User home directories
Include conf/extra/httpd-userdir.conf
 
# Real-time info on requests and configuration
Include conf/extra/httpd-info.conf
 
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
 
# Local access to the Apache HTTP Server Manual
Include conf/extra/httpd-manual.conf
 
# Distributed authoring and versioning (WebDAV)
Include conf/extra/httpd-dav.conf
 
# Various default settings
Include conf/extra/httpd-default.conf
 
# Secure (SSL/TLS) connections
Include conf/extra/httpd-ssl.conf
 
#
# Note: The following must must be present to support
#       starting without SSL on platforms with no /dev/random equivalent
#       but a statically compiled-in mod_ssl.
#
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>

Open in new window

Can you retry your perl script?  These "see .pl" entries look a little iffy to me.  Like you're possibly not using the correct URL to reach your script:  Your errors relating to the python script look like you're using the right URL but that there's a problem with the script.  Can you temporarily change your python test.py script to:

print "Content-type: text/html\n\n"
print "hello"

Either that or post your test.py script so we can see what the error may be (if there is one).
I'd like to see the actual URLs being called.
I created a folder in my root directory "cgi-bin" and I have the following files

see.pl
test.py

I start my apache from the control panel and visit the below URL

http://localhost/cgi-bin/test.py 
------------------------------------------------
Error message:
Premature end of script headers: test.py
--------------------------------------------------

http://localhost/cgi-bin/see.pl
----------------------------------------------
Loading forever without output
----------------------------------------


This is what I have in my error log when I tried the above URL's

[Fri Jul 24 20:15:44 2009] [error] [client 127.0.0.1] Premature end of script headers: test.py
[Fri Jul 24 20:15:44 2009] [error] [client 127.0.0.1]   File "D:\\xampp\\htdocs\\cgi-bin\\test.py", line 62\r
[Fri Jul 24 20:15:44 2009] [error] [client 127.0.0.1]     print "\\n[!] Message Sent Successfully" \r
[Fri Jul 24 20:15:44 2009] [error] [client 127.0.0.1]                                           ^\r
[Fri Jul 24 20:15:44 2009] [error] [client 127.0.0.1] SyntaxError: invalid syntax\r
[Fri Jul 24 20:16:11 2009] [error] [client 127.0.0.1] Premature end of script headers: test.py
[Fri Jul 24 20:16:11 2009] [error] [client 127.0.0.1]   File "D:\\xampp\\htdocs\\cgi-bin\\test.py", line 2\r
[Fri Jul 24 20:16:11 2009] [error] [client 127.0.0.1]     print "Content-type: text/html\\n\\n"\r
[Fri Jul 24 20:16:11 2009] [error] [client 127.0.0.1]                                       ^\r
[Fri Jul 24 20:16:11 2009] [error] [client 127.0.0.1] SyntaxError: invalid syntax\r
[Fri Jul 24 20:21:20 2009] [error] [client 127.0.0.1] Premature end of script headers: test.py
[Fri Jul 24 20:21:20 2009] [error] [client 127.0.0.1]   File "D:\\xampp\\htdocs\\cgi-bin\\test.py", line 1\r
[Fri Jul 24 20:21:20 2009] [error] [client 127.0.0.1]     print "Content-type: text/html\\n\\n"\r
[Fri Jul 24 20:21:20 2009] [error] [client 127.0.0.1]                                       ^\r
[Fri Jul 24 20:21:20 2009] [error] [client 127.0.0.1] SyntaxError: invalid syntax\r
[Fri Jul 24 20:21:22 2009] [error] [client 127.0.0.1] Premature end of script headers: test.py
[Fri Jul 24 20:21:22 2009] [error] [client 127.0.0.1]   File "D:\\xampp\\htdocs\\cgi-bin\\test.py", line 1\r
[Fri Jul 24 20:21:22 2009] [error] [client 127.0.0.1]     print "Content-type: text/html\\n\\n"\r
[Fri Jul 24 20:21:22 2009] [error] [client 127.0.0.1]                                       ^\r
[Fri Jul 24 20:21:22 2009] [error] [client 127.0.0.1] SyntaxError: invalid syntax\r

Open in new window

someone to help please?
Avatar of FishMonger
First possible issue I see is that you have cgi-bin as a subdir of htdocs.  They should be at the same level.

Try changing it to:
AddHandler cgi-script .cgi .pl .exe .py
 
ScriptAlias /cgi-bin/ "D:/xampp/cgi-bin/"
 
<Directory "D:/xampp/cgi-bin">
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
</Directory>

Open in new window

ScriptAlias /cgi-bin/ "D:/xampp/cgi-bin/"

I forgot...drop the trailing / like so:

ScriptAlias /cgi-bin/ "D:/xampp/cgi-bin"

Open in new window

I tried the above exactly. This is the result:

This is my URL: http://localhost/cgi-bin/test.py
The script in the file looks like this:

print "Content-type: text/html\n\n"
print "hello"

The output on my browser:
-------------------------------------------------------------------
Access forbidden!

You don't have permission to access the requested object. It is either read-protected or not readable by the server.
--------------------------------------------------------------------

Error Log:


[Sat Jul 25 22:56:54 2009] [notice] Server built: Dec 10 2008 00:10:06
[Sat Jul 25 22:56:54 2009] [notice] Parent: Created child process 8104
[Sat Jul 25 22:56:56 2009] [notice] Digest: generating secret for digest authentication ...
[Sat Jul 25 22:56:56 2009] [notice] Digest: done
[Sat Jul 25 22:56:57 2009] [notice] Child 8104: Child process is running
[Sat Jul 25 22:56:57 2009] [notice] Child 8104: Acquired the start mutex.
[Sat Jul 25 22:56:57 2009] [notice] Child 8104: Starting 250 worker threads.
[Sat Jul 25 22:56:57 2009] [notice] Child 8104: Starting thread to listen on port 443.
[Sat Jul 25 22:56:57 2009] [notice] Child 8104: Starting thread to listen on port 80.
[Sat Jul 25 22:56:57 2009] [error] [client 127.0.0.1] client denied by server configuration: D:/xampp/cgi-bintest.py

Open in new window

What is the ownership and permission settings for the cgi-bin dir and scripts?

client denied by server configuration: D:/xampp/cgi-bintest.py

There's a missing / between the dir and the filename.  Is that a copy/paste error, or is that how you entered it in the browser?
i.e, did you enter this: http://localhost/cgi-bintest.py
I just noticed an error in my second post (ID:24942941), so disregard it and set the config as is in my first post.
I have ignored your second post and added the slash (I believe that what you meant) This is the error I got

Server error!

The server encountered an internal error and was unable to complete your request.

Error message:
Premature end of script headers: test.py

The below is my error log
[Sun Jul 26 00:55:10 2009] [notice] Digest: generating secret for digest authentication ...
[Sun Jul 26 00:55:10 2009] [notice] Digest: done
[Sun Jul 26 00:55:11 2009] [notice] Apache/2.2.11 (Win32) DAV/2 mod_ssl/2.2.11 OpenSSL/0.9.8i PHP/5.2.9 configured -- resuming normal operations
[Sun Jul 26 00:55:11 2009] [notice] Server built: Dec 10 2008 00:10:06
[Sun Jul 26 00:55:11 2009] [notice] Parent: Created child process 7628
[Sun Jul 26 00:55:13 2009] [notice] Digest: generating secret for digest authentication ...
[Sun Jul 26 00:55:13 2009] [notice] Digest: done
[Sun Jul 26 00:55:15 2009] [notice] Child 7628: Child process is running
[Sun Jul 26 00:55:15 2009] [notice] Child 7628: Acquired the start mutex.
[Sun Jul 26 00:55:15 2009] [notice] Child 7628: Starting 250 worker threads.
[Sun Jul 26 00:55:15 2009] [notice] Child 7628: Starting thread to listen on port 80.
[Sun Jul 26 00:55:15 2009] [notice] Child 7628: Starting thread to listen on port 443.
[Sun Jul 26 00:55:18 2009] [error] [client 127.0.0.1] Premature end of script headers: test.py
[Sun Jul 26 00:55:18 2009] [error] [client 127.0.0.1]   File "D:\\xampp\\cgi-bin\\test.py", line 1\r
[Sun Jul 26 00:55:18 2009] [error] [client 127.0.0.1]     print "Content-type: text/html\\n\\n"\r
[Sun Jul 26 00:55:18 2009] [error] [client 127.0.0.1]                                       ^\r
[Sun Jul 26 00:55:18 2009] [error] [client 127.0.0.1] SyntaxError: invalid syntax\r

Open in new window

Do you get the same error when calling a Perl script?

Try this Perl script.
#!/usr/bin/perl
 
print "Content-type:text/html\n\n";
print "hello world";

Open in new window

The .pl extension didnt output anything! The browser was forever loading - Nothing got displayed
This is the error log
[Sun Jul 26 01:24:34 2009] [error] [client 127.0.0.1] Premature end of script headers: see.pl
[Sun Jul 26 01:25:01 2009] [error] [client 127.0.0.1] Premature end of script headers: see.pl

Open in new window

Do you have a file type association configured for the .pl extension?

Try changing the shebang line to point to perl.exe.

maybe:
#!c:/perl/bin/perl.exe
I have done that, same problem. I have this quick question, My web server resides in D:\ drive while the Perl and Python installation folders are place in C:\ drive respectively! I hope this is not the cause of the problem.  

More so, the cgi-bin folder where the files are saved is not placed in the htdocs directory. There is a default cgi-bin folder that comes with Apache installation. I have placed all the files there.

Am I missing something, or what?
Am in need of a solution. Some should help
Awaiting solution
Change line 222 of http.conf from:
Options Indexes FollowSymLinks Includes ExecCGI

to this:
Options Indexes FollowSymLinks


Do you have an htaccess file that is doing any restrictions?
I don't have any .htaccess file. I have changed the line as requested and the error remain the same

The server encountered an internal error and was unable to complete your request.

Error message:
Premature end of script headers: test.py

The below was found in the error log
[Tue Jul 28 00:23:44 2009] [error] [client 127.0.0.1] Premature end of script headers: test.py
[Tue Jul 28 00:23:44 2009] [error] [client 127.0.0.1]   File "D:\\xampp\\cgi-bin\\test.py", line 2\r
[Tue Jul 28 00:23:44 2009] [error] [client 127.0.0.1]     print "Content-Type: text/html"\r
[Tue Jul 28 00:23:44 2009] [error] [client 127.0.0.1]                                   ^\r
[Tue Jul 28 00:23:44 2009] [error] [client 127.0.0.1] SyntaxError: invalid syntax\r

Open in new window

What about the Perl script?
Add this line to the Perl script just after the shebang line.

use CGI:Carp qw(fatalsToBrowser);

Open in new window

the perl script didnt output anything.

[Tue Jul 28 10:20:05 2009] [error] [client 127.0.0.1] Premature end of script headers: see.pl
[Tue Jul 28 10:20:22 2009] [error] [client 127.0.0.1] Premature end of script headers: see.pl
[Tue Jul 28 10:20:40 2009] [error] [client 127.0.0.1] Premature end of script headers: see.pl
[Tue Jul 28 10:20:56 2009] [error] [client 127.0.0.1] Premature end of script headers: see.pl

Thats the error log
Do anyone think giving is the solution. No traces of error!
Oh God.  This is still going on days later, eh?  I've taken a look through the thread and just noticed a few things.

I'd like you to attach actual files instead of using attach code snippet.

Please attach test.py, see.pl, your httpd.conf, and your error log.  Attach them as actual files, NOT copy/paste into the code snippet area.

We may be looking at a skewed picture of what's going on.  Until I get the actual files and see them under certain analysis, I don't want to venture more than that, other than to say that there are spurious \r sequences in your snippets, as well as double backslashes, etc.  Some of which may have a bearing on what's happening.  At this point, without the -actual files-, I can't tell if these are artifacts of EE's quoting mechanism, or if they're literal.  If they're literal, you have issues--although we'd be on the road to fixing them.
These are the files you requested
httpd.txt
errorlog.txt
see.txt
test.txt
The Perl script is missing a colon on the use CGI:Carp line, which was my error.  Change that line to:

use CGI::Carp qw(fatalsToBrowser);

Open in new window

As FishMonger said, it needs CGI::Carp with two colons.  Additionally, there should be a space after the colon on the Content-type: header:  

print "Content-type: text/plain\n\n";

httpd.conf, line 341, change to:

Options +ExecCGI -Indexes

I'm still curious as to why we're -literally- seeing double backslashes in the path to the script, as well as literal '\r' sequences in the error log.  The backslashes aren't indicated by any file you've put up here.  Hmmm.  Anyone else puzzled about that one as well?

Is there anything in conf/extra/httpd-xampp.conf ?  Please post the file, if so.  Actually, it might be worth looking at conf/extra/httpd-vhosts.conf as well, on the off chance your host is redefined and you're hitting the wrong configuration as one gets overloaded/overwritten.  I'd expect apache to complain strenuously about something like that, but God only knows with the 2.x trees.  It just hasn't been the same (ie., up to snuff) since 1.3.




Can you run the perl/python scripts from a command prompt?  What is the output there?

Start a command prompt
Type:    cd /d d:\xampp\cgi-bin
Type:    see.pl
    (post output)
Type:    test.py
    (post output)
Options +ExecCGI -Indexes

That change is not needed in this case.
It would be needed in a directory block that is not configured as the path in a ScriptAlias directive.

This is the working apache default ScriptAlias (*nix) config and is the same config I use on my Windows boxes (except of course for fixing the dir paths).
# ScriptAlias: This controls which directories contain server scripts.
# ScriptAliases are essentially the same as Aliases, except that
# documents in the realname directory are treated as applications and
# run by the server when requested rather than as documents sent to the client.
# The same rules about trailing "/" apply to ScriptAlias directives as to
# Alias.
#
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
 
#
# "/var/www/cgi-bin" should be changed to whatever your ScriptAliased
# CGI directory exists, if you have that configured.
#
<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
</Directory>

Open in new window

@ Adam314

When I run see.pl, it pop-up the file it self without any output on the cmd prompt. This is what I have in the file [see.pl]

#!c:/perl/bin/perl.exe
use CGI::Carp qw(fatalsToBrowser);
 
print "Content-type:text/html\n\n";
print "hello world";


For the test.py. I got this error

File "D:\xampp\cgi-bin\test.py", line 2
 print "Content-type: text/html\n\n"

SyntaxError: invalid syntax

This is what I have in text.py

#!C:/Python30/python.exe
print "Content-type: text/html\n\n"
print
print "Hello World!"

@Fairlight2cx

I have attached the both files that you requested:
conf/extra/httpd-xampp.conf
conf/extra/httpd-vhosts.conf

Thanks in advance









httpd-xampp.txt
httpd-vhost.txt
Nothing in those httpd config files (the extras I asked for) that would be a factor.

What do you mean about the perl program popping up the file itself?  How -exactly- are you running it?  What -exactly- is the output?

As for the python, I tested it under python 2.3.4 on Solaris and it runs fine here.  I only tested because I'm not a python guy (yet, anyway) and wanted to verify the viability of the test script myself.  How -exactly- are you running it?

It's at about this point when one starts to wonder, "Would you actually let someone in via RDP to check this out hands-on?"  This thread has been going several days, we're quickly exhausting options, and I have a feeling this might be one of those times when it needs an actual eyeball on the system by someone that's used to doing this stuff.
I donot have a problem via RDP or VNC which ever. But dont you think posting my IP address and other relevant port to the public could endanger my security. Kindly advise as I believe it would be better to have a one-on-one assistance.

Please let me know if am wrong
You're absolutely correct.  Do NOT post that information here.  I was seeing if it was viable in general, as we seem to be at an impasse currently.
So where do we take it from?
If you want to send me an email, I will vnc to your box a take a look.  I put my email address in my profile, but won't leave it there for long.
I have sent an email to you
ASKER CERTIFIED SOLUTION
Avatar of FishMonger
FishMonger
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
I thank everyone for your assistance throughout this process. I can run perl scripts on my system without hassles. Thank you all