⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 apache.py

📁 Mod_python is an Apache module that embeds the Python interpreter within the server. With mod_python
💻 PY
📖 第 1 页 / 共 3 页
字号:
        # carve out the piece, then shorten the buffer        result = self.buf[:i+1]        self.buf = self.buf[i+1:]        self.pos = self.pos + len(result)        return resultclass CGIStdout(NullIO):    """    Class that allows writing to the socket directly for CGI.    """    def __init__(self, req):        self.pos = 0        self.req = req        self.headers_sent = 0        self.headers = ""    def write(self, s):        if not s: return        if not self.headers_sent:            self.headers = self.headers + s            # are headers over yet?            headers_over = 0            # first try RFC-compliant CRLF            ss = self.headers.split('\r\n\r\n', 1)            if len(ss) < 2:                # second try with \n\n                ss = self.headers.split('\n\n', 1)                if len(ss) >= 2:                    headers_over = 1            else:                headers_over = 1            if headers_over:                # headers done, process them                ss[0] = ss[0].replace('\r\n', '\n')                lines = ss[0].split('\n')                for line in lines:                    h, v = line.split(":", 1)                    v = v.strip()                    if h.lower() == "status":                        status = int(v.split()[0])                        self.req.status = status                    elif h.lower() == "content-type":                        self.req.content_type = v                        self.req.headers_out[h] = v                    else:                        self.req.headers_out.add(h, v)                self.headers_sent = 1                # write the body if any at this point                self.req.write(ss[1])        else:            self.req.write(str(s))        self.pos = self.pos + len(s)    def tell(self): return self.posdef setup_cgi(req):    """    Replace sys.stdin and stdout with an objects that read/write to    the socket, as well as substitute the os.environ.    Returns (environ, stdin, stdout) which you must save and then use    with restore_nocgi().    """    # save env    save_env = os.environ.copy()    si = sys.stdin    so = sys.stdout    os.environ.update(build_cgi_env(req))    sys.stdout = CGIStdout(req)    sys.stdin = CGIStdin(req)    sys.argv = [] # keeps cgi.py happy    return save_env, si, sodef restore_nocgi(sav_env, si, so):    """ see setup_cgi() """    osenv = os.environ    # restore env    for k in osenv.keys():        del osenv[k]    for k in sav_env:        osenv[k] = sav_env[k]    sys.stdout = si    sys.stdin = sointerpreter = Nonemain_server = None_callback = Nonedef register_cleanup(callback, data=None):    _apache.register_cleanup(interpreter, main_server, callback, data)def init(name, server):    """        This function is called by the server at startup time    """    global interpreter    global main_server    interpreter = name    main_server = server    sys.argv = ["mod_python"]    global _callback    _callback = CallBack()    options = main_server.get_options()    #interpreters = options.get('mod_python.future.importer', None)    interpreters = options.get('mod_python.legacy.importer', None)    if interpreters:        interpreters = map(lambda x: x.strip(), interpreters.split(','))        #if '*' in interpreters or interpreter in interpreters:        if not ('*' in interpreters or interpreter in interpreters):            from mod_python import importer    else:        from mod_python import importer    return _callback## Some functions made publicmake_table = _apache.tablelog_error = _apache.log_errortable = _apache.tableconfig_tree = _apache.config_treeserver_root = _apache.server_rootmpm_query = _apache.mpm_queryexists_config_define = _apache.exists_config_definestat = _apache.stat## Some constantsHTTP_CONTINUE                     = 100HTTP_SWITCHING_PROTOCOLS          = 101HTTP_PROCESSING                   = 102HTTP_OK                           = 200HTTP_CREATED                      = 201HTTP_ACCEPTED                     = 202HTTP_NON_AUTHORITATIVE            = 203HTTP_NO_CONTENT                   = 204HTTP_RESET_CONTENT                = 205HTTP_PARTIAL_CONTENT              = 206HTTP_MULTI_STATUS                 = 207HTTP_MULTIPLE_CHOICES             = 300HTTP_MOVED_PERMANENTLY            = 301HTTP_MOVED_TEMPORARILY            = 302HTTP_SEE_OTHER                    = 303HTTP_NOT_MODIFIED                 = 304HTTP_USE_PROXY                    = 305HTTP_TEMPORARY_REDIRECT           = 307HTTP_BAD_REQUEST                  = 400HTTP_UNAUTHORIZED                 = 401HTTP_PAYMENT_REQUIRED             = 402HTTP_FORBIDDEN                    = 403HTTP_NOT_FOUND                    = 404HTTP_METHOD_NOT_ALLOWED           = 405HTTP_NOT_ACCEPTABLE               = 406HTTP_PROXY_AUTHENTICATION_REQUIRED= 407HTTP_REQUEST_TIME_OUT             = 408HTTP_CONFLICT                     = 409HTTP_GONE                         = 410HTTP_LENGTH_REQUIRED              = 411HTTP_PRECONDITION_FAILED          = 412HTTP_REQUEST_ENTITY_TOO_LARGE     = 413HTTP_REQUEST_URI_TOO_LARGE        = 414HTTP_UNSUPPORTED_MEDIA_TYPE       = 415HTTP_RANGE_NOT_SATISFIABLE        = 416HTTP_EXPECTATION_FAILED           = 417HTTP_UNPROCESSABLE_ENTITY         = 422HTTP_LOCKED                       = 423HTTP_FAILED_DEPENDENCY            = 424HTTP_UPGRADE_REQUIRED             = 426HTTP_INTERNAL_SERVER_ERROR        = 500HTTP_NOT_IMPLEMENTED              = 501HTTP_BAD_GATEWAY                  = 502HTTP_SERVICE_UNAVAILABLE          = 503HTTP_GATEWAY_TIME_OUT             = 504HTTP_VERSION_NOT_SUPPORTED        = 505HTTP_VARIANT_ALSO_VARIES          = 506HTTP_INSUFFICIENT_STORAGE         = 507HTTP_NOT_EXTENDED                 = 510# The APLOG constants in Apache are derived from syslog.h# constants, so we do same here.try:    import syslog    APLOG_EMERG = syslog.LOG_EMERG     # system is unusable    APLOG_ALERT = syslog.LOG_ALERT     # action must be taken immediately    APLOG_CRIT = syslog.LOG_CRIT       # critical conditions    APLOG_ERR = syslog.LOG_ERR         # error conditions    APLOG_WARNING = syslog.LOG_WARNING # warning conditions    APLOG_NOTICE = syslog.LOG_NOTICE   # normal but significant condition    APLOG_INFO = syslog.LOG_INFO       # informational    APLOG_DEBUG = syslog.LOG_DEBUG     # debug-level messagesexcept ImportError:    APLOG_EMERG = 0    APLOG_ALERT = 1    APLOG_CRIT = 2    APLOG_ERR = 3    APLOG_WARNING = 4    APLOG_NOTICE = 5    APLOG_INFO = 6    APLOG_DEBUG = 7APLOG_NOERRNO = 8OK = REQ_PROCEED = 0DONE = -2DECLINED = REQ_NOACTION = -1_status_values = {    "postreadrequesthandler":   [ DECLINED, OK ],    "transhandler":             [ DECLINED ],    "maptostoragehandler":      [ DECLINED ],    "inithandler":              [ DECLINED, OK ],    "headerparserhandler":      [ DECLINED, OK ],    "accesshandler":            [ DECLINED, OK ],    "authenhandler":            [ DECLINED ],    "authzhandler":             [ DECLINED ],    "typehandler":              [ DECLINED ],    "fixuphandler":             [ DECLINED, OK ],    "loghandler":               [ DECLINED, OK ],    "handler":                  [ OK ],}# constants for get_remote_hostREMOTE_HOST = 0REMOTE_NAME = 1REMOTE_NOLOOKUP = 2REMOTE_DOUBLE_REV = 3# legacy/mod_python thingsREQ_ABORTED = HTTP_INTERNAL_SERVER_ERRORREQ_EXIT = "REQ_EXIT"SERVER_RETURN = _apache.SERVER_RETURNPROG_TRACEBACK = "PROG_TRACEBACK"# the req.finfo tupleFINFO_MODE = 0FINFO_INO = 1FINFO_DEV = 2FINFO_NLINK = 3FINFO_UID = 4FINFO_GID = 5FINFO_SIZE = 6FINFO_ATIME = 7FINFO_MTIME = 8FINFO_CTIME = 9FINFO_FNAME = 10FINFO_NAME = 11FINFO_FILETYPE = 12# the req.parsed_uriURI_SCHEME = 0URI_HOSTINFO = 1URI_USER = 2URI_PASSWORD = 3URI_HOSTNAME = 4URI_PORT = 5URI_PATH = 6URI_QUERY = 7URI_FRAGMENT = 8# for req.proxyreqPROXYREQ_NONE = 0       # No proxyPROXYREQ_PROXY = 1      # Standard proxyPROXYREQ_REVERSE = 2    # Reverse proxyPROXYREQ_RESPONSE = 3   # Origin response# methods for req.allow_method()M_GET = 0               # RFC 2616: HTTPM_PUT = 1M_POST = 2M_DELETE = 3M_CONNECT = 4M_OPTIONS = 5M_TRACE = 6             # RFC 2616: HTTPM_PATCH = 7M_PROPFIND = 8          # RFC 2518: WebDAVM_PROPPATCH = 9M_MKCOL = 10M_COPY = 11M_MOVE = 12M_LOCK = 13M_UNLOCK = 14           # RFC2518: WebDAVM_VERSION_CONTROL = 15  # RFC3253: WebDAV VersioningM_CHECKOUT = 16M_UNCHECKOUT = 17M_CHECKIN = 18M_UPDATE = 19M_LABEL = 20M_REPORT = 21M_MKWORKSPACE = 22M_MKACTIVITY = 23M_BASELINE_CONTROL = 24M_MERGE = 25M_INVALID = 26           # RFC3253: WebDAV Versioning# for req.used_path_infoAP_REQ_ACCEPT_PATH_INFO = 0  # Accept request given path_infoAP_REQ_REJECT_PATH_INFO = 1  # Send 404 error if path_info was givenAP_REQ_DEFAULT_PATH_INFO = 2 # Module's choice for handling path_info# for mpm_queryAP_MPMQ_NOT_SUPPORTED      = 0  # This value specifies whether                                # an MPM is capable of                                # threading or forking.AP_MPMQ_STATIC             = 1  # This value specifies whether                                # an MPM is using a static # of                                # threads or daemons.AP_MPMQ_DYNAMIC            = 2  # This value specifies whether                                # an MPM is using a dynamic # of                                # threads or daemons.AP_MPMQ_MAX_DAEMON_USED    = 1  # Max # of daemons used so farAP_MPMQ_IS_THREADED        = 2  # MPM can do threadingAP_MPMQ_IS_FORKED          = 3  # MPM can do forkingAP_MPMQ_HARD_LIMIT_DAEMONS = 4  # The compiled max # daemonsAP_MPMQ_HARD_LIMIT_THREADS = 5  # The compiled max # threadsAP_MPMQ_MAX_THREADS        = 6  # # of threads/child by configAP_MPMQ_MIN_SPARE_DAEMONS  = 7  # Min # of spare daemonsAP_MPMQ_MIN_SPARE_THREADS  = 8  # Min # of spare threadsAP_MPMQ_MAX_SPARE_DAEMONS  = 9  # Max # of spare daemonsAP_MPMQ_MAX_SPARE_THREADS  = 10 # Max # of spare threadsAP_MPMQ_MAX_REQUESTS_DAEMON= 11 # Max # of requests per daemonAP_MPMQ_MAX_DAEMONS        = 12 # Max # of daemons by config# magic mime typesCGI_MAGIC_TYPE = "application/x-httpd-cgi" INCLUDES_MAGIC_TYPE = "text/x-server-parsed-html" INCLUDES_MAGIC_TYPE3 = "text/x-server-parsed-html3" DIR_MAGIC_TYPE = "httpd/unix-directory" # for req.read_bodyREQUEST_NO_BODY = 0 REQUEST_CHUNKED_ERROR = 1 REQUEST_CHUNKED_DECHUNK = 2 # for req.connection.keepaliveAP_CONN_UNKNOWN = _apache.AP_CONN_UNKNOWNAP_CONN_CLOSE = _apache.AP_CONN_CLOSEAP_CONN_KEEPALIVE = _apache.AP_CONN_KEEPALIVE# for req.finfo[apache.FINFO_FILETYPE]APR_NOFILE = _apache.APR_NOFILEAPR_REG = _apache.APR_REGAPR_DIR = _apache.APR_DIRAPR_CHR = _apache.APR_CHRAPR_BLK = _apache.APR_BLKAPR_PIPE = _apache.APR_PIPEAPR_LNK = _apache.APR_LNKAPR_SOCK = _apache.APR_SOCKAPR_UNKFILE = _apache.APR_UNKFILE# for apache.stat()APR_FINFO_LINK = 0x00000001 # Stat the link not the file itself if it is a linkAPR_FINFO_MTIME = 0x00000010 # Modification TimeAPR_FINFO_CTIME = 0x00000020 # Creation or inode-changed timeAPR_FINFO_ATIME = 0x00000040 # Access TimeAPR_FINFO_SIZE = 0x00000100 # Size of the fileAPR_FINFO_CSIZE = 0x00000200 # Storage size consumed by the fileAPR_FINFO_DEV = 0x00001000 # DeviceAPR_FINFO_INODE = 0x00002000 # InodeAPR_FINFO_NLINK = 0x00004000 # Number of linksAPR_FINFO_TYPE = 0x00008000 # TypeAPR_FINFO_USER = 0x00010000 # UserAPR_FINFO_GROUP = 0x00020000 # GroupAPR_FINFO_UPROT = 0x00100000 # User protection bitsAPR_FINFO_GPROT = 0x00200000 # Group protection bitsAPR_FINFO_WPROT = 0x00400000 # World protection bitsAPR_FINFO_ICASE = 0x01000000 # if dev is case insensitiveAPR_FINFO_NAME = 0x02000000 # ->name in proper caseAPR_FINFO_MIN = 0x00008170 # type, mtime, ctime, atime, sizeAPR_FINFO_IDENT = 0x00003000 # dev and inodeAPR_FINFO_OWNER = 0x00030000 # user and groupAPR_FINFO_PROT = 0x00700000 # all protectionsAPR_FINFO_NORM = 0x0073b170 # an atomic unix apr_stat()APR_FINFO_DIRENT = 0x02000000 # an atomic unix apr_dir_read()

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -