Ejemplo n.º 1
0
    def convert_old_style(self, conf_arr):

        dop = DictOp()
        dop.addconf("__",{})
        orders = []
        for cnt in range(0,20):
            try:
                try:
                    exec("action  = conf_arr['ADDRESS%d']['action']" % cnt)
                except:
                    action = None

                exec("address = conf_arr['ADDRESS%d']['value']" % cnt)
                exec("netmask = conf_arr['NETMASK%d']['value']" % cnt)
                exec("gateway = conf_arr['GATEWAY%d']['value']" % cnt)

                target = "%s/%s" % (address,netmask,)
                net = NetworkAddress(target)
                try:
                    target = net.cidr
                except:
                    pass
                dop.add("__",[target],gateway)

                if action == "delete":
                    dop.delete("__",[target])

                orders.append([target])
            except:
                pass

        if len(orders) != 0:
            dop.add("__",['@ORDERS'],orders)

        return dop.getconf("__")
Ejemplo n.º 2
0
    def convert_old_style(self, conf_arr):

        dop = DictOp()
        dop.addconf("__",{})
        orders = []
        for cnt in range(0,20):
            try:
                try:
                    exec("action  = conf_arr['ADDRESS%d']['action']" % cnt)
                except:
                    action = None

                exec("address = conf_arr['ADDRESS%d']['value']" % cnt)
                exec("netmask = conf_arr['NETMASK%d']['value']" % cnt)
                exec("gateway = conf_arr['GATEWAY%d']['value']" % cnt)

                target = "%s/%s" % (address,netmask,)
                net = NetworkAddress(target)
                try:
                    target = net.cidr
                except:
                    pass
                dop.add("__",[target],gateway)

                if action == "delete":
                    dop.delete("__",[target])

                orders.append([target])
            except:
                pass

        if len(orders) != 0:
            dop.add("__",['@ORDERS'],orders)

        return dop.getconf("__")
Ejemplo n.º 3
0
    def _new_lines(self, search_key, new_key):

        try:
            attrs = self.dop.get(self._module, search_key, with_attr=True)
            action = attrs['action']
            iscomment = attrs['comment']
            val = attrs['value']
        except:
            action = self.dop.action(self._module, search_key)
            iscomment = self.dop.iscomment(self._module, search_key)
            val = self.dop.get(self._module, search_key)
            pass

        #print val
        dop = DictOp()
        dop.addconf('__', {})
        if action == "delete":
            dop.add('__', new_key, val)
            dop.delete('__', new_key)
        elif action == "set":
            dop.set('__', new_key, val)
        else:
            dop.add('__', new_key, val)
        if iscomment is True:
            dop.comment('__', new_key)

        #preprint_r(dop.getconf('__'))
        new_lines = self._value_to_lines(dop.getconf('__'))
        #print "\n".join(new_lines)

        return new_lines
Ejemplo n.º 4
0
    def _new_lines(self,search_key,new_key):

        try:
            attrs = self.dop.get(self._module,search_key,with_attr=True)
            action    = attrs['action']
            iscomment = attrs['comment']
            val       = attrs['value']
        except:
            action    = self.dop.action(self._module,search_key)
            iscomment = self.dop.iscomment(self._module,search_key)
            val       = self.dop.get(self._module,search_key)
            pass

        #print val
        dop = DictOp()
        dop.addconf('__',{})
        if action == "delete":
            dop.add('__',new_key,val)
            dop.delete('__',new_key)
        elif action == "set":
            dop.set('__',new_key,val)
        else:
            dop.add('__',new_key,val)
        if iscomment is True:
            dop.comment('__',new_key)

        #preprint_r(dop.getconf('__'))
        new_lines = self._value_to_lines(dop.getconf('__'))
        #print "\n".join(new_lines)

        return new_lines
