Пример #1
0
def readMainConf():
    """Read main configuration data
		Input: none
		Output: none
	"""
    global main_config
    # read path to config file from CLI
    main_config.readCli()
    # apply config to enable/disable logging
    main_config.applyConfig()

    # read config file
    info("--- Reading configuration ---")
    confFilePath = main_config["PATHS"]["config_file"]
    parsedFiles = main_config.readFiles(confFilePath)
    # check if all neccessary files are read
    if confFilePath not in parsedFiles:
        from bsdradius import misc

        misc.quit("Can not read required configuration files", 1)

        # read CLI again to overwrite options from file
    main_config.readCli()
    # apply config to avoid overwritten values from config file
    main_config.applyConfig()
Пример #2
0
def execShutdownModules():
	"""Execute all shutdown-capable modules
		Input: none
		Output: none
	"""
	for moduleName, module in loadedModules.iteritems():
		if module.shutdownCapable:
			try:
				module.shutdown_funct()
			# catch all exceptions, report them to user and shutdown server
			except:
				misc.printException()
				misc.quit('Can not execute shutdown function in module "%s"' % moduleName, 1)
Пример #3
0
def execShutdownModules():
    """Execute all shutdown-capable modules
		Input: none
		Output: none
	"""
    for moduleName, module in loadedModules.iteritems():
        if module.shutdownCapable:
            try:
                module.shutdown_funct()
            # catch all exceptions, report them to user and shutdown server
            except:
                misc.printException()
                misc.quit(
                    'Can not execute shutdown function in module "%s"' %
                    moduleName, 1)
Пример #4
0
def execShutdownModules():
	"""Execute all shutdown-capable modules
		Input: none
		Output: none
	"""
	for moduleName, module in loadedModules.iteritems():
		if module.shutdownCapable:
			# prepare and print log message
			modstr = '### Shutdown module "%s" ###' % module.name
			framestr = ('#' * len(modstr))
			info ('%s\n%s\n%s' % (framestr, modstr, framestr))
			try:
				module.shutdown_funct()
			# catch all exceptions, report them to user and shutdown server
			except:
				misc.printException()
				misc.quit('Can not execute shutdown function in module "%s"' % moduleName, 1)
Пример #5
0
def execShutdownModules():
	"""Execute all shutdown-capable modules
		Input: none
		Output: none
	"""
	for moduleName, module in loadedModules.iteritems():
		if module.shutdownCapable:
			# prepare and print log message
			modstr = '### Shutdown module "%s" ###' % module.name
			framestr = ('#' * len(modstr))
			info ('%s\n%s\n%s' % (framestr, modstr, framestr))
			try:
				module.shutdown_funct()
			# catch all exceptions, report them to user and shutdown server
			except:
				misc.printException()
				misc.quit('Can not execute shutdown function in module "%s"' % moduleName, 1)
Пример #6
0
def readMainConf():
    """Read main configuration data
		Input: none
		Output: none
	"""
    global main_config
    # read path to config file from CLI
    main_config.readCli()
    # apply config to enable/disable logging
    main_config.applyConfig()

    # read config file
    info('--- Reading configuration ---')
    confFilePath = main_config['PATHS']['config_file']
    parsedFiles = main_config.readFiles(confFilePath)
    # check if all neccessary files are read
    if confFilePath not in parsedFiles:
        from bsdradius import misc
        misc.quit("Can not read required configuration files", 1)

    # read CLI again to overwrite options from file
    main_config.readCli()
    # apply config to avoid overwritten values from config file
    main_config.applyConfig()
