Hi all,
I'm setting up a web server using the standard LAMP stack ( Fedora 14,
Apache 2.2 , MySQL 5.1.52, Python 2.7 ). I've written a Python CGI script
which connects to a MySQL server on other host. From a standalone python
script, I am able to connect to the MySQL server. However, as a CGI script,
the connection fails. Apache's error_log shows the following:
[error] [client 10.239.70.12] Traceback (most recent call last):
[error] [client 10.239.70.12] File "/var/www/cgi-bin/temp.py", line 129,
in <module>
[error] [client 10.239.70.12] dataSource.Initialize()
[error] [client 10.239.70.12] File "/var/www/cgi-bin/temp.py", line 34,
in Initialize
[error] [client 10.239.70.12] self.iConnection = MySQLdb.connect(
STOR_HOST, STOR_USER, STOR_PASS, STOR_DBSE )
[error] [client 10.239.70.12] File
"/usr/lib64/python2.7/site-packages/MySQLdb/__init__.py", line 81, in
Connect
[error] [client 10.239.70.12] return Connection(*args, **kwargs)
[error] [client 10.239.70.12] File
"/usr/lib64/python2.7/site-packages/MySQLdb/connections.py", line 187, in
__init__
[error] [client 10.239.70.12] super(Connection, self).__init__(*args,
**kwargs2)
[error] [client 10.239.70.12] _mysql_exceptions.OperationalError: (2003,
"Can't connect to MySQL server on '10.245.18.74' (13)")
However, if I try to connect to mysql server in localhost instead of
connecting to a different host, the connection succeeds.
Still strange, I've written a simple utility in Python which imitates a HTTP
Server ( attached ). This simple server doesn't complain if a CGI script
inside it tries to connect to a mysql server at different host.
I am not sure whether this is a configuration issue / security issue. Please
advise on how to achieve connection to mysql server at different host within
Apache CGI.
Thanks
Gopi
#!/usr/bin/env python
import os # Base package
import sys # Low level system IO
import BaseHTTPServer # Implements a simple web server
import CGIHTTPServer # Used to run CGI scripts
import commands # Used for running commands in terminal
class CCGIRequestHandler( CGIHTTPServer.CGIHTTPRequestHandler ):
pass
################################################################################
# Starts the HTTP server
#
def runServer():
# Fork and kill the parent
if os.fork():
sys.stderr.flush()
sys.stdout.flush()
os._exit( 0 )
# Change the port according to the requirement
serverPort = 8001
serverAddress = ( '', serverPort )
httpServer = BaseHTTPServer.HTTPServer( serverAddress,
CCGIRequestHandler )
print '[I] HTTP Server started. Serving at port ', serverPort
httpServer.serve_forever()
################################################################################
# Kills the running server
#
def killServer():
retStatus, output = commands.getstatusoutput( 'ps | grep ServerCon' )
lines = output.splitlines() # This required as we'd have
lineOfConcern = lines[0] # 2 instances of this crap running
temp = lineOfConcern.split( ' ' )
idToKill = temp[0]
killCommand = 'kill -9 ' + idToKill
retStatus, output = commands.getstatusoutput( killCommand )
if ( retStatus == 0 ):
print '[I]Server committed suicide...'
else:
print '[E]Cannot kill server. Manually kill it yourself'
################################################################################
# Prints to console whether the server is running or not
#
def reportStatus():
retStatus, output = commands.getstatusoutput( 'ps | grep ServerCon' )
lines = output.splitlines() # This required as we'd have
if ( len( lines ) > 2 ):
print '[I]More than one instance of server running. Check'
elif ( len( lines ) == 2 ):
print '[I]Server running'
else:
print '[I]Server not running'
################################################################################
# Main entry point
#
if __name__ == "__main__":
print " HTTP Server Control script"
print " What do you want to do ?"
print " [ 1 ] Start Server"
print " [ 2 ] Shutdown server"
print " [ 3 ] Check status of server"
option = raw_input( " Enter your option : " )
if ( option == '1' ):
print 'You selected option [1]. Starting server'
runServer()
elif ( option == '2' ):
print 'You selected option [2]. Shutting down server'
killServer()
elif ( option == '3' ):
print 'You selected option [3]. Checking status of server'
reportStatus()
else:
print '[E]Invalid option, try again'
---------------------------------------------------------------------
The official User-To-User support forum of the Apache HTTP Server Project.
See <URL:http://httpd.apache.org/userslist.html> for more info.
To unsubscribe, e-mail: [email protected]
" from the digest: [email protected]
For additional commands, e-mail: [email protected]