Ejemplo n.º 5
0
    def convert_new_style(self, conf_arr):

        dop = DictOp()
        dop.addconf("__",{})
        orders = []

        try:
            old_orders = conf_arr['@ORDERS']['value']
        except:
            old_orders = []

        cnt = 0
        for _k,_v in conf_arr.iteritems():

            if _k[0] != "@":
                net = NetworkAddress(_k)
                try:
                    ipaddr  = net.ipaddr
                    netmask = net.netmask
                    gateway = _v['value']
                    try:
                        action = _v['action']
                    except:
                        action = None
                    try:
                        index = old_orders.index([_k])
                    except:
                        index = cnt

                    dop.add("__",["ADDRESS%d" % index],ipaddr)
                    if action == "delete":
                        dop.delete("__",["ADDRESS%d" % index])
                    orders.insert(cnt*3+0,["ADDRESS%d" % index])

                    dop.add("__",["NETMASK%d" % index],netmask)
                    if action == "delete":
                        dop.delete("__",["NETMASK%d" % index])
                    orders.insert(cnt*3+1,["NETMASK%d" % index])

                    dop.add("__",["GATEWAY%d" % index],gateway)
                    if action == "delete":
                        dop.delete("__",["GATEWAY%d" % index])
                    orders.insert(cnt*3+2,["GATEWAY%d" % index])

                    cnt = cnt + 1
                except:
                    pass

        if len(orders) != 0:
            dop.add("__",['@ORDERS'],orders)

        return dop.getconf("__")
Ejemplo n.º 6
0
    def convert_new_style(self, conf_arr):

        dop = DictOp()
        dop.addconf("__",{})
        orders = []

        try:
            old_orders = conf_arr['@ORDERS']['value']
        except:
            old_orders = []

        cnt = 0
        for _k,_v in conf_arr.iteritems():

            if _k[0] != "@":
                net = NetworkAddress(_k)
                try:
                    ipaddr  = net.ipaddr
                    netmask = net.netmask
                    gateway = _v['value']
                    try:
                        action = _v['action']
                    except:
                        action = None
                    try:
                        index = old_orders.index([_k])
                    except:
                        index = cnt

                    dop.add("__",["ADDRESS%d" % index],ipaddr)
                    if action == "delete":
                        dop.delete("__",["ADDRESS%d" % index])
                    orders.insert(cnt*3+0,["ADDRESS%d" % index])

                    dop.add("__",["NETMASK%d" % index],netmask)
                    if action == "delete":
                        dop.delete("__",["NETMASK%d" % index])
                    orders.insert(cnt*3+1,["NETMASK%d" % index])

                    dop.add("__",["GATEWAY%d" % index],gateway)
                    if action == "delete":
                        dop.delete("__",["GATEWAY%d" % index])
                    orders.insert(cnt*3+2,["GATEWAY%d" % index])

                    cnt = cnt + 1
                except:
                    pass

        if len(orders) != 0:
            dop.add("__",['@ORDERS'],orders)

        return dop.getconf("__")
Ejemplo n.º 7
0
        try:
            self.dop.addconf("parser",{})
            self.dop.set("parser",[PARSER_HOSTS_CONF],conf_arr)
            #self.dop.preprint_r("parser")
            arr = self.dop.getconf("parser")
            self.parser.write_conf(arr,dryrun=dryrun)
        except:
            pass

        return retval

"""
"""
if __name__ == '__main__':
    """Testing
    """
    parser = hostsParser()
    dop = DictOp()
    dop.addconf("dum",parser.read_conf())
    dop.add("dum",['key'],['value',[['comment foo','comment bar'],'comment hoge']])
    print dop.cdp_get("dum",['key'])
    print dop.cdp_get_pre_comment("dum",['key'])
    print dop.cdp_get_post_comment("dum",['key'])
    print dop.cdp_set("dum",['key'],"value2")
    print dop.cdp_set_pre_comment("dum",['key'],["comment foo2","comment bar2","a"])
    print dop.cdp_set_post_comment("dum",['key'],"comment fuga")
    conf = dop.getconf("dum")
    preprint_r(conf)
    parser.write_conf(conf,dryrun=True)
Ejemplo n.º 8
0
        return self.dop.getconf(self._module)

    def write_conf(self, conf_arr={}, extra_args=None, dryrun=False):
        retval = True

        try:
            self.dop.addconf("parser", {})
            self.dop.set("parser", [PARSER_RESOLV_CONF], conf_arr)
            #self.dop.preprint_r("parser")
            arr = self.dop.getconf("parser")
            self.parser.write_conf(arr, dryrun=dryrun)
        except:
            pass

        return retval


