summaryrefslogtreecommitdiffstats
path: root/src/lib/Bcfg2/Server/Plugins/Cfg/CfgSSLCAKeyCreator.py
blob: 241bce34c675a13aa0d3f140fe2326d8176075a7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
""" Cfg creator that creates SSL keys """

from Bcfg2.Utils import Executor
from Bcfg2.Server.Plugins.Cfg import CfgCreationError, XMLCfgCreator


class CfgSSLCAKeyCreator(XMLCfgCreator):
    """ Cfg creator that creates SSL keys """

    #: Different configurations for different clients/groups can be
    #: handled with Client and Group tags within sslkey.xml
    __specific__ = False

    __basenames__ = ["sslkey.xml"]

    cfg_section = "sslca"

    def create_data(self, entry, metadata):
        self.logger.info("Cfg: Generating new SSL key for %s" % self.name)
        spec = self.XMLMatch(metadata)
        key = spec.find("Key")
        if key is None:
            key = {}
        ktype = key.get('type', 'rsa')
        bits = key.get('bits', '2048')
        if ktype == 'rsa':
            cmd = ["openssl", "genrsa", bits]
        elif ktype == 'dsa':
            cmd = ["openssl", "dsaparam", "-noout", "-genkey", bits]
        result = Executor().run(cmd)
        if not result.success:
            raise CfgCreationError("Failed to generate key %s for %s: %s" %
                                   (self.name, metadata.hostname,
                                    result.error))
        self.write_data(result.stdout, **self.get_specificity(metadata))
        return result.stdout