First full version
1 parent 16638bb commit 60f4258a552208d61de6ce3bc7a7b318c96ada98
@tundra tundra authored on 28 Apr 2006
Showing 1 changed file
View
118
tperimeter.py 0 → 100644
#!/usr/bin/env python
# perimiter.py
# Copyright (c) 2006 TundraWare Inc. All Rights Reserved.
# For Updates See: http://www.tundraware.com/Software/tperimiter
 
# Program Information
 
PROGNAME = "perimiter.py"
RCSID = "$Id: tperimeter.py,v 1.100 2006/04/28 21:29:13 tundra Exp $"
 
import os, re, sys
 
#####
# Constants
#####
 
Basedir = "/www/cgi-bin/perimeter/requests/" # Base directory to store requests
IPQuad = r"(\d{1,3}\.){3}\d{1,3}$" # Regex for IP Quads
 
 
#####
# Lookup Tables
#####
 
Forbidden = ["0.0.0.0", "255.255.255.255"] # Forbidden IP addresses
Services = ["imapd", "leafnode", "sshd"] # Services we can open up
 
 
#####
# Print Routine
#####
 
def Print(s):
 
print "[User@%s] %s" % (requestor, s)
 
#####
# Error/Abort Routine
#####
 
def Error(s):
Print("ERROR: %s!<br>" % s)
Print( "Please Try Again ...<br><br>")
sys.exit(1)
 
# End of 'Error()'
 
#####
# Print The HTML Header
####
 
print "Content-type: text/html\n\n"
 
#####
# Process Passed Parameters
# Save locally in a variable of the same name
#####
 
try:
requestor = os.environ["REMOTE_ADDR"]
service = address = ""
for argument in os.environ["QUERY_STRING"].split("&"):
exec('%s="%s"' % tuple(argument.split("=")))
 
except:
Error("Internal Program Error")
 
#####
# Validate Number And Content Of Passed Parameters
#####
 
# Make sure both parameters were passed
 
if not (service and address):
Error("You Must Specify Both A Service Name And Address")
 
 
# Make sure requested service is one of the ones allowed
 
elif service not in Services:
Error("You Are Not Permitted To Change Access To %s" % service)
 
 
# Make sure address is in quad format
 
if not re.match(IPQuad, address):
Error("You Must Specify Address In IP Quad Format")
 
# Make sure address is not on the forbidden list
 
if address in Forbidden:
Error("You Are Not Permitted To Enable Access For Address: %s" % address)
 
#####
# Output Content
#####
 
Print("Requested...<br>Access To Service: %s<br>For Address: %s<br>" % (service, address))
 
 
# Make sure there is a directory present to receive the request
 
reqdir = Basedir + service
 
try:
os.makedirs(reqdir)
except:
pass
 
# Now write the request there
 
reqfil = reqdir + os.sep + address
f=open(reqfil, "w")
f.close()