"""
"""
if __name__ == '__main__':
    """Testing
    """
    parser = resolvParser()
    dop = DictOp()
    dop.addconf("dum", parser.read_conf())
    dop.comment("dum", "search")
    dop.comment("dum", "nameserver")
    dop.add("dum", "domain", "example.com localdomain")
    conf = dop.getconf("dum")
    parser.write_conf(conf, dryrun=True)
Ejemplo n.º 9
0
        retval = True

        if conf_path is None:
            conf_path = ISCSI_DEFAULT_CONFIG_PATH

        try:
            self.dop.addconf("parser",{})
            self.dop.set("parser",[conf_path],conf_arr)
            #self.dop.preprint_r("parser")
            arr = self.dop.getconf("parser")
            self.parser.write_conf(arr,dryrun=dryrun)
        except:
            pass

        return retval

"""
"""
if __name__ == '__main__':
    """Testing
    """
    parser = iscsidParser()
    dop = DictOp()
    dop.addconf("dum",parser.read_conf())
    dop.add("dum",['key'],['value',[['','comment mae1','comment mae2'],'comment ato']])
    dop.comment("dum",['node.session.iscsi.FastAbort'])
    dop.uncomment("dum",['node.session.iscsi.FastAbort'])
    conf = dop.getconf("dum")
    #preprint_r(conf)
    parser.write_conf(conf,dryrun=True)
Ejemplo n.º 10
0
"""
"""
if __name__ == '__main__':
    """Testing
    """
    parser = collectdParser()

    # 読み込み
    dop = DictOp()
    dop.addconf("dum",parser.read_conf())

    ##########################################################
    # Uniオプション (一箇所しか設定できないオプション) の追加
    ##########################################################
    # 'Foo foo' を追加(設定値リスト形式モードよる addメソッド)
    dop.add("dum",["Foo"],["foo",[["comment foo1","comment foo2"],"comment foo3"]])
    #print dop.cdp_get("dum",["Foo"])
    #print dop.cdp_get_pre_comment("dum",["Foo"])
    #print dop.cdp_get_post_comment("dum",["Foo"])
    dop.insert_order("dum",["Foo"])

    # 'Bar bar' を追加(設定値文字列形式モードによる cdp_setメソッド)
    dop.cdp_set("dum",["Bar"],"bar")
    dop.cdp_set_pre_comment("dum",["Bar"],["","comment bar1","comment bar2"])
    dop.cdp_set_post_comment("dum",["Bar"],"comment bar3")
    dop.insert_order("dum",["Bar"])

    ##########################################################
    # Multiオプション (複数設定できるオプション) の追加
    ##########################################################
    # 'LoadPlugin target_hoge' を追加
Ejemplo n.º 11
0
        #self.dop.preprint_r(self._module)
        return self.dop.getconf(self._module)

    def write_conf(self,conf_arr={},extra_args=None,dryrun=False):
        retval = True

        try:
            self.dop.addconf("parser",{})
            self.dop.set("parser",[PARSER_NETWORK_CONF],conf_arr)
            #self.dop.preprint_r("parser")
            arr = self.dop.getconf("parser")
            self.parser.write_conf(arr,dryrun=dryrun)
        except:
            pass

        return retval

"""
"""
if __name__ == '__main__':
    """Testing
    """
    parser = networkParser()
    dop = DictOp()
    dop.addconf("dum",parser.read_conf())
    dop.add("dum","NETWORK","1.0.0.0")
    dop.add("dum","NETWORK2","1.0.0.0")
    dop.delete("dum","NETWORK")
    conf = dop.getconf("dum")
    parser.write_conf(conf,dryrun=True)
