def _checkValues(self):
        if not self.ipv4Selected and not self.ipv6Selected:
            self.anaconda.intf.messageWindow(_("Missing protocol"),
                               _("You must select at least one protocol version"))
            return False

        if self.ipv4Selected:
            if self.ipv4Method == "v4manual":
                try:
                    network.sanityCheckIPString(self.ipv4Address)
                except network.IPMissing, msg:
                    self._handleIPMissing(_("IPv4 Address"))
                    return False
                except network.IPError, msg:
                    self._handleIPError(_("IPv4 Address"), msg)
                    return False

                if not self.ipv4Prefix:
                    self._handleIPMissing(_("IPv4 Prefix"))
                    return False
                elif (int(self.ipv4Prefix) < 0 or
                      int(self.ipv4Prefix) > 32):
                    msg = _("IPv4 CIDR prefix must be between 0 and 32.")
                    self._handleIPError(_("IPv4 Prefix"), msg)
                    return False

                if self.ipv4Gateway:
                    try:
                        network.sanityCheckIPString(self.ipv4Gateway)
                    except network.IPError, msg:
                        self._handleIPError(_("IPv4 Gateway"), msg)
                        return False
Beispiel #2
0
    def _checkValues(self):
        if not self.ipv4Selected and not self.ipv6Selected:
            self.anaconda.intf.messageWindow(_("Missing protocol"),
                               _("You must select at least one protocol version"))
            return False

        if self.ipv4Selected:
            if self.ipv4Method == "v4manual":
                try:
                    network.sanityCheckIPString(self.ipv4Address)
                except network.IPMissing, msg:
                    self._handleIPMissing(_("IPv4 Address"))
                    return False
                except network.IPError, msg:
                    self._handleIPError(_("IPv4 Address"), msg)
                    return False

                if not self.ipv4Prefix:
                    self._handleIPMissing(_("IPv4 Prefix"))
                    return False
                elif (int(self.ipv4Prefix) < 0 or
                      int(self.ipv4Prefix) > 32):
                    msg = _("IPv4 CIDR prefix must be between 0 and 32.")
                    self._handleIPError(_("IPv4 Prefix"), msg)
                    return False

                if self.ipv4Gateway:
                    try:
                        network.sanityCheckIPString(self.ipv4Gateway)
                    except network.IPError, msg:
                        self._handleIPError(_("IPv4 Gateway"), msg)
                        return False
