コード例 #1
0
ファイル: models.py プロジェクト: func09/freenas
    def __init__(self, *args, **kwargs):
        super(JailsConfiguration, self).__init__(*args, **kwargs)
        iface = notifier().guess_default_interface()
        if not iface:
            return

        st = sipcalc_type(iface=iface)
        if not st:
            return

        if not st.is_ipv4():
            return

        if not self.jc_ipv4_network:
            self.jc_ipv4_network = "%s/%d" % (st.network_address,
                                              st.network_mask_bits)

        ha = sipcalc_type(st.host_address) + 1

        if not self.jc_ipv4_network_start:
            self.jc_ipv4_network_start = ha.host_address
        else:
            parts = self.jc_ipv4_network_start.split('/')
            self.jc_ipv4_network_start = parts[0]

        if not self.jc_ipv4_network_end:
            self.jc_ipv4_network_end = st.usable_range[1]
        else:
            parts = self.jc_ipv4_network_end.split('/')
            self.jc_ipv4_network_end = parts[0]
コード例 #2
0
ファイル: models.py プロジェクト: CsMAr51/freenas
    def __init__(self, *args, **kwargs):
        super(JailsConfiguration, self).__init__(*args, **kwargs)
        iface = notifier().guess_default_interface()
        if not iface:
            return

        st = sipcalc_type(iface=iface)
        if not st:
            return

        if not st.is_ipv4():
            return

        if not self.jc_ipv4_network:
            self.jc_ipv4_network = "%s/%d" % (
                st.network_address, st.network_mask_bits)

        ha = sipcalc_type(st.host_address) + 1

        if not self.jc_ipv4_network_start:
            self.jc_ipv4_network_start = ha.host_address
        else:
            parts = self.jc_ipv4_network_start.split('/')
            self.jc_ipv4_network_start = parts[0]

        if not self.jc_ipv4_network_end:
            self.jc_ipv4_network_end = st.usable_range[1]
        else:
            parts = self.jc_ipv4_network_end.split('/')
            self.jc_ipv4_network_end = parts[0]
コード例 #3
0
ファイル: utils.py プロジェクト: jceel/freenas
def guess_ipv6_address():
    ipv4_addr = None

    st_ipv6_network = get_jail_ipv6_network()
    if st_ipv6_network:
        st_ipv6_network_start = get_jail_ipv6_network_start()
        if not st_ipv6_network_start:
            st_ipv6_network_start = sipcalc_type("%s/%d" % (
                st_ipv6_network.network_range[0],
                st_ipv6_network.prefix_length
            ))

        st_ipv6_network_end = get_jail_ipv6_network_end()
        if not st_ipv6_network_end:
            st_ipv6_network_end = sipcalc_type("%s/%d" % (
                st_ipv6_network.network_range[1],
                st_ipv6_network.prefix_length
            ))  

        #ipv6_addr = get_available_ipv6(st_ipv6_network_start,
        #    st_ipv6_network_end,
        #    get_ipv6_exclude_dict()
        #)

    return ipv4_addr
コード例 #4
0
ファイル: utils.py プロジェクト: jceel/freenas
def guess_ipv4_address():
    ipv4_addr = None

    st_ipv4_network = get_jail_ipv4_network()
    if st_ipv4_network:
        st_ipv4_network_start = get_jail_ipv4_network_start()
        if not st_ipv4_network_start:
            st_ipv4_network_start = sipcalc_type("%s/%d" % (
                st_ipv4_network.usable_range[0],
                st_ipv4_network.network_mask_bits
            ))

        st_ipv4_network_end = get_jail_ipv4_network_end()
        if not st_ipv4_network_end:
            st_ipv4_network_end = sipcalc_type("%s/%d" % (
                st_ipv4_network.usable_range[1],
                st_ipv4_network.network_mask_bits
            ))

        ipv4_addr = get_available_ipv4(st_ipv4_network_start,
            st_ipv4_network_end,
            get_ipv4_exclude_dict()
        )

    return ipv4_addr
コード例 #5
0
ファイル: utils.py プロジェクト: Gabba82/freenas
def guess_addresses():
    addresses = {
        'high_ipv4': None,
        'high_ipv6': None,
        'bridge_ipv4': None,
        'bridge_ipv6': None
    }

    ipv4_addr = guess_ipv4_address()
    #ipv4_host_network = get_host_ipv4_network()
    ipv4_jail_network = get_jail_ipv4_network()

    if ipv4_addr:
        addresses['high_ipv4'] = ipv4_addr

    if (ipv4_jail_network and ipv4_addr) and (not ipv4_jail_network.in_network(ipv4_addr)):
        addresses['bridge_ipv4'] = sipcalc_type("%s/%d" % (
            ipv4_jail_network.usable_range[0],
            ipv4_jail_network.network_mask_bits,
        ))

    ipv6_addr = guess_ipv6_address()
    #ipv6_host_network = get_host_ipv6_network()
    ipv6_jail_network = get_jail_ipv6_network()

    if ipv6_addr:
        addresses['high_ipv6'] = ipv6_addr

    if (ipv6_jail_network and ipv6_addr) and (not ipv6_jail_network.in_network(ipv6_addr)):
        addresses['bridge_ipv6'] = sipcalc_type("%s/%d" % (
            ipv6_jail_network.network_range[0],
            ipv6_jail_network.prefix_length,
        ))

    return addresses
コード例 #6
0
ファイル: utils.py プロジェクト: Arcko/freenas
def get_ipv4_address():
    ipv4_addr = None

    st_ipv4_network = get_jail_ipv4_network()
    if st_ipv4_network:
        st_ipv4_network_start = get_jail_ipv4_network_start()
        if not st_ipv4_network_start:
            st_ipv4_network_start = sipcalc_type("%s/%d" % (
                st_ipv4_network.usable_range[0],
                st_ipv4_network.network_mask_bits
            ))

        st_ipv4_network_end = get_jail_ipv4_network_end()
        if not st_ipv4_network_end:
            st_ipv4_network_end = sipcalc_type("%s/%d" % (
                st_ipv4_network.usable_range[1],
                st_ipv4_network.network_mask_bits
            ))

        ipv4_addr = get_available_ipv4(st_ipv4_network_start,
            st_ipv4_network_end,
            get_ipv4_exclude_dict()
        )

    return ipv4_addr
コード例 #7
0
ファイル: utils.py プロジェクト: Arcko/freenas
def get_ipv6_address():
    ipv6_addr = None

    st_ipv6_network = get_jail_ipv6_network()
    if st_ipv6_network:
        st_ipv6_network_start = get_jail_ipv6_network_start()
        if not st_ipv6_network_start:
            st_ipv6_network_start = sipcalc_type("%s/%d" % (
                st_ipv6_network.network_range[0],
                st_ipv6_network.prefix_length
            ))

        st_ipv6_network_end = get_jail_ipv6_network_end()
        if not st_ipv6_network_end:
            st_ipv6_network_end = sipcalc_type("%s/%d" % (
                st_ipv6_network.network_range[1],
                st_ipv6_network.prefix_length
            ))  

        ipv6_addr = get_available_ipv6(st_ipv6_network_start,
            st_ipv6_network_end,
            get_ipv6_exclude_dict()
        )

    return ipv6_addr
コード例 #8
0
ファイル: utils.py プロジェクト: jpaetzel/freenas
def get_ipv4_exclude_dict():
    ipv4_exclude_dict = {}

    w = warden.Warden()
    jails = w.cached_list()
    if not jails:
        return ipv4_exclude_dict

    for j in jails:
        mask = 24
        if j['ipv4']:
            parts = j['ipv4'].split('/')
            if len(parts) == 2:
                mask = int(parts[1])
            sc = sipcalc_type("%s/%d" % (
                parts[0],
                mask
            ))
            ipv4_exclude_dict[str(sc)] = sc

        if j['bridge_ipv4']:
            parts = j['bridge_ipv4'].split('/')
            if len(parts) == 2:
                try:
                    mask = int(parts[1])
                except ValueError:
                    pass
            sc = sipcalc_type("%s/%d" % (
                parts[0],
                mask
            ))
            ipv4_exclude_dict[str(sc)] = sc

        if j['alias_ipv4']:
            amask = mask
            aliases = j['alias_ipv4'].split(',')
            for a in aliases:
                parts = a.split('/')
                if len(parts) == 2:
                    amask = int(parts[1])
                sc = sipcalc_type("%s/%d" % (
                    parts[0],
                    amask
                ))
                ipv4_exclude_dict[str(sc)] = sc

        if j['alias_bridge_ipv4']:
            amask = mask
            aliases = j['alias_bridge_ipv4'].split(',')
            for a in aliases:
                parts = a.split('/')
                if len(parts) == 2:
                    amask = int(parts[1])
                sc = sipcalc_type("%s/%d" % (
                    parts[0],
                    amask
                ))
                ipv4_exclude_dict[str(sc)] = sc

    return ipv4_exclude_dict
