Example #1
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()
Example #2
0
	def testMakePidfile(self):
		misc.makePidfile()
		fh = open(tmpfile)
		self.failUnless(os.getpid() == int(fh.read()))
Example #3
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()
Example #4
0
	def testMakePidfile(self):
		misc.makePidfile()
		fh = open(tmpfile)
		self.failUnless(os.getpid() == int(fh.read()))