Beispiel #3
0
    def addIscsiDriveDialog(self, screen):
        if not network.hasActiveNetDev():
            ButtonChoiceWindow(
                screen, _("Error"), "Must have a network configuration set up "
                "for iSCSI config.  Please boot with "
                "'linux asknetwork'")
            return INSTALL_BACK

        iname = iscsi.iscsi().initiator
        (button, entries) = EntryWindow(
            screen,
            _("Configure iSCSI Parameters"),
            _("To use iSCSI disks, you must provide the address of your iSCSI target and the iSCSI initiator name you've configured for your host."
              ),
            prompts=[
                _("Target IP Address"), (_("iSCSI Initiator Name"), iname),
                _("CHAP username"),
                _("CHAP password"),
                _("Reverse CHAP username"),
                _("Reverse CHAP password")
            ])
        if button == TEXT_CANCEL_CHECK:
            return INSTALL_BACK

        (user, pw, user_in, pw_in) = entries[2:]

        target = entries[0].strip()
        try:
            count = len(target.split(":"))
            idx = target.rfind("]:")
            # Check for IPV6 [IPV6-ip]:port
            if idx != -1:
                ip = target[1:idx]
                port = target[idx + 2:]
            # Check for IPV4 aaa.bbb.ccc.ddd:port
            elif count == 2:
                idx = target.rfind(":")
                ip = target[:idx]
                port = target[idx + 1:]
            else:
                ip = target
                port = "3260"
            network.sanityCheckIPString(ip)
        except network.IPMissing, msg:
            raise ValueError, msg
                        self._handleIPError(_("IPv4 Gateway"), msg)
                        return False

                if self.ipv4Nameserver:
                    for addr in self.ipv4Nameserver.split(','):
                        addr.split()
                        try:
                            network.sanityCheckIPString(addr)
                        except network.IPError, msg:
                            self._handleIPError(_("IPv4 Nameserver"), msg)
                            return False

        if self.ipv6Selected:
            if self.ipv6Method == "v6manual":
                try:
                    network.sanityCheckIPString(self.ipv6Address)
                except network.IPMissing, msg:
                    self._handleIPMissing(_("IPv6 Address"))
                    return False
                except network.IPError, msg:
                    self._handleIPError(_("IPv6 Address"), msg)
                    return False

                if not self.ipv6Prefix:
                    self._handleIPMissing(_("IPv6 Prefix"))
                    return False
                elif (int(self.ipv6Prefix) < 0 or
                      int(self.ipv6Prefix) > 128):
                    msg = _("IPv6 CIDR prefix must be between 0 and 128.")
                    self._handleIPError(_("IPv6 Prefix"), msg)
                    return False
    def _checkValues(self):
        if not self.ipv4Selected and not self.ipv6Selected:
            self.anaconda.intf.messageWindow(_("Missing protocol"),
                               _("You must select at least one protocol version"))
            return False

        if self.ipv4Selected:
            if self.ipv4Method == "v4manual":
                try:
                    network.sanityCheckIPString(self.ipv4Address)
                except network.IPMissing as msg:
                    self._handleIPMissing(_("IPv4 Address"))
                    return False
                except network.IPError as msg:
                    self._handleIPError(_("IPv4 Address"), msg)
                    return False

                if not self.ipv4Prefix:
                    self._handleIPMissing(_("IPv4 Prefix"))
                    return False
                elif (int(self.ipv4Prefix) < 0 or
                      int(self.ipv4Prefix) > 32):
                    msg = _("IPv4 CIDR prefix must be between 0 and 32.")
                    self._handleIPError(_("IPv4 Prefix"), msg)
                    return False

                if self.ipv4Gateway:
                    try:
                        network.sanityCheckIPString(self.ipv4Gateway)
                    except network.IPError as msg:
                        self._handleIPError(_("IPv4 Gateway"), msg)
                        return False

                if self.ipv4Nameserver:
                    for addr in self.ipv4Nameserver.split(','):
                        addr.split()
                        try:
                            network.sanityCheckIPString(addr)
                        except network.IPError as msg:
                            self._handleIPError(_("IPv4 Nameserver"), msg)
                            return False

        if self.ipv6Selected:
            if self.ipv6Method == "v6manual":
                try:
                    network.sanityCheckIPString(self.ipv6Address)
                except network.IPMissing as msg:
                    self._handleIPMissing(_("IPv6 Address"))
                    return False
                except network.IPError as msg:
                    self._handleIPError(_("IPv6 Address"), msg)
                    return False

                if not self.ipv6Prefix:
                    self._handleIPMissing(_("IPv6 Prefix"))
                    return False
                elif (int(self.ipv6Prefix) < 0 or
                      int(self.ipv6Prefix) > 128):
                    msg = _("IPv6 CIDR prefix must be between 0 and 128.")
                    self._handleIPError(_("IPv6 Prefix"), msg)
                    return False

                if self.ipv6Gateway:
                    try:
                        network.sanityCheckIPString(self.ipv6Gateway)
                    except network.IPError as msg:
                        self._handleIPError(_("IPv6 Gateway"), msg)
                        return False
                if self.ipv6Nameserver:
                    for addr in self.ipv6Nameserver.split(','):
                        addr.split()
                        try:
                            network.sanityCheckIPString(addr)
                        except network.IPError as msg:
                            self._handleIPError(_("IPv6 Nameserver"), msg)
                            return False

        return True