Пример #7
0
def loadModules():
    """Load all configured modules. Shutdown server if loading unsuccessful.
		Input: none
		Output: none
	"""
    global loadedModules
    global authzModules
    global acctModules
    global authcModules
    if not modulesConfig:
        return

    disabledModules = []  # list of modules disabled by user
    userModDir = main_config['PATHS']['user_module_dir']
    # try to import modules
    for moduleName, tokens in modulesConfig.items():
        # check if module is enabled
        if not modulesConfig.getbool(moduleName, 'enable'):
            disabledModules.append(moduleName)
            debug('WARNING: Module "%s" disabled by user. Skipping.' %
                  moduleName)
            continue

        debug('Loading module: ', moduleName)
        mod = BsdRadiusModule(moduleName)
        try:
            # read custom config file
            if tokens['configfile']:
                mod.radParsedConfig = readModCustomConfig(tokens['configfile'])
            # load python modules and functions for BSDRadius module
            if (tokens['startup_module']):
                mod.startup_module = importModule(tokens['startup_module'],
                                                  userModDir)
                mod.startup_funct = loadFunction(mod.startup_module,
                                                 tokens['startup_function'])
                mod.startupCapable = True
                mod.startup_module.radParsedConfig = mod.radParsedConfig
            if (tokens['authorization_module']):
                mod.authz_module = importModule(tokens['authorization_module'],
                                                userModDir)
                mod.authz_funct = loadFunction(
                    mod.authz_module, tokens['authorization_function'])
                mod.authorizationCapable = True
                mod.authz_module.radParsedConfig = mod.radParsedConfig
            if (tokens['authentication_module']):
                mod.authc_module = importModule(
                    tokens['authentication_module'], userModDir)
                mod.authc_funct = loadFunction(
                    mod.authc_module, tokens['authentication_function'])
                mod.authenticationCapable = True
                mod.authc_module.radParsedConfig = mod.radParsedConfig
            if (tokens['accounting_module']):
                mod.acct_module = importModule(tokens['accounting_module'],
                                               userModDir)
                mod.acct_funct = loadFunction(mod.acct_module,
                                              tokens['accounting_function'])
                mod.accountingCapable = True
                mod.acct_module.radParsedConfig = mod.radParsedConfig
            if (tokens['shutdown_module']):
                mod.shutdown_module = importModule(tokens['shutdown_module'],
                                                   userModDir)
                mod.shutdown_funct = loadFunction(mod.shutdown_module,
                                                  tokens['shutdown_function'])
                mod.shutdownCapable = True
                mod.shutdown_module.radParsedConfig = mod.radParsedConfig
        # catch all exceptions, report them to user and shutdown server
        except:
            misc.printException()
            misc.quit('Can not load BSD Radius server modules', 1)
        else:
            loadedModules[moduleName] = mod
            debug(mod)

    info('Setting order of authorization modules')
    # set module executing order in authorization and accounting phases
    authModuleOrder = main_config['AUTHORIZATION']['modules'].split(',')
    for moduleName in authModuleOrder:
        moduleName = moduleName.strip()
        if moduleName in disabledModules:
            continue
        if moduleName not in loadedModules:
            misc.quit('Module "%s" not loaded' % moduleName, 1)
        # make list of authorization module references
        if not loadedModules[moduleName].authorizationCapable:
            misc.quit('Module "%s" not authorization capable' % moduleName, 1)
        authzModules.append(loadedModules[moduleName])
    info('Mapping auth types with modules')
    authTypes = main_config['AUTH_TYPES']
    for authType, moduleName in authTypes.items():
        authType = authType.strip()
        moduleName = moduleName.strip()
        if moduleName in disabledModules:
            continue
        if moduleName not in loadedModules:
            misc.quit('Module "%s" not loaded' % moduleName, 1)
        if not loadedModules[moduleName].authenticationCapable:
            misc.quit('Module "%s" not authentication capable' % moduleName, 1)
        authcModules[authType] = loadedModules[moduleName]
    info('Setting order of accounting modules')
    acctModuleOrder = main_config['ACCOUNTING']['modules'].split(',')
    for moduleName in acctModuleOrder:
        moduleName = moduleName.strip()
        if moduleName in disabledModules:
            continue
        if moduleName not in loadedModules:
            misc.quit('Module "%s" not loaded' % moduleName, 1)
        if not loadedModules[moduleName].accountingCapable:
            misc.quit('Module "%s" not accounting capable' % moduleName, 1)
        acctModules.append(loadedModules[moduleName])
Пример #8
0
def main():
    """Prepare and execute server
	"""
    # make sure that keyboard interrupt stops our server
    # and clean up before exiting
    signal.signal(signal.SIGINT, misc.killSignalHandler)
    signal.signal(signal.SIGTERM, misc.killSignalHandler)

    #	try:
    #		import psyco
    #		psyco.full()
    #		print ('--- Running psyco ---')
    #	except:
    #		print('Using psyco failed')

    # read main configuration data
    Config.readMainConf()
    main_config = Config.main_config
    debug(main_config)

    # fork and run as daemon
    if mayRunInBackground and not main_config['SERVER']['foreground']:
        info('Daemonizing...')
        childProcId = os.fork()
        if childProcId != 0:
            sys.exit(0)

    # store pid in file
    user = main_config['SERVER']['user']
    group = main_config['SERVER']['group']
    runDirPath = main_config['PATHS']['run_dir']
    if not misc.checkDir(runDirPath, user=user, group=group):
        misc.quit("Checking %s directory failed" % runDirPath, 1)
    misc.makePidfile()

    # check and/or create log directory
    logDirPath = main_config['PATHS']['log_dir']
    if not misc.checkDir(logDirPath, user=user, group=group):
        misc.quit("Checking %s directory failed" % logDirPath, 1)

    # open log file
    logFilePath = main_config['PATHS']['server_log_file']
    if logFilePath and main_config['SERVER']['log_to_file']:
        info('--- Opening log file ---')
        # open file
        try:
            logger.logFile = open(logFilePath, 'a+')