コード例 #9
0
ファイル: views.py プロジェクト: mysefs/freenas
def jailsconfiguration_network_info(request):
    data = {
        "jc_ipv4_network": None,
        "jc_ipv4_network_start": None,
        "jc_ipv4_network_end": None,
        "jc_ipv6_network": None,
        "jc_ipv6_network_start": None,
        "jc_ipv6_network_end": None,
    }

    ipv4_iface = notifier().get_default_ipv4_interface()
    if ipv4_iface:
        ipv4_st = sipcalc_type(iface=ipv4_iface)
        if ipv4_st.is_ipv4():
            data["jc_ipv4_network"] = "%s/%d" % (ipv4_st.network_address, ipv4_st.network_mask_bits)
            data["jc_ipv4_network_start"] = str(ipv4_st.usable_range[0]).split("/")[0]
            data["jc_ipv4_network_end"] = str(ipv4_st.usable_range[1]).split("/")[0]

    ipv6_iface = notifier().get_default_ipv6_interface()
    try:
        iface_info = notifier().get_interface_info(ipv6_iface)
        if iface_info["ipv6"] is None:
            raise Exception

        ipv6_addr = iface_info["ipv6"][0]["inet6"]
        if ipv6_addr is None:
            raise Exception

        ipv6_prefix = iface_info["ipv6"][0]["prefixlen"]
        if ipv6_prefix is None:
            raise Exception

        ipv6_st = sipcalc_type("%s/%s" % (ipv6_addr, ipv6_prefix))
        if not ipv6_st:
            raise Exception

        if not ipv6_st.is_ipv6():
            raise Exception

        ipv6_st2 = sipcalc_type(ipv6_st.subnet_prefix_masked)
        if not ipv6_st:
            raise Exception

        if not ipv6_st.is_ipv6():
            raise Exception

        data["jc_ipv6_network"] = "%s/%d" % (ipv6_st2.compressed_address, ipv6_st.prefix_length)

        ipv6_st2 = sipcalc_type(ipv6_st.network_range[0])
        data["jc_ipv6_network_start"] = str(ipv6_st2.compressed_address).split("/")[0]

        ipv6_st2 = sipcalc_type(ipv6_st.network_range[1])
        data["jc_ipv6_network_end"] = str(ipv6_st2.compressed_address).split("/")[0]

    except:
        pass

    content = json.dumps(data)
    return HttpResponse(content, content_type="application/json")
コード例 #10
0
ファイル: forms.py プロジェクト: Thomasvamsterdam/freenas
    def clean(self):
        cdata = self.cleaned_data

        st_ipv4_network = None
        network = cdata.get('jc_ipv4_network', None)
        if network:
            st_ipv4_network = sipcalc_type(network)

        st_ipv6_network = None
        network = cdata.get('jc_ipv6_network', None)
        if network:
            st_ipv6_network = sipcalc_type(network)

        ipv4_start = cdata.get('jc_ipv4_network_start', None)
        if ipv4_start:
            parts = ipv4_start.split('/')
            ipv4_start = parts[0]
            if st_ipv4_network:
                ipv4_start = "%s/%d" % (
                    ipv4_start,
                    st_ipv4_network.network_mask_bits
                )
                if st_ipv4_network.in_network(ipv4_start):
                    cdata['jc_ipv4_network_start'] = ipv4_start

        ipv4_end = cdata.get('jc_ipv4_network_end', None)
        if ipv4_end:
            parts = ipv4_end.split('/')
            ipv4_end = parts[0]
            if st_ipv4_network:
                ipv4_end = "%s/%d" % (
                    ipv4_end,
                    st_ipv4_network.network_mask_bits
                )
                if st_ipv4_network.in_network(ipv4_end):
                    cdata['jc_ipv4_network_end'] = ipv4_end

        ipv6_start = cdata.get('jc_ipv6_network_start', None)
        if ipv6_start:
            parts = ipv6_start.split('/')
            ipv6_start = parts[0]
            if st_ipv6_network:
                ipv6_start = "%s/%d" % (
                    ipv6_start,
                    st_ipv6_network.prefix_length,
                )
                if st_ipv6_network.in_network(ipv6_start):
                    cdata['jc_ipv6_network_start'] = ipv6_start

        ipv6_end = cdata.get('jc_ipv6_network_end', None)
        if ipv6_end:
            parts = ipv6_end.split('/')
            ipv6_end = parts[0]
            if st_ipv6_network:
                ipv6_end = "%s/%d" % (ipv6_end, st_ipv6_network.prefix_length)
                if st_ipv6_network.in_network(ipv6_end):
                    cdata['jc_ipv6_network_end'] = ipv6_end

        return cdata
コード例 #11
0
    def clean(self):
        cdata = self.cleaned_data

        st_ipv4_network = None
        network = cdata.get('jc_ipv4_network', None)
        if network:
            st_ipv4_network = sipcalc_type(network)

        st_ipv6_network = None
        network = cdata.get('jc_ipv6_network', None)
        if network:
            st_ipv6_network = sipcalc_type(network)

        ipv4_start = cdata.get('jc_ipv4_network_start', None)
        if ipv4_start:
            parts = ipv4_start.split('/')
            ipv4_start = parts[0]
            if st_ipv4_network:
                ipv4_start = "%s/%d" % (
                    ipv4_start,
                    st_ipv4_network.network_mask_bits
                )
                if st_ipv4_network.in_network(ipv4_start):
                    cdata['jc_ipv4_network_start'] = ipv4_start

        ipv4_end = cdata.get('jc_ipv4_network_end', None)
        if ipv4_end:
            parts = ipv4_end.split('/')
            ipv4_end = parts[0]
            if st_ipv4_network:
                ipv4_end = "%s/%d" % (
                    ipv4_end,
                    st_ipv4_network.network_mask_bits
                )
                if st_ipv4_network.in_network(ipv4_end):
                    cdata['jc_ipv4_network_end'] = ipv4_end

        ipv6_start = cdata.get('jc_ipv6_network_start', None)
        if ipv6_start:
            parts = ipv6_start.split('/')
            ipv6_start = parts[0]
            if st_ipv6_network:
                ipv6_start = "%s/%d" % (
                    ipv6_start,
                    st_ipv6_network.prefix_length,
                )
                if st_ipv6_network.in_network(ipv6_start):
                    cdata['jc_ipv6_network_start'] = ipv6_start

        ipv6_end = cdata.get('jc_ipv6_network_end', None)
        if ipv6_end:
            parts = ipv6_end.split('/')
            ipv6_end = parts[0]
            if st_ipv6_network:
                ipv6_end = "%s/%d" % (ipv6_end, st_ipv6_network.prefix_length)
                if st_ipv6_network.in_network(ipv6_end):
                    cdata['jc_ipv6_network_end'] = ipv6_end

        return cdata