Beispiel #6
0
class NetworkConfiguratorText:
    def _handleIPError(self, field, errmsg):
        self.anaconda.intf.messageWindow(_("Error With Data"),
                                         _("An error occurred converting the "
                                           "value entered for "
                                           "\"%(field)s\":\n%(errmsg)s") \
                                         % {'field': field, 'errmsg': errmsg})

    def _handleIPMissing(self, field):
        self.anaconda.intf.messageWindow(_("Error With Data"),
                                         _("A value is required for the field %s") % field)

    def __init__(self, screen, anaconda):
        self.screen = screen
        self.anaconda = anaconda
        self.netdevs = self.anaconda.network.netdevices

        self._initValues()

    def _initValues(self):
        self.ipv4Selected = 1
        self.ipv6Selected = 1
        self.ipv4Method = "v4dhcp"
        self.ipv6Method = "v6auto"
        self.ipv4Address = ""
        self.ipv4Prefix = ""
        self.ipv4Gateway = ""
        self.ipv4Nameserver = ""
        self.ipv6Address = ""
        self.ipv6Prefix = ""
        self.ipv6Gateway = ""
        self.ipv6Nameserver = ""

    def run(self):

        dev_list = []
        selected_devname = None

        devnames = self.netdevs.keys()
        devnames.sort()

        # Preselect device set in kickstart
        ksdevice = self.anaconda.network.getKSDevice()
        if ksdevice:
            ksdevice = ksdevice.get("DEVICE")

        for devname in devnames:
            hwaddr = self.netdevs[devname].get("HWADDR")

            if hwaddr:
                desc = "%s - %.50s" % (devname, hwaddr)
            else:
                desc = devname

            if selected_devname is None:
                selected_devname = devname

            if ksdevice and ksdevice == devname:
                selected_devname = devname
            dev_list.append((desc, devname))

        while True:
            w = self.deviceSelectionForm(dev_list, selected_devname)
            result = w.run()
            button = w.buttons.buttonPressed(result)

            if button == TEXT_BACK_CHECK:
                self.screen.popWindow()
                return INSTALL_BACK

            selected_devname = self.interfaceList.current()

            while True:
                w = self.configForm(selected_devname)
                result = w.run()
                button = w.buttons.buttonPressed(result)

                if button == TEXT_BACK_CHECK:
                    self.screen.popWindow()
                    self.screen.popWindow()
                    break

                self._readValues()
                if (self._checkValues() and
                    self._applyValues(selected_devname)):
                    self.screen.popWindow()
                    self.screen.popWindow()
                    return INSTALL_OK
                else:
                    self.screen.popWindow()

    def deviceSelectionForm(self, dev_list, preselected_dev=None):

        grid = GridFormHelp(self.screen, _("Enable network interface"), "netselection",
                            1, 9)

        tb = TextboxReflowed(60, _("This requires that you have an active "
                                   "network connection during the installation "
                                   "process.  Please select network "
                                   "interface to configure."))
        grid.add(tb, 0, 0, anchorLeft = 1, padding = (0, 0, 0, 1))

        self.interfaceList = Listbox(3, scroll = 1, returnExit = 0)

        for (desc, dev) in dev_list:
            self.interfaceList.append(desc, dev)
        if preselected_dev:
            self.interfaceList.setCurrent(preselected_dev)

        grid.add(self.interfaceList, 0, 1, padding = (0, 0, 0, 1))

        grid.buttons = ButtonBar(self.screen, [TEXT_OK_BUTTON, TEXT_BACK_BUTTON] )
        grid.add(grid.buttons, 0, 2, anchorLeft = 1, growx = 1)

        return grid

    def configForm(self, devname):

        # Create device configuration screen
        grid = GridFormHelp(self.screen, _("Enable network interface"), "netconfig",
                            1, 13)

        tb = TextboxReflowed(60, _("Configure interface %s "
                                   "to be used during installation process.")
                                    % devname)
        grid.add(tb, 0, 0, anchorLeft = 1, padding = (0, 0, 0, 1))

        self.ipv4Checkbox = Checkbox(_("Enable IPv4 Support"),
                                     isOn=self.ipv4Selected)
        grid.add(self.ipv4Checkbox, 0, 1, anchorLeft = 1, padding = (0, 0, 0, 0), growx = 1)
        self.v4radio = RadioGroup()
        self.v4radio_auto = self.v4radio.add(_("Dynamic IP configuration (DHCP)"),
                                             "v4dhcp",
                                             self.ipv4Method=="v4dhcp")
        self.v4radio_manual = self.v4radio.add(_("Manual Configuration"),
                                               "v4manual",
                                               self.ipv4Method=="v4manual")
        grid.add(self.v4radio_auto, 0, 2, anchorLeft = 1, padding = (2, 0, 0, 0), growx = 1)
        grid.add(self.v4radio_manual, 0, 3, anchorLeft = 1, padding = (2, 0, 0, 0), growx = 1)


        ipv4Grid = Grid(4, 3)
        ipv4Grid.setField(Label(_("IPv4 Address:")), 0, 0, padding = (0, 0, 1, 0),
                         anchorLeft = 1)
        self.ipv4AddressEntry = Entry(20, scroll=1)
        self.ipv4AddressEntry.set(self.ipv4Address)
        ipv4Grid.setField(self.ipv4AddressEntry, 1, 0)
        ipv4Grid.setField(Label("/"), 2, 0)
        self.ipv4PrefixEntry = Entry(3, scroll=0)
        self.ipv4PrefixEntry.set(self.ipv4Prefix)
        ipv4Grid.setField(self.ipv4PrefixEntry, 3, 0)
        ipv4Grid.setField(Label(_("Gateway:")), 0, 1, padding = (0, 0, 0, 0),
                              anchorLeft = 1)
        self.ipv4GatewayEntry = Entry(20, scroll=1)
        self.ipv4GatewayEntry.set(self.ipv4Gateway)
        ipv4Grid.setField(self.ipv4GatewayEntry, 1, 1)
        ipv4Grid.setField(Label(_("Nameserver:")), 0, 2, padding = (0, 0, 0, 0),
                             anchorLeft = 1)
        self.ipv4NameserverEntry = Entry(20, scroll=1)
        self.ipv4NameserverEntry.set(self.ipv4Nameserver)
        ipv4Grid.setField(self.ipv4NameserverEntry, 1, 2)

        grid.add(ipv4Grid, 0, 4, anchorLeft = 1, padding = (6, 0, 0, 0))

        self.ipv6Checkbox = Checkbox(_("Enable IPv6 Support"),
                                     isOn=self.ipv6Selected)
        grid.add(self.ipv6Checkbox, 0, 5, anchorLeft = 1, padding = (0, 0, 0, 0), growx = 1)
        self.v6radio = RadioGroup()
        self.v6radio_auto = self.v6radio.add(_("Automatic neighbor discovery"),
                                             "v6auto",
                                             self.ipv6Method=="v6auto")
        self.v6radio_dhcp = self.v6radio.add(_("Dynamic IP Configuration (DHCPv6)"),
                                               "v6dhcp",
                                               self.ipv6Method=="v6dhcp")
        self.v6radio_manual = self.v6radio.add(_("Manual Configuration"),
                                               "v6manual",
                                               self.ipv6Method=="v6manual")
        grid.add(self.v6radio_auto, 0, 6, anchorLeft = 1, padding = (2, 0, 0, 0), growx = 1)
        grid.add(self.v6radio_dhcp, 0, 7, anchorLeft = 1, padding = (2, 0, 0, 0), growx = 1)
        grid.add(self.v6radio_manual, 0, 8, anchorLeft = 1, padding = (2, 0, 0, 0), growx = 1)

        ipv6Grid = Grid(4, 3)
        ipv6Grid.setField(Label(_("IPv6 Address:")), 0, 0, padding = (0, 0, 1, 0),
                          anchorLeft = 1)
        self.ipv6AddressEntry = Entry(41, scroll=1)
        self.ipv6AddressEntry.set(self.ipv6Address)
        ipv6Grid.setField(self.ipv6AddressEntry, 1, 0)
        ipv6Grid.setField(Label("/"), 2, 0)
        self.ipv6PrefixEntry = Entry(4, scroll=0)
        self.ipv6PrefixEntry.set(self.ipv6Prefix)
        ipv6Grid.setField(self.ipv6PrefixEntry, 3, 0)
        ipv6Grid.setField(Label(_("Gateway:")), 0, 1, padding = (0, 0, 0, 0),
                          anchorLeft = 1)
        self.ipv6GatewayEntry = Entry(41, scroll=1)
        self.ipv6GatewayEntry.set(self.ipv6Gateway)
        ipv6Grid.setField(self.ipv6GatewayEntry, 1, 1)
        ipv6Grid.setField(Label(_("Nameserver:")), 0, 2, padding = (0, 0, 0, 0),
                         anchorLeft = 1)
        self.ipv6NameserverEntry = Entry(41, scroll=1)
        self.ipv6NameserverEntry.set(self.ipv6Nameserver)
        ipv6Grid.setField(self.ipv6NameserverEntry, 1, 2)

        grid.add(ipv6Grid, 0, 9, anchorLeft = 1, padding = (6, 0, 0, 0))

        grid.buttons = ButtonBar(self.screen, [TEXT_OK_BUTTON, TEXT_BACK_BUTTON])
        grid.add(grid.buttons, 0, 10, anchorLeft = 1, growx = 1)

        self.v4radio_manual.setCallback(self._ipv4MethodToggled)
        self.v4radio_auto.setCallback(self._ipv4MethodToggled)
        self.v6radio_manual.setCallback(self._ipv6MethodToggled)
        self.v6radio_auto.setCallback(self._ipv6MethodToggled)
        self.v6radio_dhcp.setCallback(self._ipv6MethodToggled)
        self.ipv4Checkbox.setCallback(self._ipv4MethodToggled)
        self.ipv6Checkbox.setCallback(self._ipv6MethodToggled)

        self._ipv4MethodToggled()
        self._ipv6MethodToggled()

        return grid


    def _readValues(self):
        self.ipv4Selected = self.ipv4Checkbox.selected()
        self.ipv6Selected = self.ipv6Checkbox.selected()
        self.ipv4Method = self.v4radio.getSelection()
        self.ipv6Method = self.v6radio.getSelection()
        self.ipv4Address = self.ipv4AddressEntry.value()
        self.ipv4Prefix = self.ipv4PrefixEntry.value()
        self.ipv4Gateway = self.ipv4GatewayEntry.value()
        self.ipv4Nameserver = self.ipv4NameserverEntry.value()
        self.ipv6Address = self.ipv6AddressEntry.value()
        self.ipv6Prefix = self.ipv6PrefixEntry.value()
        self.ipv6Gateway = self.ipv6GatewayEntry.value()
        self.ipv6Nameserver = self.ipv6NameserverEntry.value()

    def _checkValues(self):
        if not self.ipv4Selected and not self.ipv6Selected:
            self.anaconda.intf.messageWindow(_("Missing protocol"),
                               _("You must select at least one protocol version"))
            return False

        if self.ipv4Selected:
            if self.ipv4Method == "v4manual":
                try:
                    network.sanityCheckIPString(self.ipv4Address)
                except network.IPMissing, msg:
                    self._handleIPMissing(_("IPv4 Address"))
                    return False
                except network.IPError, msg:
                    self._handleIPError(_("IPv4 Address"), msg)
                    return False

                if not self.ipv4Prefix:
                    self._handleIPMissing(_("IPv4 Prefix"))
                    return False
                elif (int(self.ipv4Prefix) < 0 or
                      int(self.ipv4Prefix) > 32):
                    msg = _("IPv4 CIDR prefix must be between 0 and 32.")
                    self._handleIPError(_("IPv4 Prefix"), msg)
                    return False

                if self.ipv4Gateway:
                    try:
                        network.sanityCheckIPString(self.ipv4Gateway)
                    except network.IPError, msg:
                        self._handleIPError(_("IPv4 Gateway"), msg)
                        return False

                if self.ipv4Nameserver:
                    for addr in self.ipv4Nameserver.split(','):
                        addr.split()
                        try:
                            network.sanityCheckIPString(addr)
                        except network.IPError, msg:
                            self._handleIPError(_("IPv4 Nameserver"), msg)
                            return False