Ejemplo n.º 12
0
    """Testing
    """

    parser = collectdpluginParser()

    # 読み込み
    dop = DictOp()
    dop.addconf("dum",parser.read_conf())

    new_plugin_name = "takuma"

    ##########################################################
    # Uniオプション (一箇所しか設定できないオプション) の追加
    ##########################################################
    # 'Foo foo' を追加(設定値リスト形式モードよる addメソッド)
    dop.add("dum",[new_plugin_name,"Foo"],["foo",[["comment foo1","comment foo2"],"comment foo3"]])

    # 'Bar bar' を追加(設定値文字列形式モードによる cdp_setメソッド)
    dop.cdp_set("dum",[new_plugin_name,"Bar"],"bar",multiple_file=True)
    dop.cdp_set_pre_comment("dum",[new_plugin_name,"Bar"],["","comment bar1","comment bar2"],multiple_file=True)
    dop.cdp_set_post_comment("dum",[new_plugin_name,"Bar"],"comment bar3",multiple_file=True)

    ##########################################################
    # Multiオプション (複数設定できるオプション) の追加
    ##########################################################
    # 'LoadPlugin target_hoge' を追加
    dop.cdp_set("dum",[new_plugin_name,"LoadPlugin","target_hoge"],"target_hoge",multiple_file=True,is_opt_multi=True)
    dop.cdp_set_pre_comment("dum",[new_plugin_name,"LoadPlugin","target_hoge"],["","Dis is target_hoge"],multiple_file=True)

    ##########################################################
    # Sectオプション (<ブラケット>ディレクティブオプション) の追加
Ejemplo n.º 13
0
blacklist modulename
    """

    parser = modprobe_confParser()

    # 読み込み
    dop = DictOp()
    dop.addconf("dum", parser.read_conf())

    #########################################
    # include と blacklist パラメータの場合

    # 1、パラメータを追加する
    new_key = '/path/to/include/file1'
    new_value = ''  # valueを空にセットする
    dop.add("dum", ["include", new_key], new_value)
    # コメントにするなら
    dop.comment("dum", ["include", new_key])

    new_key = '/path/to/include/file2'
    new_value = ''  # valueを空にセットする
    dop.add("dum", ["include", new_key], new_value)

    # 2、パラメータを削除する
    delete_key = '/path/to/include/file2'
    dop.delete("dum", ["include", delete_key])
    """
    # こっちの方式は、_multi_paramをTrueにしたときだけ

    # 1、パラメータを追加する
    new_value = '/path/to/include/file'
Ejemplo n.º 14
0
        return retval

"""
"""
if __name__ == '__main__':
    """Testing
    """
    parser = staticrouteParser()

    preprint_r(parser.do_status())
    parser.do_add("eth0","5.6.7.0","172.16.0.1")
    parser.do_del("eth0","5.6.7.0")
    preprint_r(parser.do_status())

    conf_arr = parser.read_conf()
    preprint_r(conf_arr)

    dop = DictOp()
    dop.addconf("parser",conf_arr)
    dop.add("parser",["eth1","2.3.4.5/32"],"172.16.0.10")
    dop.add("parser",["eth1","2.3.4.6/32"],"172.16.0.10")
    dop.add("parser",["eth1","2.3.4.7/32"],"172.16.0.10")
    #dop.insert_order("parser",["eth1","2.3.4.5/32"],0,is_parent_parser=True)
    #dop.insert_order("parser",["eth1","2.3.4.6/32"],0,is_parent_parser=True)
    dop.insert_order("parser",["eth1","2.3.4.7/32"],1,is_parent_parser=True)
    #dop.delete("parser",["eth1","2.3.4.5/32"])
    #dop.delete("parser",["eth1","2.3.4.6/32"])
    conf_arr = dop.getconf("parser")
    preprint_r(conf_arr)
    parser.write_conf(conf_arr,dryrun=True)
Ejemplo n.º 15
0
        #self.dop.preprint_r(self._module)
        return self.dop.getconf(self._module)

    def write_conf(self,conf_arr={},extra_args=None,dryrun=False):
        retval = True

        try:
            self.dop.addconf("parser",{})
            self.dop.set("parser",[PARSER_RESOLV_CONF],conf_arr)
            #self.dop.preprint_r("parser")
            arr = self.dop.getconf("parser")
            self.parser.write_conf(arr,dryrun=dryrun)
        except:
            pass

        return retval

"""
"""
if __name__ == '__main__':
    """Testing
    """
    parser = resolvParser()
    dop = DictOp()
    dop.addconf("dum",parser.read_conf())
    dop.comment("dum","search")
    dop.comment("dum","nameserver")
    dop.add("dum","domain","example.com localdomain")
    conf = dop.getconf("dum")
    parser.write_conf(conf,dryrun=True)