コード例 #12
0
ファイル: utils.py プロジェクト: dbinoj/freenas
def get_ipv6_exclude_dict():
    ipv6_exclude_dict = {}

    w = warden.Warden()
    jails = w.cached_list()
    if not jails:
        return ipv6_exclude_dict

    for j in jails:
        prefix = 24
        if j['ipv6']:
            parts = j['ipv6'].split('/')
            if len(parts) == 2:
                prefix = int(parts[1])
            sc = sipcalc_type("%s/%d" % (
                parts[0],
                prefix
            ))
            ipv6_exclude_dict[str(sc)] = sc

        if j['bridge_ipv6']:
            parts = j['ipv6'].split('/')
            if len(parts) == 2:
                prefix = int(parts[1])
            sc = sipcalc_type("%s/%d" % (
                parts[0],
                prefix
            ))
            ipv6_exclude_dict[str(sc)] = sc

        if j['alias_ipv6']:
            aprefix = prefix
            aliases = j['alias_ipv6'].split(',')
            for a in aliases:
                parts = a.split('/')
                if len(parts) == 2:
                    aprefix = int(parts[1])
                sc = sipcalc_type("%s/%d" % (
                    parts[0],
                    aprefix
                ))
                ipv6_exclude_dict[str(sc)] = sc

        if j['alias_bridge_ipv6']:
            aprefix = prefix
            aliases = j['alias_bridge_ipv6'].split(',')
            for a in aliases:
                parts = a.split('/')
                if len(parts) == 2:
                    aprefix = int(parts[1])
                sc = sipcalc_type("%s/%d" % (
                    parts[0],
                    aprefix
                ))
                ipv6_exclude_dict[str(sc)] = sc

    return ipv6_exclude_dict
コード例 #13
0
ファイル: utils.py プロジェクト: HySoaKa/freenas
def get_ipv6_exclude_dict():
    ipv6_exclude_dict = {}

    w = warden.Warden()
    jails = w.list()
    if not jails:
        return ipv6_exclude_dict

    for j in jails:
        prefix = 24
        if j['ipv6']:
            parts = j['ipv6'].split('/')
            if len(parts) == 2:
                prefix = int(parts[1])
            sc = sipcalc_type("%s/%d" % (
                parts[0],
                prefix
            ))
            ipv6_exclude_dict[str(sc)] = sc

        if j['bridge_ipv6']:
            parts = j['ipv6'].split('/')
            if len(parts) == 2:
                prefix = int(parts[1])
            sc = sipcalc_type("%s/%d" % (
                parts[0],
                prefix
            ))
            ipv6_exclude_dict[str(sc)] = sc

        if j['alias_ipv6']:
            aprefix = prefix
            aliases = j['alias_ipv6'].split(',')
            for a in aliases:
                parts = a.split('/')
                if len(parts) == 2:
                    aprefix = int(parts[1])
                sc = sipcalc_type("%s/%d" % (
                    parts[0],
                    aprefix
                ))
                ipv6_exclude_dict[str(sc)] = sc

        if j['alias_bridge_ipv6']:
            aprefix = prefix
            aliases = j['alias_bridge_ipv6'].split(',')
            for a in aliases:
                parts = a.split('/')
                if len(parts) == 2:
                    aprefix = int(parts[1])
                sc = sipcalc_type("%s/%d" % (
                    parts[0],
                    aprefix
                ))
                ipv6_exclude_dict[str(sc)] = sc

    return ipv6_exclude_dict
コード例 #14
0
ファイル: utils.py プロジェクト: amazted/freenas
def get_ipv4_exclude_dict():
    ipv4_exclude_dict = {}

    w = warden.Warden()
    jails = w.cached_list()
    if not jails:
        return ipv4_exclude_dict

    for j in jails:
        mask = 24
        if j['ipv4']:
            parts = j['ipv4'].split('/')
            if len(parts) == 2:
                mask = int(parts[1])
            sc = sipcalc_type("%s/%d" % (
                parts[0],
                mask
            ))
            ipv4_exclude_dict[str(sc)] = sc

        if j['bridge_ipv4']:
            parts = j['ipv4'].split('/')
            if len(parts) == 2:
                mask = int(parts[1])
            sc = sipcalc_type("%s/%d" % (
                parts[0],
                mask
            ))
            ipv4_exclude_dict[str(sc)] = sc

        if j['alias_ipv4']:
            amask = mask
            aliases = j['alias_ipv4'].split(',')
            for a in aliases:
                parts = a.split('/')
                if len(parts) == 2:
                    amask = int(parts[1])
                sc = sipcalc_type("%s/%d" % (
                    parts[0],
                    amask
                ))
                ipv4_exclude_dict[str(sc)] = sc

        if j['alias_bridge_ipv4']:
            amask = mask
            aliases = j['alias_bridge_ipv4'].split(',')
            for a in aliases:
                parts = a.split('/')
                if len(parts) == 2:
                    amask = int(parts[1])
                sc = sipcalc_type("%s/%d" % (
                    parts[0],
                    amask
                ))
                ipv4_exclude_dict[str(sc)] = sc

    return ipv4_exclude_dict
コード例 #15
0
ファイル: utils.py プロジェクト: jag3773/freenas
def get_host_ipv4_network():
    st_host_ipv4_network = None

    try:
        iface = notifier().guess_default_interface()
        st_ha = sipcalc_type(iface=iface)
        if not st_ha.is_ipv4():
            st_host_ipv4_network = None
        else:
            st_host_ipv4_network = sipcalc_type("%s/%d" % (st_ha.network_address, st_ha.network_mask_bits))
    except Exception as e:
        log.debug("Exception caught: %s", e)

    return st_host_ipv4_network
コード例 #16
0
ファイル: utils.py プロジェクト: jag3773/freenas
def get_host_ipv6_network():
    st_host_ipv6_network = None

    try:
        iface = notifier().guess_default_interface()
        st_ha = sipcalc_type(iface=iface)
        if not st_ha.is_ipv6():
            st_host_ipv6_network = None
        else:
            st_host_ipv6_network = sipcalc_type("%s/%d" % (st_ha.network_range[0], st_ha.prefix_length))
    except Exception as e:
        log.debug("Exception caught: %s", e)

    return st_host_ipv6_network
コード例 #17
0
ファイル: models.py プロジェクト: SaYantra/freenas
    def __configure_ipv6_network(self):
        ipv6_iface = notifier().get_default_ipv6_interface()
        if ipv6_iface == None:
            return

        iface_info = notifier().get_interface_info(ipv6_iface)
        if iface_info['ipv6'] == None:
            return

        ipv6_addr = iface_info['ipv6'][0]['inet6']
        if ipv6_addr == None:
            return

        ipv6_prefix = iface_info['ipv6'][0]['prefixlen']
        if ipv6_prefix == None:
            return

        st = sipcalc_type("%s/%s" % (ipv6_addr, ipv6_prefix))
        if not st:
            return

        if not st.is_ipv6():
            return

        st2 = sipcalc_type(st.subnet_prefix_masked)
        if not st:
            return

        if not st.is_ipv6():
            return

        if not self.jc_ipv6_network:
            self.jc_ipv6_network = "%s/%d" % (st2.compressed_address,
                                              st.prefix_length)

        if not self.jc_ipv6_network_start:
            st2 = sipcalc_type(st.network_range[0])

            self.jc_ipv6_network_start = str(
                st2.compressed_address).split('/')[0]
        else:
            self.jc_ipv6_network_start = self.jc_ipv6_network_start.split(
                '/')[0]

        if not self.jc_ipv6_network_end:
            st2 = sipcalc_type(st.network_range[1])
            self.jc_ipv6_network_end = str(
                st2.compressed_address).split('/')[0]
        else:
            self.jc_ipv6_network_end = self.jc_ipv6_network_end.split('/')[0]
コード例 #18
0
def get_host_ipv4_network():
    st_host_ipv4_network = None

    try:
        iface = notifier().get_default_ipv4_interface()
        st_ha = sipcalc_type(iface=iface)
        if not st_ha.is_ipv4():
            st_host_ipv4_network = None
        else:
            st_host_ipv4_network = sipcalc_type(
                "%s/%d" % (st_ha.network_address, st_ha.network_mask_bits))
    except Exception as e:
        log.debug("Exception caught: %s", e)

    return st_host_ipv4_network