Beispiel #7
0
                        self._handleIPError(_("IPv4 Gateway"), msg)
                        return False

                if self.ipv4Nameserver:
                    for addr in self.ipv4Nameserver.split(','):
                        addr.split()
                        try:
                            network.sanityCheckIPString(addr)
                        except network.IPError, msg:
                            self._handleIPError(_("IPv4 Nameserver"), msg)
                            return False

        if self.ipv6Selected:
            if self.ipv6Method == "v6manual":
                try:
                    network.sanityCheckIPString(self.ipv6Address)
                except network.IPMissing, msg:
                    self._handleIPMissing(_("IPv6 Address"))
                    return False
                except network.IPError, msg:
                    self._handleIPError(_("IPv6 Address"), msg)
                    return False

                if not self.ipv6Prefix:
                    self._handleIPMissing(_("IPv6 Prefix"))
                    return False
                elif (int(self.ipv6Prefix) < 0 or
                      int(self.ipv6Prefix) > 128):
                    msg = _("IPv6 CIDR prefix must be between 0 and 128.")
                    self._handleIPError(_("IPv6 Prefix"), msg)
                    return False
def addIscsiDrive(anaconda):
    if not network.hasActiveNetDev():
        if not anaconda.intf.enableNetwork():
            return gtk.RESPONSE_CANCEL
        urlgrabber.grabber.reset_curl_obj()

    (dxml, dialog) = gui.getGladeWidget("iscsi-config.glade", "iscsiDialog")
    gui.addFrame(dialog)
    dialog.show_all()
    sg = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL)
    for w in [
            "iscsiAddrEntry", "iscsiInitiatorEntry", "userEntry", "passEntry",
            "userinEntry", "passinEntry"
    ]:
        sg.add_widget(dxml.get_widget(w))

    # get the initiator name if it exists and don't allow changing
    # once set
    initiator_entry = dxml.get_widget("iscsiInitiatorEntry")
    initiator_entry.set_text(anaconda.storage.iscsi.initiator)
    if anaconda.storage.iscsi.initiatorSet:
        initiator_entry.set_sensitive(False)

    while True:
        rc = dialog.run()
        if rc in [gtk.RESPONSE_CANCEL, gtk.RESPONSE_DELETE_EVENT]:
            break

        initiator = initiator_entry.get_text().strip()
        if len(initiator) == 0:
            anaconda.intf.messageWindow(
                _("Invalid Initiator Name"),
                _("You must provide an initiator name."))
            continue

        anaconda.storage.iscsi.initiator = initiator

        target = dxml.get_widget("iscsiAddrEntry").get_text().strip()
        user = dxml.get_widget("userEntry").get_text().strip()
        pw = dxml.get_widget("passEntry").get_text().strip()
        user_in = dxml.get_widget("userinEntry").get_text().strip()
        pw_in = dxml.get_widget("passinEntry").get_text().strip()

        try:
            count = len(target.split(":"))
            idx = target.rfind("]:")
            # Check for IPV6 [IPV6-ip]:port
            if idx != -1:
                ip = target[1:idx]
                port = target[idx + 2:]
            # Check for IPV4 aaa.bbb.ccc.ddd:port
            elif count == 2:
                idx = target.rfind(":")
                ip = target[:idx]
                port = target[idx + 1:]
            else:
                ip = target
                port = "3260"

            network.sanityCheckIPString(ip)
        except (network.IPMissing, network.IPError) as msg:
            anaconda.intf.messageWindow(_("Error with Data"), msg)
            continue

        try:
            anaconda.storage.iscsi.addTarget(ip, port, user, pw, user_in,
                                             pw_in, anaconda.intf)
        except ValueError as e:
            anaconda.intf.messageWindow(_("Error"), str(e))
            continue
        except IOError as e:
            anaconda.intf.messageWindow(_("Error"), str(e))
            rc = gtk.RESPONSE_CANCEL

        break

    dialog.destroy()
    return rc