Ejemplo n.º 16
0
blacklist modulename
    """

    parser = modprobe_confParser()

    # 読み込み
    dop = DictOp()
    dop.addconf("dum",parser.read_conf())

    #########################################
    # include と blacklist パラメータの場合

    # 1、パラメータを追加する
    new_key   = '/path/to/include/file1'
    new_value = ''   # valueを空にセットする
    dop.add("dum",["include",new_key],new_value)
    # コメントにするなら
    dop.comment("dum",["include",new_key])

    new_key   = '/path/to/include/file2'
    new_value = ''   # valueを空にセットする
    dop.add("dum",["include",new_key],new_value)

    # 2、パラメータを削除する
    delete_key = '/path/to/include/file2'
    dop.delete("dum",["include",delete_key])

    """
    # こっちの方式は、_multi_paramをTrueにしたときだけ

    # 1、パラメータを追加する
Ejemplo n.º 17
0
class emlParser(Parser):

    _module = "eml"

    def __init__(self):
        self.dop = DictOp()
        self.dop.addconf(self._module,{})

        self.base_parser_name = Parser.__name__

        self.encoding = "UTF-8"
        pass

    def source_file(self):
        try:
            retval = self.get_source_file()
        except:
            retval = []

        return retval

    def _parse_mail(self,mail):
        retval = {}
        try:
            body              = mail.get_payload()
            boundary          = mail.get_boundary()
            charsets          = mail.get_charsets()         # ['iso-8859-1']
            content_charset   = mail.get_content_charset()  # 'iso-8859-1'
            content_maintype  = mail.get_content_maintype() # 'text'
            content_subtype   = mail.get_content_subtype()  # 'plain'
            content_type      = mail.get_content_type()     # 'text/plain'
            default_type      = mail.get_default_type()     # 'text/plain'
            filename          = mail.get_filename()         # ??
            params            = mail.get_params()           # [('text/plain', ''), ('charset', 'iso-8859-1')]
            is_multipart      = mail.is_multipart()         # False
            if type(body) is list:
                new_body = []
                for _mail in body:
                    new_body.append(self._parse_mail(_mail))
                body = new_body
            retval = {}
            retval['body']             = body
            retval['boundary']         = boundary
            retval['charsets']         = charsets
            retval['content_charset']  = content_charset
            retval['content_maintype'] = content_maintype
            retval['content_subtype']  = content_subtype
            retval['content_type']     = content_type
            retval['default_type']     = default_type
            retval['filename']         = filename
            retval['params']           = params
            retval['is_multipart']     = is_multipart
        except:
            pass

        #preprint_r(retval)
        return retval

    def parse(self,file=None,message=None):
        retval = {}
        try:
            if file is not None and os.path.exists(file):
                message = open(file).read()

            mail = email.Parser.Parser().parsestr(message)

            headers  = mail._headers
            msgs     = self._parse_mail(mail)

            if type(msgs['body']) is list:
                rawbody = ""

                if file is not None and os.path.exists(file):
                    f = open(file)
                    line = f.readline()
                    while line:
                        line = f.readline()
                        if line.rstrip() == "":
                            rawbody += line
                            rawbody += ''.join(f.readlines())
                            break
                    f.close
                else:
                    in_body = False
                    for line in message.split("\n"):
                        if line.rstrip() == "":
                            in_body = True
                        if in_body is True:
                            rawbody += line + "\n"

            elif type(msgs['body']) is str:
                rawbody = msgs['body']

            retval["headers"] = headers
            retval["msgs"]    = msgs
            retval["rawbody"] = rawbody

        except:
            pass

        #preprint_r(retval)
        return retval

    def read_conf(self,extra_args=None):
        retval = {}

        self.dop.addconf(self._module,{})

        try:
            self.set_source_file(extra_args["file"])

            for _file in self.source_file():
                if os.path.exists(_file):
                    mail = self.parse(file=_file)

                    headers  = mail['headers']
                    msgs     = mail['msgs']
                    rawbody  = mail['rawbody']

                    self.dop.add(self._module,[_file,'@msgs']   ,msgs)
                    self.dop.add(self._module,[_file,'@headers'],headers)
                    for _header in headers:
                        self.dop.add(self._module,[_file,'header',_header[0]],_header[1])
                    self.dop.add(self._module,[_file,'rawbody'] ,rawbody)

        except:
            pass

        try:
            message = extra_args["message"]

            try:
                message = message.encode(self.encoding)
            except:
                pass

            if message != "" and message is not None:
                mail = self.parse(message=message)

                headers  = mail['headers']
                msgs     = mail['msgs']
                rawbody  = mail['rawbody']

                self.dop.add(self._module,["@message",'@msgs']   ,msgs)
                self.dop.add(self._module,["@message",'@headers'],headers)
                for _header in headers:
                    self.dop.add(self._module,["@message",'header',_header[0]],_header[1])
                self.dop.add(self._module,["@message",'rawbody'] ,rawbody)
        except:
            pass


        return self.dop.getconf(self._module)

    def write_conf(self,conf_arr={},extra_args=None,dryrun=False):
        retval = True

        return retval