コード例 #19
0
ファイル: models.py プロジェクト: anilh889/freenas
    def __configure_ipv6_network(self):
        ipv6_iface = notifier().get_default_ipv6_interface()
        if ipv6_iface == None:
            return

        iface_info = notifier().get_interface_info(ipv6_iface)
        if iface_info['ipv6'] == None:
            return

        ipv6_addr = iface_info['ipv6'][0]['inet6']
        if ipv6_addr == None:
            return

        ipv6_prefix = iface_info['ipv6'][0]['prefixlen']
        if ipv6_prefix == None:
            return

        st = sipcalc_type("%s/%s" % (ipv6_addr, ipv6_prefix))
        if not st:
            return

        if not st.is_ipv6():
            return

        st2 = sipcalc_type(st.subnet_prefix_masked)
        if not st:
            return

        if not st.is_ipv6():
            return

        if not self.jc_ipv6_network:
            self.jc_ipv6_network = "%s/%d" % (
                st2.compressed_address, st.prefix_length
            )

        if not self.jc_ipv6_network_start:
            st2 = sipcalc_type(st.network_range[0])

            self.jc_ipv6_network_start = str(st2.compressed_address).split('/')[0]
        else:
            self.jc_ipv6_network_start = self.jc_ipv6_network_start.split('/')[0]

        if not self.jc_ipv6_network_end:
            st2 = sipcalc_type(st.network_range[1])
            self.jc_ipv6_network_end = str(st2.compressed_address).split('/')[0]
        else:
            self.jc_ipv6_network_end = self.jc_ipv6_network_end.split('/')[0]
コード例 #20
0
    def __configure_ipv4_network(self):
        ipv4_iface = notifier().get_default_ipv4_interface()
        if ipv4_iface == None:
            return

        st = sipcalc_type(iface=ipv4_iface)
        if not st:
            return

        if not st.is_ipv4():
            return

        if not self.jc_ipv4_network:
            self.jc_ipv4_network = "%s/%d" % (
                st.network_address, st.network_mask_bits
            )

        if not self.jc_ipv4_network_start:
            self.jc_ipv4_network_start = str(st.usable_range[0]).split('/')[0]
        else:
            self.jc_ipv4_network_start = self.jc_ipv4_network_start.split('/')[0]

        if not self.jc_ipv4_network_end:
            self.jc_ipv4_network_end = str(st.usable_range[1]).split('/')[0]
        else:
            self.jc_ipv4_network_end = self.jc_ipv4_network_end.split('/')[0]
コード例 #21
0
def get_host_ipv6_network():
    st_host_ipv6_network = None

    try:
        iface = notifier().get_default_ipv6_interface()
        st_ha = sipcalc_type(iface=iface)
        if not st_ha.is_ipv6():
            st_host_ipv6_network = None
        else:
            st_host_ipv6_network = sipcalc_type("%s/%d" % (
                st_ha.network_range[0],
                st_ha.prefix_length,
            ))
    except Exception as e:
        log.debug("Exception caught: %s", e)

    return st_host_ipv6_network
コード例 #22
0
ファイル: utils.py プロジェクト: alexisWTD/freenas
def guess_addresses():
    addresses = {
        'high_ipv4': None,
        'high_ipv6': None,
        'bridge_ipv4': None,
        'bridge_ipv6': None
    }

    ipv4_addr = guess_ipv4_address()
    ipv4_jail_network = get_jail_ipv4_network()

    if ipv4_addr:
        addresses['high_ipv4'] = ipv4_addr

    if (ipv4_jail_network
            and ipv4_addr) and (not ipv4_jail_network.in_network(ipv4_addr)):
        try:
            addresses['bridge_ipv4'] = sipcalc_type("%s/%d" % (
                ipv4_jail_network.usable_range[0],
                ipv4_jail_network.network_mask_bits,
            ))
        except Exception as e:
            log.debug("guess_addresses: %s", e)
            return addresses

    ipv6_addr = guess_ipv6_address()
    ipv6_jail_network = get_jail_ipv6_network()

    if ipv6_addr:
        addresses['high_ipv6'] = ipv6_addr

    if (ipv6_jail_network
            and ipv6_addr) and (not ipv6_jail_network.in_network(ipv6_addr)):
        try:
            addresses['bridge_ipv6'] = sipcalc_type("%s/%d" % (
                ipv6_jail_network.network_range[0],
                ipv6_jail_network.prefix_length,
            ))
        except Exception as e:
            log.debug("guess_addresses: %s", e)
            return addresses

    return addresses
コード例 #23
0
ファイル: utils.py プロジェクト: jag3773/freenas
def get_ipv4_exclude_dict():
    ipv4_exclude_dict = {}

    w = warden.Warden()
    jails = w.list()
    for j in jails:
        mask = 24
        if j["ipv4"]:
            parts = j["ipv4"].split("/")
            if len(parts) == 2:
                mask = int(parts[1])
            sc = sipcalc_type("%s/%d" % (parts[0], mask))
            ipv4_exclude_dict[str(sc)] = sc

        if j["bridge_ipv4"]:
            parts = j["ipv4"].split("/")
            if len(parts) == 2:
                mask = int(parts[1])
            sc = sipcalc_type("%s/%d" % (parts[0], mask))
            ipv4_exclude_dict[str(sc)] = sc

        if j["alias_ipv4"]:
            amask = mask
            aliases = j["alias_ipv4"].split(",")
            for a in aliases:
                parts = a.split("/")
                if len(parts) == 2:
                    amask = int(parts[1])
                sc = sipcalc_type("%s/%d" % (parts[0], amask))
                ipv4_exclude_dict[str(sc)] = sc

        if j["alias_bridge_ipv4"]:
            amask = mask
            aliases = j["alias_bridge_ipv4"].split(",")
            for a in aliases:
                parts = a.split("/")
                if len(parts) == 2:
                    amask = int(parts[1])
                sc = sipcalc_type("%s/%d" % (parts[0], amask))
                ipv4_exclude_dict[str(sc)] = sc

    return ipv4_exclude_dict
コード例 #24
0
def get_jail_ipv6_network():
    jail_ipv6_network = None

    try:
        jc = JailsConfiguration.objects.order_by("-id")[0]
        jail_ipv6_network = sipcalc_type(jc.jc_ipv6_network)

    except:
        jail_ipv6_network = None

    return jail_ipv6_network
コード例 #25
0
ファイル: utils.py プロジェクト: Arcko/freenas
def get_jail_ipv6_network():
    jail_ipv6_network = None

    try:
        jc = JailsConfiguration.objects.order_by("-id")[0]
        jail_ipv6_network = sipcalc_type(jc.jc_ipv6_network)

    except:
        jail_ipv6_network = None

    return jail_ipv6_network
コード例 #26
0
ファイル: utils.py プロジェクト: PatriQ7/freenas
def guess_addresses():
    addresses = {
        'high_ipv4': None,
        'high_ipv6': None,
        'bridge_ipv4': None,
        'bridge_ipv6': None
    }

    ipv4_addr = guess_ipv4_address()
    ipv4_jail_network = get_jail_ipv4_network()

    if ipv4_addr:
        addresses['high_ipv4'] = ipv4_addr

    if (ipv4_jail_network and ipv4_addr) and (not ipv4_jail_network.in_network(ipv4_addr)):
        try:
            addresses['bridge_ipv4'] = sipcalc_type("%s/%d" % (
                ipv4_jail_network.usable_range[0],
                ipv4_jail_network.network_mask_bits,
            ))
        except Exception as e:
            log.debug("guess_addresses: %s", e)
            return addresses  

    ipv6_addr = guess_ipv6_address()
    ipv6_jail_network = get_jail_ipv6_network()

    if ipv6_addr:
        addresses['high_ipv6'] = ipv6_addr

    if (ipv6_jail_network and ipv6_addr) and (not ipv6_jail_network.in_network(ipv6_addr)):
        try:
            addresses['bridge_ipv6'] = sipcalc_type("%s/%d" % (
                ipv6_jail_network.network_range[0],
                ipv6_jail_network.prefix_length,
            ))
        except Exception as e:
            log.debug("guess_addresses: %s", e)
            return addresses  

    return addresses
コード例 #27
0
ファイル: utils.py プロジェクト: noprobs/freenas
def guess_ipv6_address():
    ipv4_addr = None

    st_ipv6_network = get_jail_ipv6_network()
    if st_ipv6_network:
        st_ipv6_network_start = get_jail_ipv6_network_start()
        if not st_ipv6_network_start:
            st_ipv6_network_start = sipcalc_type(
                "%s/%d" % (st_ipv6_network.network_range[0],
                           st_ipv6_network.prefix_length))

        st_ipv6_network_end = get_jail_ipv6_network_end()
        if not st_ipv6_network_end:
            st_ipv6_network_end = sipcalc_type(
                "%s/%d" % (st_ipv6_network.network_range[1],
                           st_ipv6_network.prefix_length))

        ipv6_addr = get_available_ipv6(st_ipv6_network_start,
                                       st_ipv6_network_end)
        addresses['high_ipv6'] = ipv6_addr

    return ipv4_addr
