summaryrefslogtreecommitdiffstats
path: root/partitioning.py
diff options
context:
space:
mode:
authorJeremy Katz <katzj@redhat.com>2001-07-10 20:40:06 +0000
committerJeremy Katz <katzj@redhat.com>2001-07-10 20:40:06 +0000
commit9ec935a9a1534d14963529d46d196a88d09e3cc3 (patch)
treef82647dc1593185ca7843c47cada8bc3a0df3056 /partitioning.py
parent5fe192c80b4fafe660ca2a1aad4a3bb2c099fb90 (diff)
downloadanaconda-9ec935a9a1534d14963529d46d196a88d09e3cc3.tar.gz
anaconda-9ec935a9a1534d14963529d46d196a88d09e3cc3.tar.xz
anaconda-9ec935a9a1534d14963529d46d196a88d09e3cc3.zip
don't let people delete an extended which contains raid devices or protected partitions
Diffstat (limited to 'partitioning.py')
-rw-r--r--partitioning.py42
1 files changed, 42 insertions, 0 deletions
diff --git a/partitioning.py b/partitioning.py
index afcf8afc8..1bfa84a0a 100644
--- a/partitioning.py
+++ b/partitioning.py
@@ -1102,6 +1102,31 @@ def confirmResetPartitionState(intf):
type="yesno")
return rc
+# does this partition contain partitions we can't delete?
+def containsImmutablePart(part, requestlist):
+ if not part:
+ return None
+
+ if not part.type & parted.PARTITION_EXTENDED:
+ return None
+
+ disk = part.geom.disk
+ while part:
+ if not part.is_active():
+ part = disk.next_partition(part)
+ continue
+
+ device = get_partition_name(part)
+ request = requestlist.getRequestByDeviceName(device)
+
+ if request:
+ if request.type == REQUEST_PROTECTED:
+ return _("the partition in use by the installer.")
+
+ if requestlist.isRaidMember(request):
+ return _("a partition which is a member of a RAID array.")
+
+ part = disk.next_partition(part)
#
# handle deleting a partition - pass in the list of requests and the
# partition to be deleted
@@ -1120,6 +1145,15 @@ def doDeletePartitionByRequest(intf, requestlist, partition):
else:
device = get_partition_name(partition)
+ ret = containsImmutablePart(partition, requestlist)
+ if ret:
+ intf.messageWindow(_("Unable To Remove"),
+ _("You cannot remove this "
+ "partition, as it is an extended partition "
+ "which contains %s") %(ret))
+ return 0
+
+
# see if device is in our partition requests, remove
request = requestlist.getRequestByDeviceName(device)
if request:
@@ -1180,6 +1214,14 @@ def doEditPartitionByRequest(intf, requestlist, part):
elif part.type & parted.PARTITION_EXTENDED:
return (None, None)
+ ret = containsImmutablePart(part, requestlist)
+ if ret:
+ intf.messageWindow(_("Unable To Edit"),
+ _("You cannot edit this "
+ "partition, as it is an extended partition "
+ "which contains %s") %(ret))
+ return 0
+
request = requestlist.getRequestByDeviceName(get_partition_name(part))
if request:
if request.type == REQUEST_PROTECTED: