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

📄 pure-config.py.in

📁 功能强大的ftp服务器源代码
💻 IN
字号:
#! @PYTHON@#  Authors Unknown of original pure-config.py#  Copyright 2001 by Joshua Rodman <joshua_rodman@yahoo.com>,#  Modifications Copyright 2001-2003 by Matthias Andree#  #                All Rights Reserved# # Permission to use, copy, modify, and distribute this software# in original or modified form for any purpose and without fee# is hereby granted, provided that the above copyright notice# appear in all copies.# # Joshua Rodman DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS# SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY# AND FITNESS, IN NO EVENT SHALL Joshua Rodman BE LIABLE FOR# ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS# ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR# PERFORMANCE OF THIS SOFTWARE. """Pure-FTPd configuration parser.   Parse pure-ftpd configuration file to options.   If run directly, execute the program."""import reimport osimport sys# autoconf stuffif '@sbindir@'[0] == '/':    pureftpd = '@sbindir@/pure-ftpd'else:    pureftpd = '@prefix@/sbin/pure-ftpd'argv = sys.argv[1:]try:    conffile = argv.pop(0)except IndexError:    print "Usage:", sys.argv[0], "<configuration file> [extra options]"    sys.exit(1)comment = re.compile("[ ]*#+.*")# option_tuple members are lists as follows:# 0 - case insensitive regex to match# 1 - flag to use# remaining - 'None' are placeholders for items matched by the regex#             the matched items and literal strings are concatenated#             into a literal option which follows the flagoption_tuple = (    ["IPV4Only[\s]+yes",                   "-4"                  ],    ["ChrootEveryone[\s]+yes",             "-A"                  ],    ["TrustedGID[\s]+([\d]+)",             "-a", None            ],    ["BrokenClientsCompatibility[\s]+yes", "-b"                  ],    ["MaxClientsNumber\s+(\d+)",           "-c", None            ],    ["Daemonize\s+yes",                    "-B"                  ],    ["MaxClientsPerIP\s+(\d+)",            "-C", None            ],    ["VerboseLog\s+yes",                   "-d"                  ],    ["DisplayDotFiles\s+yes",              "-D"                  ],    ["AnonymousOnly\s+yes",                "-e"                  ],    ["MaxDiskUsage\s+(\d+)",               "-k", None            ],    ["NoAnonymous\s+yes",                  "-E"                  ],    ["SyslogFacility\s+(\S+)",             "-f", None            ],    ["FortunesFile\s+(\S+)",               "-F", None            ],    ["DontResolve\s+yes",                  "-H"                  ],    ["MaxIdleTime\s+(\d+)",                "-I", None            ],    ["LDAPConfigFile\s+(\S+)",             "-l", "ldap:",   None ],    ["MySQLConfigFile\s+(\S+)",            "-l", "mysql:",  None ],    ["PGSQLConfigFile\s+(\S+)",            "-l", "pgsql:",  None ],    ["PureDB\s+(\S+)",                     "-l", "puredb:", None ],    ["ExtAuth\s+(\S+)",                    "-l", "extauth:",None ],        ["PAMAuthentication\s+yes",            "-l", "pam"           ],    ["UnixAuthentication\s+yes",           "-l", "unix"          ],    ["LimitRecursion\s+(\d+)\s+(\d+)",     "-L", None, ":", None ],    ["AnonymousCanCreateDirs\s+yes",       "-M"                  ],    ["MaxLoad\s+(\d+)",                    "-m", None            ],    ["NATmode\s+yes",                      "-N"                  ],    ["CallUploadScript\s+yes",             "-o"                  ],    ["PassivePortRange\s+(\d+)\s+(\d+)",   "-p", None, ":", None ],    ["ForcePassiveIP\s+(\S+)",             "-P", None            ],    ["AnonymousRatio\s+(\d+)\s+(\d+)",     "-q", None, ":", None ],    ["UserRatio\s+(\d+)\s+(\d+)",          "-Q", None, ":", None ],    ["AntiWarez\s+yes",                    "-s"                  ],    ["Bind\s+(\S+)",                       "-S", None            ],    ["AnonymousBandwidth\s+([:0-9]+)",     "-t", None            ],    ["UserBandwidth\s+([:0-9]+)",          "-T", None            ],    ["Quota\s+([:0-9]+)",                  "-n", None            ],    ["Umask\s+(\d+):(\d+)",                "-U", None, ":", None ],    ["MinUID\s+(\d+)",                     "-u", None            ],    ["AllowUserFXP\s+yes",                 "-w"                  ],    ["AllowAnonymousFXP\s+yes",            "-W"                  ],    ["ProhibitDotFilesWrite\s+yes",        "-x"                  ],    ["ProhibitDotFilesRead\s+yes",         "-X"                  ],    ["AllowDotFiles\s+yes",                "-z"                  ],    ["AutoRename\s+yes",                   "-r"                  ],    ["AnonymousCantUpload\s+yes",          "-i"                  ],    ["TrustedIP\s+(\S+)",                  "-V", None            ],    ["LogPID\s+yes",                       "-1"                  ],    ["AltLog\s+(\S+)",                     "-O", None            ],    ["NoChmod\s+yes",                      "-R"                  ],    ["KeepAllFiles\s+yes",                 "-K"                  ],    ["CreateHomeDir\s+yes",                "-j"                  ],    ["NoRename\s+yes",                     "-G"                  ],    ["CustomerProof\s+yes",                "-Z"                  ],    ["NoTruncate\s+yes",                   "-0"                  ],        ["PIDFile\s+(\S+)",                    "-g", None            ],    ["PerUserLimits\s+([:0-9]+)",          "-y", None            ],    ["TLSAuth\s+yes",                      "-Y", None            ])for option in option_tuple:    option[0] = re.compile(option[0], re.IGNORECASE)def build_argument(match, controls):    """construct an argument string    match:    a match object containing argument values    controls: a list controlling the format of the argument    Return parameter as string"""    argument = ""    value = 1    for control in controls:        if control:            # concat the literal string            argument = argument + control        else:            # concat a value            argument = argument + match.group(value)            value = value + 1    return argumentdef parse(file_obj):    """parse/extract a pure-ftpd configuration    file_obj: a readlines() capable object containing the configurion    Returns list of arguments as appropriate for exec()"""    args = [pureftpd]    for line in file_obj.readlines():        if comment.search(line):            continue        for option in option_tuple:            match = option[0].search(line)            if match:                args.append(option[1])                if len(option) <= 2:                    # The option takes no argument                    continue                argument = build_argument(match, option[2:])                args.append(argument)    return argsdef parse_filename(filename = conffile):    """parse/extract a pure-ftpd from a named file    filename: text path to file    Returns list of arguments as appropriate for exec()"""    file_obj = open(filename)    return parse(file_obj)if __name__ == '__main__':    args = parse_filename()    ## debug    #print str(args)    print "Running:", args + argv    os.execv(pureftpd, args + argv)

⌨️ 快捷键说明

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