コード例 #28
0
ファイル: utils.py プロジェクト: WilfriedNH/freenas
def guess_ipv6_address():
    ipv4_addr = None

    st_ipv6_network = get_jail_ipv6_network()
    if st_ipv6_network:
        st_ipv6_network_start = get_jail_ipv6_network_start()
        if not st_ipv6_network_start:
            st_ipv6_network_start = sipcalc_type("%s/%d" % (
                st_ipv6_network.network_range[0],
                st_ipv6_network.prefix_length
            ))

        st_ipv6_network_end = get_jail_ipv6_network_end()
        if not st_ipv6_network_end:
            st_ipv6_network_end = sipcalc_type("%s/%d" % (
                st_ipv6_network.network_range[1],
                st_ipv6_network.prefix_length
            ))  

        ipv6_addr = get_available_ipv6(st_ipv6_network_start, st_ipv6_network_end)
        addresses['high_ipv6'] = ipv6_addr

    return ipv4_addr
コード例 #29
0
def get_jail_ipv6_network_end():
    jail_ipv6_network_end = None
    jail_ipv6_network = get_jail_ipv6_network()

    try:
        jc = JailsConfiguration.objects.order_by("-id")[0]
        jail_ipv6_network_end = sipcalc_type(
            "%s/%d" % (jc.jc_ipv6_network_end.split('/')[0],
                       jail_ipv6_network.prefix_length))

    except:
        jail_ipv6_network_end = None

    return jail_ipv6_network_end
コード例 #30
0
ファイル: utils.py プロジェクト: jag3773/freenas
def get_jail_ipv4_network_start():
    jail_ipv4_network_start = None
    jail_ipv4_network = get_jail_ipv4_network()

    try:
        jc = JailsConfiguration.objects.order_by("-id")[0]
        jail_ipv4_network_start = sipcalc_type(
            "%s/%d" % (jc.jc_ipv4_network_start.split("/")[0], jail_ipv4_network.network_mask_bits)
        )

    except:
        jail_ipv4_network_start = None

    return jail_ipv4_network_start
コード例 #31
0
def get_jail_ipv4_network_start():
    jail_ipv4_network_start = None
    jail_ipv4_network = get_jail_ipv4_network()

    try:
        jc = JailsConfiguration.objects.order_by("-id")[0]
        jail_ipv4_network_start = sipcalc_type(
            "%s/%d" % (jc.jc_ipv4_network_start.split('/')[0],
                       jail_ipv4_network.network_mask_bits))

    except:
        jail_ipv4_network_start = None

    return jail_ipv4_network_start
コード例 #32
0
ファイル: utils.py プロジェクト: jag3773/freenas
def get_jail_ipv6_network_end():
    jail_ipv6_network_end = None
    jail_ipv6_network = get_jail_ipv6_network()

    try:
        jc = JailsConfiguration.objects.order_by("-id")[0]
        jail_ipv6_network_end = sipcalc_type(
            "%s/%d" % (jc.jc_ipv6_network_end.split("/")[0], jail_ipv6_network.prefix_length)
        )

    except:
        jail_ipv6_network_end = None

    return jail_ipv6_network_end
コード例 #33
0
def guess_addresses():
    addresses = {
        'high_ipv4': None,
        'high_ipv6': None,
        'bridge_ipv4': None,
        'bridge_ipv6': None
    }

    ipv4_addr = guess_ipv4_address()
    ipv4_host_network = get_host_ipv4_network()
    ipv4_jail_network = get_jail_ipv4_network()

    if ipv4_addr:
        addresses['high_ipv4'] = ipv4_addr

    if (ipv4_jail_network
            and ipv4_addr) and (not ipv4_jail_network.in_network(ipv4_addr)):
        addresses['bridge_ipv4'] = sipcalc_type("%s/%d" % (
            ipv4_jail_network.usable_range[0],
            ipv4_jail_network.network_mask_bits,
        ))

    ipv6_addr = guess_ipv6_address()
    ipv6_host_network = get_host_ipv6_network()
    ipv6_jail_network = get_jail_ipv6_network()

    if ipv6_addr:
        addresses['high_ipv6'] = ipv6_addr

    if (ipv6_jail_network
            and ipv6_addr) and (not ipv6_jail_network.in_network(ipv6_addr)):
        addresses['bridge_ipv6'] = sipcalc_type("%s/%d" % (
            ipv6_jail_network.network_range[0],
            ipv6_jail_network.prefix_length,
        ))

    return addresses
コード例 #34
0
    def __init__(self, *args, **kwargs):
        super(JailCreateForm, self).__init__(*args, **kwargs)
        self.fields['jail_type'].choices = (
            (WARDEN_TYPE_PLUGINJAIL, WARDEN_TYPE_PLUGINJAIL),
            (WARDEN_TYPE_STANDARD, WARDEN_TYPE_STANDARD),
            (WARDEN_TYPE_PORTJAIL, WARDEN_TYPE_PORTJAIL),
#            (WARDEN_TYPE_LINUXJAIL, WARDEN_TYPE_LINUXJAIL)
        )

        high_ipv4 = None
        high_ipv6 = None

        st_ipv4_network = None
        st_ipv6_network = None

        try:
            jc = JailsConfiguration.objects.order_by("-id")[0]
            st_ipv4_network = sipcalc_type(jc.jc_ipv4_network)
            st_ipv6_network = sipcalc_type(jc.jc_ipv6_network)

        except:
            pass

        #
        # Reserve the first 25 addresses
        #
        if st_ipv4_network is not None: 
            high_ipv4 = sipcalc_type("%s/%d" % (st_ipv4_network.usable_range[0],
                st_ipv4_network.network_mask_bits))
            high_ipv4 += 25 

        if st_ipv6_network is not None: 
            high_ipv6 = sipcalc_type("%s/%d" % (st_ipv6_network .network_range[0],
                st_ipv6_network.prefix_length))
            high_ipv6 += 25 

        wlist = Warden().list()
        for wj in wlist:
            wo = WardenJail(**wj)

            st_ipv4 = None
            st_ipv6 = None

            if wo.ipv4:
                st_ipv4 = sipcalc_type(wo.ipv4)
            if wo.ipv6:
                st_ipv6 = sipcalc_type(wo.ipv6)
            
            if st_ipv4 and st_ipv4_network is not None:
                if st_ipv4_network.in_network(st_ipv4):
                    if st_ipv4 > high_ipv4:
                        high_ipv4 = st_ipv4

            if st_ipv6 and st_ipv6_network is not None:
                if st_ipv6_network.in_network(st_ipv6):
                    if st_ipv6 > high_ipv6:
                        high_ipv6 = st_ipv6

        if high_ipv4 is None and st_ipv4_network is not None:
            high_ipv4 = sipcalc_type("%s/%d" % (st_ipv4_network.usable_range[0],
                st_ipv4_network.network_mask_bits))

        elif high_ipv4 is not None and st_ipv4_network is not None:
            high_ipv4 += 1
            if not st_ipv4_network.in_network(high_ipv4):
                high_ipv4 = None 

        if high_ipv6 is None and st_ipv6_network is not None:
            high_ipv6 = sipcalc_type("%s/%d" % (st_ipv6_network.network_range[0],
                st_ipv6_network.prefix_length))

        elif high_ipv6 is not None and st_ipv6_network is not None:
            high_ipv6 += 1
            if not st_ipv6_network.in_network(high_ipv6):
                high_ipv6 = None 

        if high_ipv6 is not None:
            self.fields['jail_ipv6'].initial = high_ipv6
        elif high_ipv4 is not None:
            self.fields['jail_ipv4'].initial = high_ipv4

        if st_ipv4_network is not None:
            bridge_ipv4 = sipcalc_type("%s/%d" % (st_ipv4_network.usable_range[0],
                st_ipv4_network.network_mask_bits))
            self.fields['jail_bridge_ipv4'].initial = bridge_ipv4

        if st_ipv6_network is not None:
            bridge_ipv6 = sipcalc_type("%s/%d" % (st_ipv6_network.network_range[0],
                st_ipv6_network.prefix_length))
            self.fields['jail_bridge_ipv6'].initial = bridge_ipv6