Ejemplo n.º 18
0
        return retval

"""
"""
if __name__ == '__main__':
    """Testing
    """
    parser = staticrouteParser()

    preprint_r(parser.do_status())
    parser.do_add("eth0","5.6.7.0","172.16.0.1")
    parser.do_del("eth0","5.6.7.0")
    preprint_r(parser.do_status())

    conf_arr = parser.read_conf()
    preprint_r(conf_arr)

    dop = DictOp()
    dop.addconf("parser",conf_arr)
    dop.add("parser",["eth1","2.3.4.5/32"],"172.16.0.10")
    dop.add("parser",["eth1","2.3.4.6/32"],"172.16.0.10")
    dop.add("parser",["eth1","2.3.4.7/32"],"172.16.0.10")
    #dop.insert_order("parser",["eth1","2.3.4.5/32"],0,is_parent_parser=True)
    #dop.insert_order("parser",["eth1","2.3.4.6/32"],0,is_parent_parser=True)
    dop.insert_order("parser",["eth1","2.3.4.7/32"],1,is_parent_parser=True)
    #dop.delete("parser",["eth1","2.3.4.5/32"])
    #dop.delete("parser",["eth1","2.3.4.6/32"])
    conf_arr = dop.getconf("parser")
    preprint_r(conf_arr)
    parser.write_conf(conf_arr,dryrun=True)
Ejemplo n.º 19
0
        if conf_path is None:
            conf_path = ISCSI_DEFAULT_CONFIG_PATH

        try:
            self.dop.addconf("parser", {})
            self.dop.set("parser", [conf_path], conf_arr)
            #self.dop.preprint_r("parser")
            arr = self.dop.getconf("parser")
            self.parser.write_conf(arr, dryrun=dryrun)
        except:
            pass

        return retval


"""
"""
if __name__ == '__main__':
    """Testing
    """
    parser = iscsidParser()
    dop = DictOp()
    dop.addconf("dum", parser.read_conf())
    dop.add("dum", ['key'],
            ['value', [['', 'comment mae1', 'comment mae2'], 'comment ato']])
    dop.comment("dum", ['node.session.iscsi.FastAbort'])
    dop.uncomment("dum", ['node.session.iscsi.FastAbort'])
    conf = dop.getconf("dum")
    #preprint_r(conf)
    parser.write_conf(conf, dryrun=True)
