!C99Shell v. 1.0 pre-release build #16!

Software: Apache/2.0.54 (Fedora). PHP/5.0.4 

uname -a: Linux mina-info.me 2.6.17-1.2142_FC4smp #1 SMP Tue Jul 11 22:57:02 EDT 2006 i686 

uid=48(apache) gid=48(apache) groups=48(apache)
context=system_u:system_r:httpd_sys_script_t
 

Safe-mode: OFF (not secure)

/usr/share/system-config-httpd/   drwxr-xr-x
Free 3.9 GB of 27.03 GB (14.42%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Feedback    Self remove    Logout    


Viewing file:     ApacheGizmo.py (35.29 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
#!/usr/bin/python -i

## ui-setup - A Python Apache configuration utility for:
## Copyright (C) 2000 Red Hat, Inc.
## Copyright (C) 2000 Jonathan Blandford <jrb@redhat.com>,
##                    Philipp Knirsch   <pknirsch@redhat.com>

## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## (at your option) any later version.

## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.

## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.


## Thoughts on rewriting the gizmo
## doesn't actually work.
## I don't really know how the proxy elements are going to work yet.  But it should be fairly straightforward.


import sys
import signal
import copy
import string
import re

from UserList import UserList

import ApacheBase

##
## I18N
##
import gettext
gettext.bindtextdomain ("system-config-httpd", "/usr/share/locale")
gettext.textdomain ("system-config-httpd")
_=gettext.gettext


##
## StateStack
class StateStack (UserList):
    def __init__ (self, base):
        UserList.__init__(self)
        self.apache = base

    def push_state (self):
        # Save original state of current config state
        orig_ctx          = ApacheBase.ctx
        orig_dr           = ApacheBase.dr
        orig_apachebase   = ApacheBase.apachebase
        orig_apache       = self.apache

        # Create a working copy of the current config state
        ApacheBase.ctx    = orig_ctx.copy()
        ApacheBase.dr     = ApacheBase.ctx.getDataRoot().getChildByIndex(0)
        ApacheBase.apachebase = ApacheBase.apache(ApacheBase.dr, None)
        self.apache = Apache()

        # Append original state to our internal list.
        self.append ( (orig_ctx, orig_dr, orig_apachebase, orig_apache ))

    def pop_restore (self):
        # Get the last known state from our internal list.
        (orig_ctx, orig_dr, orig_apachebase, orig_apache) = self[len (self) - 1]

        # Restore the affected variables
        ApacheBase.ctx = orig_ctx
        ApacheBase.dr = orig_dr
        ApacheBase.apachebase = orig_apachebase
        self.apache = orig_apache

        # Remove the currently now active state from the list
        self.pop ()

##
## Directory
class Directory:
    ALL_HOSTS=1
    DENY_FIRST=2
    ALLOW_FIRST=3

    DENY_ALLOW='Deny,Allow'
    ALLOW_DENY='Allow,Deny'
    FROM_ALL='all'
    def __init__ (self, directory):
        self.__directory = directory

    def __cmp__ (self, dir2):
        return self.Dir == dir2


    def __getattr__ (self, attr):
        if attr[0] == '_':
            return self.__dict__[attr]

        if Directory.__dict__.has_key ("get"+attr):
            return apply (Directory.__dict__["get"+attr], (self, ))

        if ApacheBase.directory.__dict__.has_key ("get"+attr):
            return apply (ApacheBase.directory.__dict__["get"+attr], (self.__directory, ))

        raise AttributeError, attr


    def __setattr__ (self, attr, value):
        if attr[0] == '_':
            self.__dict__[attr] = value
            return

        self.test_attr (attr, value)

        if Directory.__dict__.has_key ("set"+attr):
            apply (Directory.__dict__["set"+attr], (self, value))
            return

        if ApacheBase.directory.__dict__.has_key ("set"+attr):
            apply (ApacheBase.directory.__dict__["set"+attr], (self.__directory, value))
            return

        raise AttributeError, attr

    def setMode (self, value):
        if value == Directory.ALL_HOSTS:
            self.__directory.delOrder ()
            self.__directory.delDeny ()
            self.__directory.delAllow ()
        elif value == Directory.DENY_FIRST:
            self.__directory.setOrder (Directory.DENY_ALLOW)
        elif value == Directory.ALLOW_FIRST:
            self.__directory.setOrder (Directory.ALLOW_DENY)
        else:
            raise 'ValueError'

    def getMode (self):
        order = self.__directory.getOrder ()
        if order == Directory.ALLOW_DENY:
            return Directory.ALLOW_FIRST
        elif order == Directory.DENY_ALLOW:
            return Directory.DENY_FIRST
        return Directory.ALL_HOSTS

    def setOptions (self, value):
        str = apply (VirtualHost.__dict__['_option_list_to_string'], (None, value))
        self.__directory.setOptions (str)

    def getOptions (self):
        options = self.__directory.getOptions ()
        return apply (VirtualHost.__dict__['_option_string_to_list'], (None, options))

    def testDeny (self, str):
        if str == "" or str == None:
            raise 'TestError', _("Directory Deny list cannot be empty.")

    def testAllow (self, str):
        if str == "" or str == None:
            raise 'TestError', _("Directory Allow list cannot be empty.")

    def testDir (self, dir):
        if dir == "" or dir == None:
            raise 'TestError', _("You must include a directory name.")
        if dir[0] != '/':
            raise 'TestError', _("Only absolute directories are allowed.")

        if self.__directory.getDir () == dir:
            return
        directories = self.__directory.getParent ()

        for i in xrange (directories.getNumdirectory ()):
            if directories.getdirectory (i).getDir () == dir:
                raise 'TestError', (_("A directory named %s already exists.") % dir)

    def test_attr (self, attr, value):
        if attr == '_attr' or attr == '_set':
            #stop people from being cute
            raise 'ValueError'
        if Directory.__dict__.has_key ('test' + attr):
            apply (Directory.__dict__['test' + attr], (self, value))



##
## VirtualHost
class VirtualHost:
    HOST_TYPE_IP='ip'
    HOST_TYPE_NAME='name'
    HOST_TYPE_DEFAULT='default'

    DEFAULT='_default_'

    SSL_LOG_LEVELS = ['none', 'error', 'warn', 'info', 'trace','debug']
    LOG_LEVELS = ['emerg', 'alert', 'crit', 'error', 'warn', 'notice', 'info', 'debug' ]

    SERVER_SIGNATURE_OFF='off'
    SERVER_SIGNATURE_ON='on'
    SERVER_SIGNATURE_EMAIL='email'

    SERVER_HOST_NAME_LOOKUP_OFF='off'
    SERVER_HOST_NAME_LOOKUP_ON='on'
    SERVER_HOST_NAME_LOOKUP_DOUBLE='double'

    DIRECTORY_OPTIONS = [ "ExecCGI", "FollowSymLinks", "Includes", "IncludesNOEXEC", "Indexes", "MultiViews", "SymLinksIfOwnerMatch" ]
    SSL_OPTIONS = [ "FakeBasicAuth", "ExportCertData", "CompatEnvVars", "StrictRequire", "OptRenegotiate" ]

    def __init__ (self, vhost):
        self.__vhost = vhost
        self.__dict__['directories'] = Directories (vhost)
        self.__dict__['ErrorDocuments'] = ErrorDocuments (vhost)

    def __getattr__ (self, attr):
        if attr[0] == '_':
            return self.__dict__[attr]

        if VirtualHost.__dict__.has_key ("get"+attr):
            return apply (VirtualHost.__dict__["get"+attr], (self, ))

        retval = None
        if ApacheBase.virtualhost.__dict__.has_key ("get"+attr):
            retval = apply (ApacheBase.virtualhost.__dict__["get"+attr], (self.__vhost, ))

        if retval != None:
            return retval

        vhostdefault = ApacheBase.apachebase.getvhostdefault ()
        if ApacheBase.vhostdefault.__dict__.has_key ("get"+attr):
            return apply (ApacheBase.vhostdefault.__dict__["get"+attr], (vhostdefault, ))

        raise AttributeError, attr


    def __setattr__ (self, attr, value):
        if attr[0] == '_':
            self.__dict__[attr] = value
            return

        if VirtualHost.__dict__.has_key ("set"+attr):
            apply (VirtualHost.__dict__["set"+attr], (self, value))
            return

        vhostdefault = ApacheBase.apachebase.getvhostdefault ()

        if value == None:
            if ApacheBase.virtualhost.__dict__.has_key ("del"+attr):
                apply (ApacheBase.virtualhost.__dict__["del"+attr], (self.__vhost, ))
                return
            else:
                raise AttributeError, attr

        self.test_attr (attr, value)

        def_val = None
        if ApacheBase.vhostdefault.__dict__.has_key ("get"+attr):
            def_val = apply (ApacheBase.vhostdefault.__dict__["get"+attr], (vhostdefault, ))

        if value == def_val:
            self.__setattr__ (attr, None)
            return

        if ApacheBase.virtualhost.__dict__.has_key ("set"+attr):
            apply (ApacheBase.virtualhost.__dict__["set"+attr], (self.__vhost, value))
        else:
            raise AttributeError, attr

    def getAliases (self):
        aliases = self.__vhost.getserveraliases ()
        if aliases == None:
            return []

        retval = []
        for i in xrange (aliases.getNumServerAlias ()):
            retval.append (aliases.getServerAlias (i))
        return retval

    def setAliases (self, value):
        self.__vhost.delserveraliases ()
        aliases = None
        for alias in value:
            if aliases == None:
                aliases = self.__vhost.createserveraliases ()
            i = aliases.addServerAlias ()
            aliases.setServerAlias (i, alias)

    def setVHName (self, value):
        if self.VHName == value:
            return

        virtualhosts = ApacheBase.apachebase.getvirtualhosts ()
        for i in xrange (virtualhosts.getNumvirtualhost ()):
            if virtualhosts.getvirtualhost (i).getVHName() == value:
                raise 'TestError', _("A virtual host named \"%s\" already exists.\nPlease use a different name for this virtual host.") % value
        apply (ApacheBase.virtualhost.__dict__["setVHName"], (self.__vhost, value))

    def getErrorDocuments (self):
        docs = self.__vhost.geterrordocuments ()
        return {}

    def setErrorDocuments (self):
        pass

    def _option_string_to_list (self, options):
        if options == None or options == "":
            return []
        if string.lower (options) == Apache.ALL:
            return [ "ExecCGI", "FollowSymLinks", "Includes", "IncludesNOEXEC", "Indexes", "SymLinksIfOwnerMatch" ]
        tmpdict = {}
        list = string.split (options)
        for opt in list:
            if opt in VirtualHost.DIRECTORY_OPTIONS:
                tmpdict[opt] = None
        retval = tmpdict.keys ()
        retval.sort ()
        return retval

    def _option_list_to_string (self, list):
        # remove all values/non-options
        tmpdict = {}
        for opt in list:
            if opt in VirtualHost.DIRECTORY_OPTIONS:
                tmpdict[opt] = None
        newlist = tmpdict.keys ()
        newlist.sort ()
        if len (newlist) == len (VirtualHost.DIRECTORY_OPTIONS)-1 and "MultiViews" not in newlist:
            return Apache.ALL
        first = True
        retval = ""
        for i in newlist:
            if first:
                retval = i
                first = False
            else:
                retval = retval + " " + i
        return retval

    def setOptions (self, value):
        vhostdefault = ApacheBase.apachebase.getvhostdefault ()
        str = self._option_list_to_string (value)
        if string.lower (str) == string.lower (vhostdefault.getOptions ()):
            self.__vhost.delOptions ()
            return
        self.__vhost.setOptions (str)

    def getOptions (self):
        options = self.__vhost.getOptions ()
        if options == None:
            vhostdefault = ApacheBase.apachebase.getvhostdefault ()
            options = vhostdefault.getOptions ()
        return self._option_string_to_list (options)

    def setNameBased (self, value):
        if value == VirtualHost.HOST_TYPE_IP:
            self.__vhost.delserveraliases ()
        elif value == VirtualHost.HOST_TYPE_NAME:
            pass
        else:
            self.__vhost.delserveraliases ()
            self.__vhost.delAddress ()
        self.__vhost.setNameBased (value)

    def testServerName (self, value):
        if self.__vhost.getNameBased () == VirtualHost.HOST_TYPE_DEFAULT:
            if value == None or value == "":
                raise 'TestError', _("The server name must be set.")
            if value == '_default_':
                return
            if value[:9] != '_default_':
                raise 'TestError', _("Default virtual hosts must have Server Name of _default_ or _default_:port")
            if not re.match ('_default_:[0-9]+', value):
                raise 'TestError', _("Ports must only contain numeric characters")

    def getSetEnv (self):
        environment = self.__vhost.getenvironment ()
        retval = stack.apache.default_vhost.SetEnv

        if environment != None:
            for i in xrange (environment.getNumenv ()):
                env = environment.getenv (i)
                if env.getEnvType () != 'set':
                    continue

                retval[env.getVar ()] = env.getValue ()

        return retval

    def setSetEnv (self, value):
        environment = self.__vhost.getenvironment ()

        if environment == None:
            environment = self.__vhost.createenvironment ()


        for i in xrange (environment.getNumenv () - 1, -1, -1):
            env = environment.getenv (i)
            if env.getEnvType () == 'set':
                env = None
                environment.delenv(i)

        default_value = stack.apache.default_vhost.SetEnv
        for var in value.keys ():
            if var in default_value.keys() and default_value[var] == value[var]:
                continue
            env = environment.addenv ()
            env.setEnvType ('set')
            env.setVar (var)
            env.setValue (value[var])

    def getPassEnv (self):
        environment = self.__vhost.getenvironment ()
        retval = stack.apache.default_vhost.PassEnv

        if environment != None:
            for i in xrange (environment.getNumenv ()):
                env = environment.getenv (i)
                if env.getEnvType () != 'pass':
                    continue

                retval.append (env.getVar ())

        return retval

    def setPassEnv (self, value):
        environment = self.__vhost.getenvironment ()

        if environment == None:
            environment = self.__vhost.createenvironment ()


        for i in xrange (environment.getNumenv () - 1, -1, -1):
            env = environment.getenv (i)
            if env.getEnvType () == 'pass':
                env = None
                environment.delenv(i)

        default_value = stack.apache.default_vhost.PassEnv
        for var in value:
            if var in default_value:
                continue
            env = environment.addenv ()
            env.setEnvType ('pass')
            env.setVar (var)

    def getUnsetEnv (self):
        environment = self.__vhost.getenvironment ()
        retval = stack.apache.default_vhost.UnsetEnv

        if environment != None:
            for i in xrange (environment.getNumenv ()):
                env = environment.getenv (i)
                if env.getEnvType () != 'unset':
                    continue

                retval.append (env.getVar ())

        return retval

    def setUnsetEnv (self, value):
        environment = self.__vhost.getenvironment ()

        if environment == None:
            environment = self.__vhost.createenvironment ()

        for i in xrange (environment.getNumenv () - 1, -1, -1):
            env = environment.getenv (i)
            if env.getEnvType () == 'unset':
                env = None
                environment.delenv(i)

        default_value = stack.apache.default_vhost.UnsetEnv
        for var in value:
            if var in default_value:
                continue
            env = environment.addenv ()
            env.setEnvType ('unset')
            env.setVar (var)

    def testSSLCACertificateFile (self, value):
        if value == None or value == "":
            raise 'TestError', _("Empty Certificate Authority are not allowed")
        if value[0] != '/':
            raise 'TestError', _("Only absolute Certificate Authorities are allowed")
        if value[-1] == '/':
            raise 'TestError', _("Only Certificate Authority Files are allowed, not directories")

    def testOptions (self, value):
        for opt in value:
            if opt not in VirtualHost.DIRECTORY_OPTIONS:
                raise 'TestError', _("%s is not a valid Option") % opt

    def test_attr (self, attr, value):
        if attr == '_attr' or attr == '_set':
            #stop people from being cute
            raise 'ValueError'
        if VirtualHost.__dict__.has_key ('test' + attr):
            apply (VirtualHost.__dict__['test' + attr], (self, value))

    def get_readable_address (self):
        if self.NameBased == VirtualHost.HOST_TYPE_IP:
            return self.Address
        elif self.NameBased == VirtualHost.HOST_TYPE_NAME:
            return (_("%s on %s") % (self.ServerName, self.Address))
        if self.ServerName == '_default_':
            return _("Default virtual host")
        return (_("Default virtual host on port %s") % self.ServerName[10:])


##
## DefaultVirtualHost
class DefaultVirtualHost (VirtualHost):

    def __init__ (self):
        self.__vhost = ApacheBase.apachebase.getvhostdefault ()
        self.__dict__['directories'] = Directories (self.__vhost)
        self.__dict__['ErrorDocuments'] = DefaultErrorDocuments (self.__vhost)

    def __getattr__ (self, attr):
        if attr[0] == '_':
            return self.__dict__[attr]

        if DefaultVirtualHost.__dict__.has_key ("get"+attr):
            return apply (DefaultVirtualHost.__dict__["get"+attr], (self, ))

        if ApacheBase.vhostdefault.__dict__.has_key ("get"+attr):
            return apply (ApacheBase.vhostdefault.__dict__["get"+attr], (self.__vhost, ))

        raise AttributeError, attr


    def __setattr__ (self, attr, value):
        if attr[0] == '_':
            self.__dict__[attr] = value
            return

        self.test_attr (attr, value)

        if DefaultVirtualHost.__dict__.has_key ("set"+attr):
            apply (DefaultVirtualHost.__dict__["set"+attr], (self, value))
            return

        if ApacheBase.vhostdefault.__dict__.has_key ("set"+attr):
            apply (ApacheBase.vhostdefault.__dict__["set"+attr], (self.__vhost, value))
        else:
            raise AttributeError, attr

    def getErrorDocuments (self):
        docs = self.__vhost.geterrordocuments ()
        return {}

    def setErrorDocuments (self):
        pass

    def getSetEnv (self):
        environment = self.__vhost.getenvironment ()

        retval = {}

        if environment != None:
            for i in xrange (environment.getNumenv ()):
                env = environment.getenv (i)
                if env.getEnvType () != 'set':
                    continue

                retval[env.getVar ()] = env.getValue ()

        return retval

    def setSetEnv (self, value):
        environment = self.__vhost.getenvironment ()

        if environment == None:
            environment = self.__vhost.createenvironment ()

        for i in xrange (environment.getNumenv () - 1, -1, -1):
            env = environment.getenv (i)
            if env.getEnvType () == 'set':
                env = None
                environment.delenv(i)

        for var in value.keys ():
            env = environment.addenv ()
            env.setEnvType ('set')
            env.setVar (var)
            env.setValue (value[var])

    def getPassEnv (self):
        environment = self.__vhost.getenvironment ()

        if environment == None:
            return []

        retval = []
        for i in xrange (environment.getNumenv ()):
            env = environment.getenv (i)
            if env.getEnvType () != 'pass':
                continue

            retval.append (env.getVar ())

        return retval

    def setPassEnv (self, value):
        environment = self.__vhost.getenvironment ()

        if environment == None:
            environment = self.__vhost.createenvironment ()

        for i in xrange (environment.getNumenv () - 1, -1, -1):
            env = environment.getenv (i)
            if env.getEnvType () == 'pass':
                env = None
                environment.delenv(i)

        for var in value:
            env = environment.addenv ()
            env.setEnvType ('pass')
            env.setVar (var)

    def getUnsetEnv (self):
        environment = self.__vhost.getenvironment ()

        if environment == None:
            return []

        retval = []
        for i in xrange (environment.getNumenv ()):
            env = environment.getenv (i)
            if env.getEnvType () != 'unset':
                continue

            retval.append (env.getVar ())

        return retval

    def setUnsetEnv (self, value):
        environment = self.__vhost.getenvironment ()

        if environment == None:
            environment = self.__vhost.createenvironment ()

        for i in xrange (environment.getNumenv () - 1, -1, -1):
            env = environment.getenv (i)
            if env.getEnvType () == 'unset':
                env = None
                environment.delenv(i)

        for var in value:
            env = environment.addenv ()
            env.setEnvType ('unset')
            env.setVar (var)

    def setOptions (self, value):
        str = self._option_list_to_string (value)
        self.__vhost.setOptions (str)

    def getOptions (self):
        options = self.__vhost.getOptions ()
        return self._option_string_to_list (options)


    def setSSLCACertificate (self, value):
        if value[-1] == '/':
            self.__vhost.setSSLCACertificatePath (value)
            self.__vhost.delSSLCACertificateFile ()
        else:
            self.__vhost.setSSLCACertificateFile (value)
            self.__vhost.delSSLCACertificatePath ()

    def getSSLCACertificate (self):
        retval = self.__vhost.getSSLCACertificateFile ()
        if retval:
            return retval
        retval = self.__vhost.getSSLCACertificatePath ()


##
## Apache
class Apache:
    TRUE='true'
    FALSE='false'
    ON='on'
    OFF='off'
    ALL='all'
    NONE='none'

    def __init__(self):
        self.__dict__['vhosts'] = VirtualHosts ()
        self.__dict__['default_vhost'] = DefaultVirtualHost ()
        self.__dict__['listener'] = Listener ()
        vhostdefault = ApacheBase.apachebase.getvhostdefault ()
        ApacheBase.vhostdefault.delDirectoryIndex(vhostdefault)

    def __setattr__ (self, attr, value):
        if attr[0] == '_':
           self.__dict__[attr] = value
            return

        serveroptions = ApacheBase.apachebase.getserveroptions ()
        vhostdefault = ApacheBase.apachebase.getvhostdefault ()

        self.test_attr (attr, value)

        if Apache.__dict__.has_key ("set"+attr):
            apply (Apache.__dict__["set"+attr], (self, value))
            return

        if ApacheBase.serveroptions.__dict__.has_key ("set"+attr):
            apply (ApacheBase.serveroptions.__dict__["set"+attr], (serveroptions, value))
        elif ApacheBase.vhostdefault.__dict__.has_key ("set"+attr):
            apply (ApacheBase.vhostdefault.__dict__["set"+attr], (vhostdefault, value))
        else:
            raise AttributeError, attr


    def __getattr__ (self, attr):
        if attr[0] == '_':
            return self.__dict__[attr]

        serveroptions = ApacheBase.apachebase.getserveroptions ()
        vhostdefault = ApacheBase.apachebase.getvhostdefault ()

        if Apache.__dict__.has_key ("get"+attr):
            return apply (Apache.__dict__["get"+attr], (self, ))

        if ApacheBase.serveroptions.__dict__.has_key ("get"+attr):
            return apply (ApacheBase.serveroptions.__dict__["get"+attr], (serveroptions, ))
        elif ApacheBase.vhostdefault.__dict__.has_key ("get"+attr):
            return apply (ApacheBase.vhostdefault.__dict__["get"+attr], (vhostdefault, ))

        raise AttributeError, attr

    def getNameVirtualHosts (self):
        nvhlist = ApacheBase.apachebase.getnamevirtualhosts ()

        if nvhlist == None:
            return []

        retval = []
        for i in xrange (nvhlist.getNumNameVirtualHost ()):
            retval.append (nvhlist.getNumVirtualHost (i))

        return retval

    def setNameVirtualHosts (self, value):
        ApacheBase.apachebase.getserveroptions ().delnamevirtualhosts ()
        nvhlist = ApacheBase.apachebase.getserveroptions ().createnamevirtualhosts ()

        for var in value:
            nvhlist.setNameVirtualHost (nvhlist.addNameVirtualHost (), var)

    def testServerName (self, value):
        if value == "":
            raise 'TestError', "The server name cannot be blank"

    def test_attr (self, attr, value):
        if attr == '_attr' or attr == '_set':
            #stop people from being cute
            raise 'ValueError'
        if Apache.__dict__.has_key ('test' + attr):
            apply (Apache.__dict__['test' + attr], (self, value))

    def testLogFormat (self, value):
        if value == "borp":
            raise 'ValueError', "Log cannot be \"borp\""

    def write (self, force=False):
        return ApacheBase.write (force)



###
### Meta classes for handling sub classes
###


##
## VirtualHosts
class VirtualHosts:
    def __init__ (self):
        self.__virtualhosts = ApacheBase.apachebase.getvirtualhosts ()

    def __getitem__ (self, key):
        for i in xrange (len (self)):
            vhost = self.__virtualhosts.getvirtualhost (i)
            if vhost.getVHName() == key:
                return VirtualHost (vhost)
        return None

    def __setitem__ (self, key, value):
        raise 'TypeError', "Unable to explicitly set a vhost.  Use VirtualHosts::add instead"

    def __delitem__ (self, key):
        for i in xrange (len (self)):
            vhost = self.__virtualhosts.getvirtualhost (i)
            if vhost.getVHName() == key:
                self.__virtualhosts.delvirtualhost (i)
                return
        raise KeyError, key

    def __len__ (self):
        return self.__virtualhosts.getNumvirtualhost ()

    def keys (self):
        if self.__virtualhosts == None:
            return []

        retval = []
        for i in xrange (len (self)):
            retval.append (self.__virtualhosts.getvirtualhost (i).getVHName())
        return retval

    def add (self, vhname=None):
        if self.__virtualhosts == None:
            self.__virtualhosts = ApacheBase.apachebase.createvirtualhosts ()
        keys = self.keys ()
        if vhname == None or vhname in keys:
            i = 0
            while 1:
                vhname = "Virtual Host %d" % i
                if not vhname in keys:
                    break
                i = i + 1
        vhost = self.__virtualhosts.addvirtualhost ()
        vhost.setVHName (vhname)

        return VirtualHost (vhost)

    def move (self, vhname, pos):
        for i in xrange (len (self)):
            vhost = self.__virtualhosts.getvirtualhost (i)
            if vhost.getVHName() == vhname:
                break;

        if i == len (self):
            return

        if i == pos or pos >= len (self) - 1:
            return

        self.__virtualhosts.movevirtualhost(i, pos)

##
## Listener
class Listener:
    def __init__ (self):
        self.__listener = ApacheBase.apachebase.getserveroptions ().getlistener ()

    def __getitem__ (self, key):
        return self.__listener.getListen (key)

    def __setitem__ (self, key, value):
        raise 'TypeError', "Unable to explicitly set a Listen.  Use Listener::add instead"

    def __delitem__ (self, key):
        self.__listener.delListen (key)

    def __len__ (self):
        return self.__listener.getNumListen ()

    def add (self, listen):
        if self.__listener == None:
            self.__listener = ApacheBase.apachebase.getserveroptions ().createlistener ()
        l = self.__listener.setListen (self.__listener.addListen (), listen)

        return l

    def clear (self):
        ApacheBase.apachebase.getserveroptions ().dellistener ()
        self.__listener = ApacheBase.apachebase.getserveroptions ().createlistener ()

##
## Directories
class Directories:
    def __init__ (self, vhost):
        self.__vhost = vhost
        self.__directories = vhost.getdirectories ()

    def __getitem__ (self, key):
        for i in xrange (len (self)):
            dir = self.__directories.getdirectory (i)
            if dir.getDir() == key:
                return Directory (dir)
        return None

    def __setitem__ (self, key, value):
        raise 'TypeError', "Unable to explicitly set a directory.  Use Directories::add instead"

    def __delitem__ (self, key):
        for i in xrange (len (self)):
            dir = self.__directories.getdirectory (i)
            if dir.getDir() == key:
                self.__directories.deldirectory (i)
                return
        raise KeyError, key

    def __len__ (self):
        if self.__directories == None:
            return 0
        return self.__directories.getNumdirectory ()

    def keys (self):
        if self.__directories == None:
            return []

        retval = []
        for i in xrange (len (self)):
            retval.append (self.__directories.getdirectory (i).getDir())
        return retval

    def add (self, dirname):
        if self.__directories == None:
            self.__directories = self.__vhost.createdirectories ()
        keys = self.keys ()
        if dirname in keys:
            raise KeyError, dirname
        dir = self.__directories.adddirectory ()
        dir.setDir (dirname)

        return Directory (dir)

##
## ErrorDocuments
class ErrorDocuments:
    ERROR_CODE_DATA =  {
        400 : (_("Bad Request"), _("The request could not be understood by this server.")),
        401 : (_("Authorization Required"), _("The request cannot be processed without authorization.")),
        403 : (_("Forbidden"), _("The request was refused by this server.")),
        404 : (_("Not Found"), _("The requested document was not found on this server")),
        405 : (_("Method Not Allowed"), _("The specified method was not allowed for this resource.")),
        406 : (_("Not Acceptable"), _("The request is not acceptable as stated.")),
        407 : (_("Proxy Authentication Required"), _("The request cannot be processed without authorization with the proxy.")),
        408 : (_("Request Time-out"), _("The client did not produce a request in time for this server.")),
        409 : (_("Conflict"), _("The request could not be completed due to a conflict within the resource.")),
        410 : (_("Gone"), _("The requested resource is no longer available at this server.")),
        411 : (_("Length Required"), _("this server requires a defined Content-Length.")),
        412 : (_("Precondition Failed"), _("A necessary precondition has failed.")),
        413 : (_("Request Entity Too Large"), _("The request cannot be processed because the entity is larger than this server's capabilities.")),
        414 : (_("Request-URI Too Large"), _("The URI is too long for this server to interpret.")),
        415 : (_("Unsupported Media Type"), _("The format of the requested entity is not supported.")),
        416 : (_("Requested Range Not Satisfiable"), _("The requested range is not acceptable to this server.")),
        417 : (_("Expectation Failed"), _("The expectation cannot be met by this server.")),
        500 : (_("Internal Server Error"), _("An unexpected condition prevents this server from fulfilling the request.")),
        501 : (_("Method Not Implemented"), _("This server does not support the method required to fulfill the request.")),
        502 : (_("Bad Gateway"), _("An invalid response was received.")),
        503 : (_("Service Temporarily Unavailable"), _("This server is temporarily overloaded or under maintenance.")),
        504 : (_("Gateway Time-out"), _("No response was given within the alloted time.")),
        505 : (_("HTTP Version Not Supported"), _("This server does not support the HTTP protocol version of the request.")) }

    def __init__ (self, vhost):
        self.__vhost = vhost
        self.__errdocs = vhost.geterrordocuments ()

    def __getitem__ (self, key):
        if not key in ErrorDocuments.ERROR_CODE_DATA.keys ():
            raise KeyError, key

        for i in xrange (len (self)):
            errdoc = self.__errdocs.geterrordocument (i)
            if errdoc.getCode () == key:
                return errdoc.getDocument ()

       return stack.apache.default_vhost.ErrorDocuments[key]

    def __setitem__ (self, key, value):
        if not key in ErrorDocuments.ERROR_CODE_DATA.keys ():
            raise KeyError, key

        def_value = stack.apache.default_vhost.ErrorDocuments[key]
        if def_value == value:
            del (self[key])
            return

        if self.__errdocs == None:
            self.__errdocs = self.__vhost.createerrordocuments ()

        for i in xrange (len (self)):
            errdoc = self.__errdocs.geterrordocument (i)
            if errdoc.getCode () == key:
                errdoc.setDocument (value)
                return

        doc = self.__errdocs.adderrordocument ()
        doc.setCode (key)
        doc.setDocument (value)

    def __delitem__ (self, key):
        if not key in ErrorDocuments.ERROR_CODE_DATA.keys ():
            raise KeyError, key
        for i in xrange (len (self)):
            errdoc = self.__errdocs.geterrordocument (i)
            if errdoc.getCode () == key:
                self.__errdocs.delerrordocument (i)
                return

    def __len__ (self):
        if self.__errdocs == None:
            return 0
        return self.__errdocs.getNumerrordocument ()

    def keys (self):
        retval = stack.apache.default_vhost.ErrorDocuments.keys ()
        for i in xrange (len (self)):
            code = self.__errdocs.geterrordocument (i).getCode ()
            if not code in retval:
                retval.append (code)

        retval.sort ()
        return retval


class DefaultErrorDocuments:
    def __init__ (self, vhost):
        self.__vhost = vhost
        self.__errdocs = vhost.geterrordocuments ()

    def __getitem__ (self, key):
        if not key in ErrorDocuments.ERROR_CODE_DATA.keys ():
            raise KeyError, key

        for i in xrange (len (self)):
            errdoc = self.__errdocs.geterrordocument (i)
            if errdoc.getCode () == key:
                return errdoc.getDocument ()
        return None

    def __setitem__ (self, key, value):
        if not key in ErrorDocuments.ERROR_CODE_DATA.keys ():
            raise KeyError, key

        if self.__errdocs == None:
            self.__errdocs = self.__vhost.createerrordocuments ()

        for i in xrange (len (self)):
            errdoc = self.__errdocs.geterrordocument (i)
            if errdoc.getCode () == key:
                errdoc.setDocument (value)
                return
        doc = self.__errdocs.adderrordocument ()
        doc.setCode (key)
        doc.setDocument (value)

    def __delitem__ (self, key):
        for i in xrange (len (self)):
            errdoc = self.__errdocs.geterrordocument (i)
            if errdoc.getCode () == key:
                self.__errdocs.delerrordocument (i)
                return

        # is this right?
        raise KeyError, key

    def __len__ (self):
        if self.__errdocs == None:
            return 0
        return self.__errdocs.getNumerrordocument ()

    def keys (self):
        retval = []
        for i in xrange (len (self)):
            errdoc = self.__errdocs.geterrordocument (i)
            retval.append (errdoc.getCode ())
        return retval


##
## Global code
##
stack = StateStack ( Apache())

if __name__ == "__main__":
    signal.signal (signal.SIGINT, signal.SIG_DFL)

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ Read-Only ]

:: Make Dir ::
 
[ Read-Only ]
:: Make File ::
 
[ Read-Only ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 1.0 pre-release build #16 powered by Captain Crunch Security Team | http://ccteam.ru | Generation time: 0.0052 ]--