コード例 #35
0
ファイル: utils.py プロジェクト: rkojedzinszky/freenas
def guess_adresses():
    high_ipv4 = None
    high_ipv6 = None

    st_ipv4_network = None
    st_ipv6_network = None

    jc = None
    try:
        jc = JailsConfiguration.objects.order_by("-id")[0]
        st_ipv4_network = sipcalc_type(jc.jc_ipv4_network)
        st_ipv6_network = sipcalc_type(jc.jc_ipv6_network)
    except Exception as e:
        log.debug("Exception caught: %s", e)

    #
    # If a jails configuration exists (as it should),
    # create sipcalc objects
    #
    if st_ipv4_network:
        high_ipv4 = sipcalc_type("%s/%d" % (jc.jc_ipv4_network_start, st_ipv4_network.network_mask_bits))
    if st_ipv6_network:
        high_ipv6 = sipcalc_type("%s/%d" % (jc.jc_ipv6_network_start, st_ipv6_network.prefix_length))

    #
    # Attempt to determine the primary interface network.
    # This is done so that we don't set a bridge address
    # (we leave it blank, in which case the Warden will
    # figure out the default gateway and set that up inside
    # the jail if on the same network as the host).
    #
    st_host_ipv4_network = None
    try:
        iface = notifier().guess_default_interface()
        st_ha = sipcalc_type(iface=iface)
        if not st_ha.is_ipv4():
            st_host_ipv4_network = None
        else:
            st_host_ipv4_network = sipcalc_type("%s/%d" % (st_ha.network_address, st_ha.network_mask_bits))
    except Exception as e:
        log.debug("Exception caught: %s", e)

    #
    # Be extra careful, if no start and end addresses
    # are configured, take the first network address
    # and add 25 to it.
    #
    if not high_ipv4 and st_ipv4_network:
        high_ipv4 = sipcalc_type("%s/%d" % (st_ipv4_network.usable_range[0], st_ipv4_network.network_mask_bits))
        high_ipv4 += 25

    if not high_ipv6 and st_ipv6_network:
        high_ipv6 = sipcalc_type("%s/%d" % (st_ipv6_network.network_range[0], st_ipv6_network.prefix_length))
        high_ipv6 += 25

    try:
        wlist = warden.Warden().list()
    except:
        wlist = []

    for wj in wlist:
        wo = warden.WardenJail(**wj)

        st_ipv4 = None
        st_ipv6 = None

        #
        # This figures out the highest IP address currently in use
        #

        if wo.ipv4:
            st_ipv4 = sipcalc_type(wo.ipv4)
        if wo.ipv6:
            st_ipv6 = sipcalc_type(wo.ipv6)

        if st_ipv4 and st_ipv4_network is not None:
            if st_ipv4_network.in_network(st_ipv4):
                if st_ipv4 > high_ipv4:
                    high_ipv4 = st_ipv4

        if st_ipv6 and st_ipv6_network is not None:
            if st_ipv6_network.in_network(st_ipv6):
                if st_ipv6 > high_ipv6:
                    high_ipv6 = st_ipv6

    if high_ipv4 is None and st_ipv4_network is not None:
        high_ipv4 = sipcalc_type("%s/%d" % (st_ipv4_network.usable_range[0], st_ipv4_network.network_mask_bits))

    elif high_ipv4 is not None and st_ipv4_network is not None:
        high_ipv4 += 1
        if not st_ipv4_network.in_network(high_ipv4):
            high_ipv4 = None

    if high_ipv6 is None and st_ipv6_network is not None:
        high_ipv6 = sipcalc_type("%s/%d" % (st_ipv6_network.network_range[0], st_ipv6_network.prefix_length))

    elif high_ipv6 is not None and st_ipv6_network is not None:
        high_ipv6 += 1
        if not st_ipv6_network.in_network(high_ipv6):
            high_ipv6 = None

    #
    # If a network is configured for jails, and it is NOT on
    # the same network as the host, setup a bridge address.
    # (This will be the default gateway of the jail).
    #
    bridge_ipv4 = None
    if st_ipv4_network is not None and not st_host_ipv4_network:
        bridge_ipv4 = sipcalc_type("%s/%d" % (st_ipv4_network.usable_range[0], st_ipv4_network.network_mask_bits))

    bridge_ipv6 = None
    if st_ipv6_network is not None:
        bridge_ipv6 = sipcalc_type("%s/%d" % (st_ipv6_network.network_range[0], st_ipv6_network.prefix_length))

    return {"high_ipv4": high_ipv4, "high_ipv6": high_ipv6, "bridge_ipv4": bridge_ipv4, "bridge_ipv6": bridge_ipv6}
コード例 #36
0
ファイル: forms.py プロジェクト: zuiwanyuan/freenas
    def __init__(self, *args, **kwargs):
        super(JailCreateForm, self).__init__(*args, **kwargs)
        self.fields['jail_type'].choices = (
            (WARDEN_TYPE_PLUGINJAIL, WARDEN_TYPE_PLUGINJAIL),
            (WARDEN_TYPE_STANDARD, WARDEN_TYPE_STANDARD),
            (WARDEN_TYPE_PORTJAIL, WARDEN_TYPE_PORTJAIL),
#            (WARDEN_TYPE_LINUXJAIL, WARDEN_TYPE_LINUXJAIL)
        )

        self.fields['jail_type'].widget.attrs['onChange'] = "jail_type_toggle();"
        self.fields['jail_32bit'].widget.attrs['onChange'] = "jail_32bit_toggle();"
        self.fields['jail_vnet'].widget.attrs['onChange'] = "jail_vnet_toggle();"

        high_ipv4 = None
        high_ipv6 = None

        st_ipv4_network = None
        st_ipv6_network = None

        try:
            jc = JailsConfiguration.objects.order_by("-id")[0]
            st_ipv4_network = sipcalc_type(jc.jc_ipv4_network)
            st_ipv6_network = sipcalc_type(jc.jc_ipv6_network)

        except:
            pass

        logfile = "%s/warden.log" % jc.jc_path
        if os.path.exists(logfile):
            os.unlink(logfile)

        #
        # Reserve the first 25 addresses
        #
        if st_ipv4_network is not None: 
            high_ipv4 = sipcalc_type("%s/%d" % (st_ipv4_network.usable_range[0],
                st_ipv4_network.network_mask_bits))
            high_ipv4 += 25 

        if st_ipv6_network is not None: 
            high_ipv6 = sipcalc_type("%s/%d" % (st_ipv6_network .network_range[0],
                st_ipv6_network.prefix_length))
            high_ipv6 += 25 

        try:
            wlist = Warden().list()
        except:
            wlist = []

        for wj in wlist:
            wo = WardenJail(**wj)

            st_ipv4 = None
            st_ipv6 = None

            if wo.ipv4:
                st_ipv4 = sipcalc_type(wo.ipv4)
            if wo.ipv6:
                st_ipv6 = sipcalc_type(wo.ipv6)
            
            if st_ipv4 and st_ipv4_network is not None:
                if st_ipv4_network.in_network(st_ipv4):
                    if st_ipv4 > high_ipv4:
                        high_ipv4 = st_ipv4

            if st_ipv6 and st_ipv6_network is not None:
                if st_ipv6_network.in_network(st_ipv6):
                    if st_ipv6 > high_ipv6:
                        high_ipv6 = st_ipv6

        if high_ipv4 is None and st_ipv4_network is not None:
            high_ipv4 = sipcalc_type("%s/%d" % (st_ipv4_network.usable_range[0],
                st_ipv4_network.network_mask_bits))

        elif high_ipv4 is not None and st_ipv4_network is not None:
            high_ipv4 += 1
            if not st_ipv4_network.in_network(high_ipv4):
                high_ipv4 = None 

        if high_ipv6 is None and st_ipv6_network is not None:
            high_ipv6 = sipcalc_type("%s/%d" % (st_ipv6_network.network_range[0],
                st_ipv6_network.prefix_length))

        elif high_ipv6 is not None and st_ipv6_network is not None:
            high_ipv6 += 1
            if not st_ipv6_network.in_network(high_ipv6):
                high_ipv6 = None 

        if high_ipv6 is not None:
            self.fields['jail_ipv6'].initial = high_ipv6
        elif high_ipv4 is not None:
            self.fields['jail_ipv4'].initial = high_ipv4

        if st_ipv4_network is not None:
            bridge_ipv4 = sipcalc_type("%s/%d" % (st_ipv4_network.usable_range[0],
                st_ipv4_network.network_mask_bits))
            self.fields['jail_bridge_ipv4'].initial = bridge_ipv4

        if st_ipv6_network is not None:
            bridge_ipv6 = sipcalc_type("%s/%d" % (st_ipv6_network.network_range[0],
                st_ipv6_network.prefix_length))
            self.fields['jail_bridge_ipv6'].initial = bridge_ipv6