#			misc.setOwner(logFilePath, user, group)
        except:
            misc.printExceptionError()
            quit('Can not open logfile')

    # parse dictionaries
    info('--- Parsing dictionary files ---')
    radiusDict = dictionary.Dictionary(main_config['PATHS']['dictionary_file'])

    # connect to database
    if main_config['DATABASE']['enable']:
        info('--- Connecting to database ---')
        # set driver name
        if main_config['DATABASE']['type'] == 'postgresql':
            DatabaseConnection.dbadapterName = 'psycopg'
        else:
            DatabaseConnection.dbadapterName = 'MySQLdb'

        # connect to host and store connection globally available
        try:
            dbh1 = DatabaseConnection.DatabaseConnection.getHandler(
                'bsdradius dbh1')
            dbh1.connect(host=main_config['DATABASE']['host'],
                         user=main_config['DATABASE']['user'],
                         password=main_config['DATABASE']['pass'],
                         dbname=main_config['DATABASE']['name'])
        except:
            misc.printExceptionError()
            misc.quit(
                "Error connecting to database. Check DATABASE section in config file.",
                1)

    # start server itself
    authport = main_config["SERVER"]["auth_port"]
    acctport = main_config["SERVER"]["acct_port"]
    srv = BsdRadiusServer.BsdRadiusServer(dict = radiusDict, authport = authport, \
     acctport = acctport)

    # add valid server client hosts from file
    if main_config['PATHS']['clients_file']:
        info('--- Reading server clients from file ---')
        clientsConf = Config.Config()
        clientsConf.readFiles([main_config['PATHS']['clients_file']])
        srv.addClientHosts(clientsConf)
    # add valid server client hosts from DB
    # overwrite hosts from file
    if main_config['DATABASE']['enable']:
        info('--- Reading server clients from DB ---')
        confDb = ConfigDb(dbh1)
        confDb.ReadClients()
        srv.addClientHosts(confDb['CLIENTS'])

    debug('--- Clients: ---')
    for addr in srv.hosts:
        debug('%s: %s' % (addr, srv.hosts[addr].name))

    # bind to IP address (default: all)
    srv.BindToAddress(main_config['SERVER']['home'])

    # switch to nonprivileged user
    misc.switchUid(user, group)

    # Load BSD Radius server modules.
    # Do it just before starting the server to provide modules with maximum info.
    info('--- Reading module configuration ---')
    modules.readConfig([
        main_config['PATHS']['modules_file'],
        main_config['PATHS']['user_modules_file']
    ])
    debug('Module configuration:')
    debug(modules.modulesConfig)
    info('--- Loading modules ---')
    modules.loadModules()
    info('--- Executing startup modules ---')
    modules.execStartupModules()

    # run server
    info("--- Starting server ---")
    srv.Run()

    # do some maintenace tasks
    everythingOk = True
    dbEnable = main_config['DATABASE']['enable']
    dbRefreshCounter = 0
    dbRefreshRate = main_config['DATABASE']['refresh_rate']
    while everythingOk:
        time.sleep(1)

        # refresh radius server clients from DB
        if dbEnable:
            dbRefreshCounter += 1
            if dbRefreshCounter >= dbRefreshRate:
                #info ('Refreshing config from DB')
                #debug ('I was waiting for it %s seconds :)' % dbRefreshCounter)
                dbRefreshCounter = 0
                confDb.ReadClients()
                srv.addClientHosts(confDb['CLIENTS'])
                # print only changed clients

    # exit program
    misc.quit()
