"""
cobbler daemon for logging remote syslog traffic during automatic installation
"""
import binascii
import os
import pwd
import sys
import time
from cobbler import api as cobbler_api
from cobbler import remote
from cobbler import utils
[docs]def core(api):
cobbler_api = api
settings = cobbler_api.settings()
xmlrpc_port = settings.xmlrpc_port
regen_ss_file()
do_xmlrpc_tasks(cobbler_api, settings, xmlrpc_port)
[docs]def regen_ss_file():
# this is only used for Kerberos auth at the moment.
# it identifies XMLRPC requests from Apache that have already
# been cleared by Kerberos.
ssfile = "/var/lib/cobbler/web.ss"
fd = open("/dev/urandom", 'rb')
data = fd.read(512)
fd.close()
fd = os.open(ssfile, os.O_CREAT | os.O_RDWR, 0o600)
os.write(fd, binascii.hexlify(data))
os.close(fd)
http_user = "apache"
family = utils.get_family()
if family == "debian":
http_user = "www-data"
elif family == "suse":
http_user = "wwwrun"
os.lchown("/var/lib/cobbler/web.ss", pwd.getpwnam(http_user)[2], -1)
return 1
[docs]def do_xmlrpc_tasks(cobbler_api, settings, xmlrpc_port):
do_xmlrpc_rw(cobbler_api, settings, xmlrpc_port)
[docs]def log(logger, msg):
if logger is not None:
logger.info(msg)
else:
print(msg, file=sys.stderr)
[docs]def do_xmlrpc_rw(cobbler_api, settings, port):
xinterface = remote.ProxiedXMLRPCInterface(cobbler_api, remote.CobblerXMLRPCInterface)
server = remote.CobblerXMLRPCServer(('127.0.0.1', port))
server.logRequests = 0 # don't print stuff
xinterface.logger.debug("XMLRPC running on %s" % port)
server.register_instance(xinterface)
while True:
try:
print("SERVING!")
server.serve_forever()
except IOError:
# interrupted? try to serve again
time.sleep(0.5)
if __name__ == "__main__":
cobbler_api = cobbler_api.CobblerAPI()
settings = cobbler_api.settings()
regen_ss_file()
do_xmlrpc_rw(cobbler_api, settings, 25151)