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

📄 main.py

📁 xen 3.2.2 源码
💻 PY
字号:
#!/usr/bin/python## The Initial Developer of the Original Code is International# Business Machines Corporation. Portions created by IBM# Corporation are Copyright (C) 2005 International Business# Machines Corporation. All Rights Reserved.## 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA#"""Xen security policy generation aid"""import osimport pwdimport grpimport sysimport getoptimport BaseHTTPServerimport CGIHTTPServergHttpPort = 7777gHttpDir  = '/var/lib/xensec_gen'gLogFile  = '/var/log/xen/xensec_gen.log'gUser     = 'nobody'gGroup    = 'nobody'def usage( ):    print >>sys.stderr, 'Usage:  ' + sys.argv[0] + ' [OPTIONS]'    print >>sys.stderr, '  OPTIONS:'    print >>sys.stderr, '  -p, --httpport'    print >>sys.stderr, '     The port on which the http server is to listen'    print >>sys.stderr, '     (default: ' + str( gHttpPort ) + ')'    print >>sys.stderr, '  -d, --httpdir'    print >>sys.stderr, '     The directory where the http server is to serve pages from'    print >>sys.stderr, '     (default: ' + gHttpDir + ')'    print >>sys.stderr, '  -l, --logfile'    print >>sys.stderr, '     The file in which to log messages generated by this command'    print >>sys.stderr, '     (default: ' + gLogFile + ')'    print >>sys.stderr, '  -u, --user'    print >>sys.stderr, '     The user under which this command is to run.  This parameter'    print >>sys.stderr, '     is only used when invoked under the "root" user'    print >>sys.stderr, '     (default: ' + gUser + ')'    print >>sys.stderr, '  -g, --group'    print >>sys.stderr, '     The group under which this command is to run.  This parameter'    print >>sys.stderr, '     is only used when invoked under the "root" user'    print >>sys.stderr, '     (default: ' + gGroup + ')'    print >>sys.stderr, '  -f'    print >>sys.stderr, '     Run the command in the foreground.  The logfile option will be'    print >>sys.stderr, '     ignored and all output will be directed to stdout and stderr.'    print >>sys.stderr, '  -h, --help'    print >>sys.stderr, '     Display the command usage information'def runServer( aServerPort,               aServerClass  = BaseHTTPServer.HTTPServer,               aHandlerClass = CGIHTTPServer.CGIHTTPRequestHandler ):    serverAddress = ( '', aServerPort )    httpd = aServerClass( serverAddress, aHandlerClass )    httpd.serve_forever( )def daemonize( aHttpDir, aLogFile, aUser, aGroup, aFork = 'true' ):    # Do some pre-daemon activities    os.umask( 027 )    if os.getuid( ) == 0:        # If we are running as root, we will change that        uid = pwd.getpwnam( aUser )[2]        gid = grp.getgrnam( aGroup )[2]        if aFork == 'true':            # Change the owner of the log file to the user/group            #   under which the daemon is to run            flog = open( aLogFile, 'a' )            flog.close( )            os.chown( aLogFile, uid, gid )        # Change the uid/gid of the process        os.setgid( gid )        os.setuid( uid )    # Change to the HTTP directory    os.chdir( aHttpDir )    if aFork == 'true':        # Do first fork        try:            pid = os.fork( )            if pid:            # Parent process                return pid        except OSError, e:            raise Exception, e        # First child process, create a new session        os.setsid( )        # Do second fork        try:            pid = os.fork( )            if pid:                # Parent process                os._exit( 0 )        except OSError, e:            raise Exception, e        # Reset stdin/stdout/stderr        fin  = open( '/dev/null',  'r' )        flog = open( aLogFile, 'a' )        os.dup2( fin.fileno( ),  sys.stdin.fileno( ) )        os.dup2( flog.fileno( ), sys.stdout.fileno( ) )        os.dup2( flog.fileno( ), sys.stderr.fileno( ) )def main( ):    httpPort = gHttpPort    httpDir  = gHttpDir    logFile  = gLogFile    user     = gUser    group    = gGroup    doFork   = 'true'    shortOpts = 'd:p:l:u:g:fh'    longOpts  = [ 'httpdir=', 'httpport=', 'logfile=', 'user=', 'group=', 'help' ]    try:        opts, args = getopt.getopt( sys.argv[1:], shortOpts, longOpts )    except getopt.GetoptError, e:        print >>sys.stderr, e        usage( )        sys.exit( )    if len( args ) != 0:        print >>sys.stderr, 'Error: command arguments are not supported'        usage( )        sys.exit( )    for opt, opt_value in opts:        if opt in ( '-h', '--help' ):            usage( )            sys.exit( )        if opt in ( '-d', '--httpdir' ):            httpDir = opt_value        if opt in ( '-p', '--httpport' ):            try:                httpPort = int( opt_value )            except:                print >>sys.stderr, 'Error: HTTP port is not valid'                usage( )                sys.exit( )        if opt in ( '-l', '--logfile' ):            logFile = opt_value        if opt in ( '-u', '--user' ):            user = opt_value        if opt in ( '-g', '--group' ):            group = opt_value        if opt in ( '-f' ):            doFork = 'false'    pid = daemonize( httpDir, logFile, user, group, doFork )    if pid > 0:        sys.exit( )    runServer( httpPort )if __name__ == '__main__':    main( )

⌨️ 快捷键说明

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