Source code for cobbler.cobblerd

"""
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)