Ejemplo n.º 20
0
class emlParser(Parser):

    _module = "eml"

    def __init__(self):
        self.dop = DictOp()
        self.dop.addconf(self._module,{})

        self.base_parser_name = Parser.__name__

        self.encoding = "UTF-8"
        pass

    def source_file(self):
        try:
            retval = self.get_source_file()
        except:
            retval = []

        return retval

    def _parse_mail(self,mail):
        retval = {}
        try:
            body              = mail.get_payload()
            boundary          = mail.get_boundary()
            charsets          = mail.get_charsets()         # ['iso-8859-1']
            content_charset   = mail.get_content_charset()  # 'iso-8859-1'
            content_maintype  = mail.get_content_maintype() # 'text'
            content_subtype   = mail.get_content_subtype()  # 'plain'
            content_type      = mail.get_content_type()     # 'text/plain'
            default_type      = mail.get_default_type()     # 'text/plain'
            filename          = mail.get_filename()         # ??
            params            = mail.get_params()           # [('text/plain', ''), ('charset', 'iso-8859-1')]
            is_multipart      = mail.is_multipart()         # False
            if type(body) is list:
                new_body = []
                for _mail in body:
                    new_body.append(self._parse_mail(_mail))
                body = new_body
            retval = {}
            retval['body']             = body
            retval['boundary']         = boundary
            retval['charsets']         = charsets
            retval['content_charset']  = content_charset
            retval['content_maintype'] = content_maintype
            retval['content_subtype']  = content_subtype
            retval['content_type']     = content_type
            retval['default_type']     = default_type
            retval['filename']         = filename
            retval['params']           = params
            retval['is_multipart']     = is_multipart
        except:
            pass

        #preprint_r(retval)
        return retval

    def parse(self,file=None,message=None):
        retval = {}
        try:
            if file is not None and os.path.exists(file):
                message = open(file).read()

            mail = email.Parser.Parser().parsestr(message)

            headers  = mail._headers
            msgs     = self._parse_mail(mail)

            if type(msgs['body']) is list:
                rawbody = ""

                if file is not None and os.path.exists(file):
                    f = open(file)
                    line = f.readline()
                    while line:
                        line = f.readline()
                        if line.rstrip() == "":
                            rawbody += line
                            rawbody += ''.join(f.readlines())
                            break
                    f.close
                else:
                    in_body = False
                    for line in message.split("\n"):
                        if line.rstrip() == "":
                            in_body = True
                        if in_body is True:
                            rawbody += line + "\n"

            elif type(msgs['body']) is str:
                rawbody = msgs['body']

            retval["headers"] = headers
            retval["msgs"]    = msgs
            retval["rawbody"] = rawbody

        except:
            pass

        #preprint_r(retval)
        return retval

    def read_conf(self,extra_args=None):
        retval = {}

        self.dop.addconf(self._module,{})

        try:
            self.set_source_file(extra_args["file"])

            for _file in self.source_file():
                if os.path.exists(_file):
                    mail = self.parse(file=_file)

                    headers  = mail['headers']
                    msgs     = mail['msgs']
                    rawbody  = mail['rawbody']

                    self.dop.add(self._module,[_file,'@msgs']   ,msgs)
                    self.dop.add(self._module,[_file,'@headers'],headers)
                    for _header in headers:
                        self.dop.add(self._module,[_file,'header',_header[0]],_header[1])
                    self.dop.add(self._module,[_file,'rawbody'] ,rawbody)

        except:
            pass

        try:
            message = extra_args["message"]

            try:
                message = message.encode(self.encoding)
            except:
                pass

            if message != "" and message is not None:
                mail = self.parse(message=message)

                headers  = mail['headers']
                msgs     = mail['msgs']
                rawbody  = mail['rawbody']

                self.dop.add(self._module,["@message",'@msgs']   ,msgs)
                self.dop.add(self._module,["@message",'@headers'],headers)
                for _header in headers:
                    self.dop.add(self._module,["@message",'header',_header[0]],_header[1])
                self.dop.add(self._module,["@message",'rawbody'] ,rawbody)
        except:
            pass


        return self.dop.getconf(self._module)

    def write_conf(self,conf_arr={},extra_args=None,dryrun=False):
        retval = True

        return retval
Ejemplo n.º 21
0
    """Testing
    """

    parser = collectdpluginParser()

    # 読み込み
    dop = DictOp()
    dop.addconf("dum", parser.read_conf())

    new_plugin_name = "takuma"

    ##########################################################
    # Uniオプション (一箇所しか設定できないオプション) の追加
    ##########################################################
    # 'Foo foo' を追加(設定値リスト形式モードよる addメソッド)
    dop.add("dum", [new_plugin_name, "Foo"],
            ["foo", [["comment foo1", "comment foo2"], "comment foo3"]])

    # 'Bar bar' を追加(設定値文字列形式モードによる cdp_setメソッド)
    dop.cdp_set("dum", [new_plugin_name, "Bar"], "bar", multiple_file=True)
    dop.cdp_set_pre_comment("dum", [new_plugin_name, "Bar"],
                            ["", "comment bar1", "comment bar2"],
                            multiple_file=True)
    dop.cdp_set_post_comment("dum", [new_plugin_name, "Bar"],
                             "comment bar3",
                             multiple_file=True)

    ##########################################################
    # Multiオプション (複数設定できるオプション) の追加
    ##########################################################
    # 'LoadPlugin target_hoge' を追加
    dop.cdp_set("dum", [new_plugin_name, "LoadPlugin", "target_hoge"],