コード例 #37
0
ファイル: models.py プロジェクト: jbzhang99/freenas
    def __init__(self, *args, **kwargs):
        super(JailsConfiguration, self).__init__(*args, **kwargs)
        ipv4_iface = notifier().get_default_ipv4_interface()
        if not ipv4_iface:
            return

        st = sipcalc_type(iface=ipv4_iface)
        if not st:
            return

        if not st.is_ipv4():
            return

        if not self.jc_ipv4_network:
            self.jc_ipv4_network = "%s/%d" % (
                st.network_address, st.network_mask_bits
            )

        if not self.jc_ipv4_network_start:
            self.jc_ipv4_network_start = str(st.usable_range[0]).split('/')[0]
        else:
            self.jc_ipv4_network_start = self.jc_ipv4_network_start.split('/')[0]

        if not self.jc_ipv4_network_end:
            self.jc_ipv4_network_end = str(st.usable_range[1]).split('/')[0]
        else:
            self.jc_ipv4_network_end = self.jc_ipv4_network_end.split('/')[0]

        ipv6_iface = notifier().get_default_ipv6_interface()
        if ipv6_iface == None:
            return

        iface_info = notifier().get_interface_info(ipv6_iface)
        if iface_info['ipv6'] == None:
            return

        ipv6_addr = iface_info['ipv6'][0]['inet6']
        if ipv6_addr == None:
            return

        ipv6_prefix = iface_info['ipv6'][0]['prefixlen']
        if ipv6_prefix == None:
            return

        st = sipcalc_type("%s/%s" % (ipv6_addr, ipv6_prefix))
        if not st:
            return

        if not st.is_ipv6():
            return

        st2 = sipcalc_type(st.subnet_prefix_masked)
        if not st:
            return

        if not st.is_ipv6():
            return

        if not self.jc_ipv6_network:
            self.jc_ipv6_network = "%s/%d" % (
                st2.compressed_address, st.prefix_length
            )

        if not self.jc_ipv6_network_start:
            st2 = sipcalc_type(st.network_range[0])

            self.jc_ipv6_network_start = str(st2.compressed_address).split('/')[0]
        else:
            self.jc_ipv6_network_start = self.jc_ipv6_network_start.split('/')[0]

        if not self.jc_ipv6_network_end:
            st2 = sipcalc_type(st.network_range[1])
            self.jc_ipv6_network_end = str(st2.compressed_address).split('/')[0]
        else:
            self.jc_ipv6_network_end = self.jc_ipv6_network_end.split('/')[0]
コード例 #38
0
ファイル: forms.py プロジェクト: cubieb/freenas
    def __init__(self, *args, **kwargs):
        super(JailCreateForm, self).__init__(*args, **kwargs)
        self.fields['jail_type'].choices = (
            (WARDEN_TYPE_PLUGINJAIL, WARDEN_TYPE_PLUGINJAIL),
            (WARDEN_TYPE_STANDARD, WARDEN_TYPE_STANDARD),
            (WARDEN_TYPE_PORTJAIL, WARDEN_TYPE_PORTJAIL),
#            (WARDEN_TYPE_LINUXJAIL, WARDEN_TYPE_LINUXJAIL)
        )

        self.fields['jail_type'].widget.attrs['onChange'] = (
            "jail_type_toggle();"
        )
        self.fields['jail_32bit'].widget.attrs['onChange'] = (
            "jail_32bit_toggle();"
        )
        self.fields['jail_vnet'].widget.attrs['onChange'] = (
            "jail_vnet_toggle();"
        )
        self.fields['jail_nat'].widget.attrs['onChange'] = (
            "jail_nat_toggle();"
        )

        high_ipv4 = None
        high_ipv6 = None

        st_ipv4_network = None
        st_ipv6_network = None

        jc = None
        try:
            jc = JailsConfiguration.objects.order_by("-id")[0]
            st_ipv4_network = sipcalc_type(jc.jc_ipv4_network)
            st_ipv6_network = sipcalc_type(jc.jc_ipv6_network)

        except Exception as e:
            log.debug("Exception caught: %s", e)
            pass

        #
        # If a jails configuration exists (as it should),
        # create sipcalc objects
        #
        if st_ipv4_network:
            high_ipv4 = sipcalc_type("%s/%d" % (
                jc.jc_ipv4_network_start,
                st_ipv4_network.network_mask_bits
            ))
        if st_ipv6_network:
            high_ipv6 = sipcalc_type("%s/%d" % (
                jc.jc_ipv6_network_start,
                st_ipv6_network.prefix_length
            ))
        
        #
        # Attempt to determine the primary interface network.
        # This is done so that we don't set a bridge address
        # (we leave it blank, in which case the Warden will
        # figure out the default gateway and set that up inside
        # the jail if on the same network as the host).
        #
        st_host_ipv4_network = None
        try:
            iface = notifier().guess_default_interface()
            st_ha = sipcalc_type(iface=iface)
            if not st_ha.is_ipv4():
                st_host_ipv4_network = None
            else:
                st_host_ipv4_network = sipcalc_type("%s/%d" % (
                    st_ha.network_address, st_ha.network_mask_bits
                ))
        except Exception as e:
            log.debug("Exception caught: %s", e)
            pass 

        if jc and jc.jc_path:
            logfile = "%s/warden.log" % jc.jc_path
            if os.path.exists(logfile):
                os.unlink(logfile)

        #
        # Be extra careful, if no start and end addresses
        # are configured, take the first network address
        # and add 25 to it.
        #
        if not high_ipv4 and st_ipv4_network:
            high_ipv4 = sipcalc_type("%s/%d" % (
                st_ipv4_network.usable_range[0],
                st_ipv4_network.network_mask_bits,
            ))
            high_ipv4 += 25

        if not high_ipv6 and st_ipv6_network:
            high_ipv6 = sipcalc_type("%s/%d" % (
                st_ipv6_network.network_range[0],
                st_ipv6_network.prefix_length,
            ))
            high_ipv6 += 25

        try:
            wlist = Warden().list()
        except:
            wlist = []

        for wj in wlist:
            wo = WardenJail(**wj)

            st_ipv4 = None
            st_ipv6 = None

            #
            # This figures out the highest IP address currently in use
            #

            if wo.ipv4:
                st_ipv4 = sipcalc_type(wo.ipv4)
            if wo.ipv6:
                st_ipv6 = sipcalc_type(wo.ipv6)

            if st_ipv4 and st_ipv4_network is not None:
                if st_ipv4_network.in_network(st_ipv4):
                    if st_ipv4 > high_ipv4:
                        high_ipv4 = st_ipv4

            if st_ipv6 and st_ipv6_network is not None:
                if st_ipv6_network.in_network(st_ipv6):
                    if st_ipv6 > high_ipv6:
                        high_ipv6 = st_ipv6

        if high_ipv4 is None and st_ipv4_network is not None:
            high_ipv4 = sipcalc_type("%s/%d" % (
                st_ipv4_network.usable_range[0],
                st_ipv4_network.network_mask_bits,
            ))

        elif high_ipv4 is not None and st_ipv4_network is not None:
            high_ipv4 += 1
            if not st_ipv4_network.in_network(high_ipv4):
                high_ipv4 = None

        if high_ipv6 is None and st_ipv6_network is not None:
            high_ipv6 = sipcalc_type("%s/%d" % (
                st_ipv6_network.network_range[0],
                st_ipv6_network.prefix_length,
            ))

        elif high_ipv6 is not None and st_ipv6_network is not None:
            high_ipv6 += 1
            if not st_ipv6_network.in_network(high_ipv6):
                high_ipv6 = None

        if high_ipv6 is not None:
            self.fields['jail_ipv6'].initial = high_ipv6
        elif high_ipv4 is not None:
            self.fields['jail_ipv4'].initial = high_ipv4

        #
        # If a network is configured for jails, and it is NOT on 
        # the same network as the host, setup a bridge address.
        # (This will be the default gateway of the jail).
        #
        if st_ipv4_network is not None and not st_host_ipv4_network:
            bridge_ipv4 = sipcalc_type("%s/%d" % (
                st_ipv4_network.usable_range[0],
                st_ipv4_network.network_mask_bits,
            ))
            self.fields['jail_bridge_ipv4'].initial = bridge_ipv4

        if st_ipv6_network is not None:
            bridge_ipv6 = sipcalc_type("%s/%d" % (
                st_ipv6_network.network_range[0],
                st_ipv6_network.prefix_length,
            ))
            self.fields['jail_bridge_ipv6'].initial = bridge_ipv6