Пример #9
0
def loadModules():
	"""Load all configured modules. Shutdown server if loading unsuccessful.
		Input: none
		Output: none
	"""
	global loadedModules
	global authzModules
	global acctModules
	global authcModules
	if not modulesConfig:
		return
	
	userModDir = main_config['PATHS']['user_module_dir']
	# try to import modules
	for moduleName, tokens in modulesConfig.items():
		debug ('Loading module: ', moduleName)
		mod = BsdRadiusModule(moduleName)
		try:
			if (tokens['startup_module']):
				mod.startup_module = importModule(tokens['startup_module'], userModDir)
				mod.startup_funct = loadFunction(mod.startup_module, tokens['startup_function'])
				mod.startupCapable = True
			if (tokens['authorization_module']):
				mod.authz_module = importModule(tokens['authorization_module'], userModDir)
				mod.authz_funct = loadFunction(mod.authz_module, tokens['authorization_function'])
				mod.authorizationCapable = True
			if (tokens['authentication_module']):
				mod.authc_module = importModule(tokens['authentication_module'], userModDir)
				mod.authc_funct = loadFunction(mod.authc_module, tokens['authentication_function'])
				mod.authenticationCapable = True
			if (tokens['accounting_module']):
				mod.acct_module = importModule(tokens['accounting_module'], userModDir)
				mod.acct_funct = loadFunction(mod.acct_module, tokens['accounting_function'])
				mod.accountingCapable = True
			if (tokens['shutdown_module']):
				mod.shutdown_module = importModule(tokens['shutdown_module'], userModDir)
				mod.shutdown_funct = loadFunction(mod.shutdown_module, tokens['shutdown_function'])
				mod.shutdownCapable = True
		# catch all exceptions, report them to user and shutdown server
		except:
			misc.printException()
			misc.quit('Can not load BSD Radius server modules', 1)
		else:
			loadedModules[moduleName] = mod
			debug (mod)
	
	info ('Setting order of authorization modules')
	# set module executing order in authorization and accounting phases
	authModuleOrder = main_config['AUTHORIZATION']['modules'].split(',')
	for moduleName in authModuleOrder:
		moduleName = moduleName.strip()
		if moduleName not in loadedModules:
			misc.quit('Module "%s" not loaded' % moduleName, 1)
		# make list of authorization module references
		if not loadedModules[moduleName].authorizationCapable:
			misc.quit('Module "%s" not authorization capable' % moduleName, 1)
		authzModules.append(loadedModules[moduleName])
	info ('Mapping auth types with modules')
	authTypes = main_config['AUTH_TYPES']
	for authType, moduleName in authTypes.items():
		authType = authType.strip()
		moduleName = moduleName.strip()
		if moduleName not in loadedModules:
			misc.quit('Module "%s" not loaded' % moduleName, 1)
		if not loadedModules[moduleName].authenticationCapable:
			misc.quit('Module "%s" not authentication capable' % moduleName, 1)
		authcModules[authType] = loadedModules[moduleName]
	info ('Setting order of accounting modules')
	acctModuleOrder = main_config['ACCOUNTING']['modules'].split(',')
	for moduleName in acctModuleOrder:
		moduleName = moduleName.strip()
		if moduleName not in loadedModules:
			misc.quit('Module "%s" not loaded' % moduleName, 1)
		if not loadedModules[moduleName].accountingCapable:
			misc.quit('Module "%s" not accounting capable' % moduleName, 1)
		acctModules.append(loadedModules[moduleName])
Пример #10
0
def main():
	"""Prepare and execute server
	"""
	# make sure that keyboard interrupt stops our server
	# and clean up before exiting
	signal.signal(signal.SIGINT, misc.killSignalHandler)
	signal.signal(signal.SIGTERM, misc.killSignalHandler)
	
#	try:
#		import psyco
#		psyco.full()
#		print ('--- Running psyco ---')
#	except:
#		print('Using psyco failed')
	
	# read main configuration data
	Config.readMainConf()
	main_config = Config.main_config
	debug (main_config)
	
	# fork and run as daemon
	if mayRunInBackground and not main_config['SERVER']['foreground']:
		info ('Daemonizing...')
		childProcId = os.fork()
		if childProcId != 0:
			sys.exit(0)
	
	# store pid in file
	user = main_config['SERVER']['user']
	group = main_config['SERVER']['group']
	runDirPath = main_config['PATHS']['run_dir']
	if not misc.checkDir(runDirPath, user = user, group = group):
		misc.quit("Checking %s directory failed" % runDirPath, 1)
	misc.makePidfile()
	
	# check and/or create log directory
	logDirPath = main_config['PATHS']['log_dir']
	if not misc.checkDir(logDirPath, user = user, group = group):
		misc.quit("Checking %s directory failed" % logDirPath, 1)
	
	# open log file
	logFilePath = main_config['PATHS']['server_log_file']
	if logFilePath and main_config['SERVER']['log_to_file']:
		info ('--- Opening log file ---')
		# open file
		try:
			logger.logFile = open(logFilePath, 'a+')
#			misc.setOwner(logFilePath, user, group)
		except:
			misc.printExceptionError()
			quit('Can not open logfile')
	
	# parse dictionaries
	info ('--- Parsing dictionary files ---')
	radiusDict = dictionary.Dictionary(main_config['PATHS']['dictionary_file'])
	
	# connect to database
	if main_config['DATABASE']['enable']:
		info ('--- Connecting to database ---')
		# set driver name
		if main_config['DATABASE']['type'] == 'postgresql':
			DatabaseConnection.dbadapterName = 'psycopg'
		else:
			DatabaseConnection.dbadapterName = 'MySQLdb'
			
		# connect to host and store connection globally available
		try:
			dbh1 = DatabaseConnection.DatabaseConnection.getHandler('bsdradius dbh1')
			dbh1.connect (
				host = main_config['DATABASE']['host'],
				user = main_config['DATABASE']['user'],
				password = main_config['DATABASE']['pass'],
				dbname = main_config['DATABASE']['name'] )
		except:
			misc.printExceptionError()
			misc.quit("Error connecting to database. Check DATABASE section in config file.", 1)
	
	# start server itself
	authport = main_config["SERVER"]["auth_port"]
	acctport = main_config["SERVER"]["acct_port"]
	srv = BsdRadiusServer.BsdRadiusServer(dict = radiusDict, authport = authport, \
		acctport = acctport)
	
	# add valid server client hosts from file
	if main_config['PATHS']['clients_file']:
		info ('--- Reading server clients from file ---')
		clientsConf = Config.Config()
		clientsConf.readFiles([main_config['PATHS']['clients_file']])
		srv.addClientHosts(clientsConf)
	# add valid server client hosts from DB
	# overwrite hosts from file
	if main_config['DATABASE']['enable']:
		info ('--- Reading server clients from DB ---')
		confDb = ConfigDb(dbh1)
		confDb.ReadClients()
		srv.addClientHosts(confDb['CLIENTS'])
				
	debug ('--- Clients: ---')
	for addr in srv.hosts:
		debug ('%s: %s' % (addr, srv.hosts[addr].name))
		
	# bind to IP address (default: all)
	srv.BindToAddress(main_config['SERVER']['home'])
	
	# switch to nonprivileged user
	misc.switchUid(user, group)
	
	# Load BSD Radius server modules.
	# Do it just before starting the server to provide modules with maximum info.
	info ('--- Reading module configuration ---')
	modules.readConfig([main_config['PATHS']['modules_file'], main_config['PATHS']['user_modules_file']])
	debug ('Module configuration:')
	debug (modules.modulesConfig)
	info ('--- Loading modules ---')
	modules.loadModules()
	info ('--- Executing startup modules ---')
	modules.execStartupModules()
	
	# run server
	info ("--- Starting server ---")
	srv.Run()
	
	# do some maintenace tasks
	everythingOk = True
	dbEnable = main_config['DATABASE']['enable']
	dbRefreshCounter = 0
	dbRefreshRate = main_config['DATABASE']['refresh_rate']
	while everythingOk:
		time.sleep(1)
		
		# refresh radius server clients from DB
		if dbEnable:
			dbRefreshCounter += 1
			if dbRefreshCounter >= dbRefreshRate:
				#info ('Refreshing config from DB')
				#debug ('I was waiting for it %s seconds :)' % dbRefreshCounter)
				dbRefreshCounter = 0
				confDb.ReadClients()
				srv.addClientHosts(confDb['CLIENTS'])
				# print only changed clients
	
	
	# exit program
	misc.quit()