コード例 #39
0
def jailsconfiguration_network_info(request):
    data = {
        'jc_ipv4_network': None,
        'jc_ipv4_network_start': None,
        'jc_ipv4_network_end': None,
        'jc_ipv6_network': None,
        'jc_ipv6_network_start': None,
        'jc_ipv6_network_end': None,
    }

    ipv4_iface = notifier().get_default_ipv4_interface()
    if ipv4_iface:
        ipv4_st = sipcalc_type(iface=ipv4_iface)
        if ipv4_st.is_ipv4():
            data['jc_ipv4_network'] = "%s/%d" % (ipv4_st.network_address,
                                                 ipv4_st.network_mask_bits)
            data['jc_ipv4_network_start'] = str(
                ipv4_st.usable_range[0]).split('/')[0]
            data['jc_ipv4_network_end'] = str(
                ipv4_st.usable_range[1]).split('/')[0]

    ipv6_iface = notifier().get_default_ipv6_interface()
    try:
        iface_info = notifier().get_interface_info(ipv6_iface)
        if iface_info['ipv6'] is None:
            raise Exception

        ipv6_addr = iface_info['ipv6'][0]['inet6']
        if ipv6_addr is None:
            raise Exception

        ipv6_prefix = iface_info['ipv6'][0]['prefixlen']
        if ipv6_prefix is None:
            raise Exception

        ipv6_st = sipcalc_type("%s/%s" % (ipv6_addr, ipv6_prefix))
        if not ipv6_st:
            raise Exception

        if not ipv6_st.is_ipv6():
            raise Exception

        ipv6_st2 = sipcalc_type(ipv6_st.subnet_prefix_masked)
        if not ipv6_st:
            raise Exception

        if not ipv6_st.is_ipv6():
            raise Exception

        data['jc_ipv6_network'] = "%s/%d" % (ipv6_st2.compressed_address,
                                             ipv6_st.prefix_length)

        ipv6_st2 = sipcalc_type(ipv6_st.network_range[0])
        data['jc_ipv6_network_start'] = str(
            ipv6_st2.compressed_address).split('/')[0]

        ipv6_st2 = sipcalc_type(ipv6_st.network_range[1])
        data['jc_ipv6_network_end'] = str(
            ipv6_st2.compressed_address).split('/')[0]

    except:
        pass

    content = json.dumps(data)
    return HttpResponse(content, content_type='application/json')
コード例 #40
0
ファイル: utils.py プロジェクト: func09/freenas
def guess_adresses():
    high_ipv4 = None
    high_ipv6 = None

    st_ipv4_network = None
    st_ipv6_network = None

    jc = None
    try:
        jc = JailsConfiguration.objects.order_by("-id")[0]
        st_ipv4_network = sipcalc_type(jc.jc_ipv4_network)
        st_ipv6_network = sipcalc_type(jc.jc_ipv6_network)
    except Exception as e:
        log.debug("Exception caught: %s", e)

    #
    # If a jails configuration exists (as it should),
    # create sipcalc objects
    #
    if st_ipv4_network:
        high_ipv4 = sipcalc_type(
            "%s/%d" %
            (jc.jc_ipv4_network_start, st_ipv4_network.network_mask_bits))
    if st_ipv6_network:
        high_ipv6 = sipcalc_type(
            "%s/%d" %
            (jc.jc_ipv6_network_start, st_ipv6_network.prefix_length))

    #
    # Attempt to determine the primary interface network.
    # This is done so that we don't set a bridge address
    # (we leave it blank, in which case the Warden will
    # figure out the default gateway and set that up inside
    # the jail if on the same network as the host).
    #
    st_host_ipv4_network = None
    try:
        iface = notifier().guess_default_interface()
        st_ha = sipcalc_type(iface=iface)
        if not st_ha.is_ipv4():
            st_host_ipv4_network = None
        else:
            st_host_ipv4_network = sipcalc_type(
                "%s/%d" % (st_ha.network_address, st_ha.network_mask_bits))
    except Exception as e:
        log.debug("Exception caught: %s", e)

    #
    # Be extra careful, if no start and end addresses
    # are configured, take the first network address
    # and add 25 to it.
    #
    if not high_ipv4 and st_ipv4_network:
        high_ipv4 = sipcalc_type("%s/%d" % (
            st_ipv4_network.usable_range[0],
            st_ipv4_network.network_mask_bits,
        ))
        high_ipv4 += 25

    if not high_ipv6 and st_ipv6_network:
        high_ipv6 = sipcalc_type("%s/%d" % (
            st_ipv6_network.network_range[0],
            st_ipv6_network.prefix_length,
        ))
        high_ipv6 += 25

    try:
        wlist = warden.Warden().list()
    except:
        wlist = []

    for wj in wlist:
        wo = warden.WardenJail(**wj)

        st_ipv4 = None
        st_ipv6 = None

        #
        # This figures out the highest IP address currently in use
        #

        if wo.ipv4:
            st_ipv4 = sipcalc_type(wo.ipv4)
        if wo.ipv6:
            st_ipv6 = sipcalc_type(wo.ipv6)

        if st_ipv4 and st_ipv4_network is not None:
            if st_ipv4_network.in_network(st_ipv4):
                if st_ipv4 > high_ipv4:
                    high_ipv4 = st_ipv4

        if st_ipv6 and st_ipv6_network is not None:
            if st_ipv6_network.in_network(st_ipv6):
                if st_ipv6 > high_ipv6:
                    high_ipv6 = st_ipv6

    if high_ipv4 is None and st_ipv4_network is not None:
        high_ipv4 = sipcalc_type("%s/%d" % (
            st_ipv4_network.usable_range[0],
            st_ipv4_network.network_mask_bits,
        ))

    elif high_ipv4 is not None and st_ipv4_network is not None:
        high_ipv4 += 1
        if not st_ipv4_network.in_network(high_ipv4):
            high_ipv4 = None

    if high_ipv6 is None and st_ipv6_network is not None:
        high_ipv6 = sipcalc_type("%s/%d" % (
            st_ipv6_network.network_range[0],
            st_ipv6_network.prefix_length,
        ))

    elif high_ipv6 is not None and st_ipv6_network is not None:
        high_ipv6 += 1
        if not st_ipv6_network.in_network(high_ipv6):
            high_ipv6 = None

    #
    # If a network is configured for jails, and it is NOT on
    # the same network as the host, setup a bridge address.
    # (This will be the default gateway of the jail).
    #
    bridge_ipv4 = None
    if st_ipv4_network is not None and not st_host_ipv4_network:
        bridge_ipv4 = sipcalc_type("%s/%d" % (
            st_ipv4_network.usable_range[0],
            st_ipv4_network.network_mask_bits,
        ))

    bridge_ipv6 = None
    if st_ipv6_network is not None:
        bridge_ipv6 = sipcalc_type("%s/%d" % (
            st_ipv6_network.network_range[0],
            st_ipv6_network.prefix_length,
        ))

    return {
        'high_ipv4': high_ipv4,
        'high_ipv6': high_ipv6,
        'bridge_ipv4': bridge_ipv4,
        'bridge_ipv6': bridge_ipv6,
    }