Пример #11
0
def loadModules():
	"""Load all configured modules. Shutdown server if loading unsuccessful.
		Input: none
		Output: none
	"""
	global loadedModules
	global authzModules
	global acctModules
	global authcModules
	if not modulesConfig:
		return
	
	disabledModules = [] # list of modules disabled by user
	userModDir = main_config['PATHS']['user_module_dir']
	# try to import modules
	for moduleName, tokens in modulesConfig.items():
		# check if module is enabled
		if not modulesConfig.getbool(moduleName, 'enable'):
			disabledModules.append(moduleName)
			debug ('WARNING: Module "%s" disabled by user. Skipping.' % moduleName)
			continue
		
		debug ('Loading module: ', moduleName)
		mod = BsdRadiusModule(moduleName)
		try:
			# read custom config file
			if tokens['configfile']:
				mod.radParsedConfig = readModCustomConfig(tokens['configfile'])
			# set up additional path for python modules and packages
			# it must be done before actually importing modules
			if tokens['pythonpath']:
				for pth in tokens['pythonpath'].split(':'):
					if pth not in sys.path:
						sys.path.insert(0, pth)
						debug ('Added additional pythonpath: %s' % pth)
			# load python modules and functions for BSDRadius module
			if (tokens['startup_module']):
				mod.startup_module = importModule(tokens['startup_module'], userModDir)
				mod.startup_funct = loadFunction(mod.startup_module, tokens['startup_function'])
				mod.startupCapable = True
				mod.startup_module.radParsedConfig = mod.radParsedConfig
			if (tokens['authorization_module']):
				mod.authz_module = importModule(tokens['authorization_module'], userModDir)
				mod.authz_funct = loadFunction(mod.authz_module, tokens['authorization_function'])
				mod.authorizationCapable = True
				mod.authz_module.radParsedConfig = mod.radParsedConfig
			if (tokens['authentication_module']):
				mod.authc_module = importModule(tokens['authentication_module'], userModDir)
				mod.authc_funct = loadFunction(mod.authc_module, tokens['authentication_function'])
				mod.authenticationCapable = True
				mod.authc_module.radParsedConfig = mod.radParsedConfig
			if (tokens['accounting_module']):
				mod.acct_module = importModule(tokens['accounting_module'], userModDir)
				mod.acct_funct = loadFunction(mod.acct_module, tokens['accounting_function'])
				mod.accountingCapable = True
				mod.acct_module.radParsedConfig = mod.radParsedConfig
			if (tokens['shutdown_module']):
				mod.shutdown_module = importModule(tokens['shutdown_module'], userModDir)
				mod.shutdown_funct = loadFunction(mod.shutdown_module, tokens['shutdown_function'])
				mod.shutdownCapable = True
				mod.shutdown_module.radParsedConfig = mod.radParsedConfig
		# catch all exceptions, report them to user and shutdown server
		except:
			misc.printException()
			misc.quit('Can not load BSD Radius server modules', 1)
		else:
			loadedModules[moduleName] = mod
			debug (mod)
	
	info ('Setting order of authorization modules')
	# set module executing order in authorization and accounting phases
	authModuleOrder = main_config['AUTHORIZATION']['modules'].split(',')
	for moduleName in authModuleOrder:
		moduleName = moduleName.strip()
		if moduleName in disabledModules:
			continue
		if moduleName not in loadedModules:
			misc.quit('Module "%s" not loaded' % moduleName, 1)
		# make list of authorization module references
		if not loadedModules[moduleName].authorizationCapable:
			misc.quit('Module "%s" not authorization capable' % moduleName, 1)
		authzModules.append(loadedModules[moduleName])
	info ('Mapping auth types with modules')
	authTypes = main_config['AUTH_TYPES']
	for authType, moduleName in authTypes.items():
		authType = authType.strip()
		moduleName = moduleName.strip()
		if moduleName in disabledModules:
			continue
		if moduleName not in loadedModules:
			misc.quit('Module "%s" not loaded' % moduleName, 1)
		if not loadedModules[moduleName].authenticationCapable:
			misc.quit('Module "%s" not authentication capable' % moduleName, 1)
		authcModules[authType] = loadedModules[moduleName]
	info ('Setting order of accounting modules')
	acctModuleOrder = main_config['ACCOUNTING']['modules'].split(',')
	for moduleName in acctModuleOrder:
		moduleName = moduleName.strip()
		if moduleName in disabledModules:
			continue
		if moduleName not in loadedModules:
			misc.quit('Module "%s" not loaded' % moduleName, 1)
		if not loadedModules[moduleName].accountingCapable:
			misc.quit('Module "%s" not accounting capable' % moduleName, 1)
		acctModules.append(loadedModules[moduleName])
Пример #12
0
	def testQuit(self):
		try:
			misc.quit()
		except SystemExit, e:
			pass
Пример #13
0
	def testQuit(self):
		try:
			misc.quit()
		except SystemExit, e:
			pass