Frans Pop wrote:
Is there any way the two templates can be combined? They are very similar and having 60+ translations of them is not very appealing, especially as they will be only rarely used.

Ok, I've attached a new version of the patch which merges the two templates. Beside the template name change it should be identical to the previous patch.

Regards,
David
Index: debian/partman-lvm.templates
===================================================================
--- debian/partman-lvm.templates        (revision 38836)
+++ debian/partman-lvm.templates        (working copy)
@@ -386,3 +386,13 @@
  You can switch to the third virtual console (VT3) by pressing Alt-F3,
  and you get back to the installer by pressing Alt-F1.
 
+Template: partman-lvm/badnamegiven
+Type: error
+_Description: Invalid name entered
+ An invalid name for the logical volume or volume group has been entered.
+ Please choose another name.
+ .
+ Names may only contain alphanumeric characters, hyphen, plus, period
+ and underscore. They must be 128 characters or less and may not begin
+ with a hyphen. The names "." and ".." are not allowed. In addition,
+ logical volume names may not begin with "snapshot".
Index: lvm_tools.sh
===================================================================
--- lvm_tools.sh        (revision 38836)
+++ lvm_tools.sh        (working copy)
@@ -132,7 +132,46 @@
        return 0
 }      
 
+# Common checks for VG and LV names
+# Rules:
+# 1) At least one character
+# 2) Only alphanumeric characters (isalnum()) and "._-+"
+# 3) May not be "." or ".."
+# 4) must not start with a hyphen
+# 5) maximum name length 128 characters
+# See lvm2 source and bug #254630 for details
+lvm_name_ok() {
+       local name
+       name="$1"
 
+       # Rule 1
+       if [ -z "$name" ]; then
+               return 1
+       fi
+
+       # Rule 2
+       if [ "$(echo -n "$name" | sed 's/[^-+_\.[:alnum:]]//g')" != "$name" ]; 
then
+               return 1
+       fi
+
+       # Rule 3
+       if [ "$name" = "." -o "$name" = ".." ]; then
+               return 1
+       fi
+
+       # Rule 4
+       if [ "$(echo -n "$name" | sed 's/^-//')" != "$name" ]; then
+               return 1
+       fi
+
+       # Rule 5
+       if [ $(echo -n "$name" | wc -c) -gt 128 ]; then
+               return 1
+       fi
+
+       return 0
+}
+
 ###############################################################################
 #                                
 # Physical Volume utility functions
@@ -285,7 +324,26 @@
        return $?
 }
 
+# Checks that a logical volume name is ok
+# Rules:
+# 1) The common rules (see lvm_name_ok)
+# 2) must not start with "snapshot"
+# See lvm2 source and bug #254630 for details
+lv_name_ok() {
+       local lvname
+       lvname="$1"
 
+       # Rule 1
+       lvm_name_ok "$lvname" || return 1
+
+       # Rule 2
+       if [ "${lvname#snapshot}" != "$lvname" ]; then
+               return 1
+       fi
+
+       return 0
+}
+
 ###############################################################################
 #                                
 # Volume Group utility functions
@@ -393,3 +451,17 @@
        log-output -t partman-lvm vgreduce "$vg" "$pv"
        return $?
 }
+
+# Checks that a logical volume name is ok
+# Rules:
+# 1) The common rules (see lvm_name_ok)
+# See lvm2 source and bug #254630 for details
+vg_name_ok() {
+       local vgname
+       vgname="$1"
+
+       # Rule 1
+       lvm_name_ok "$vgname" || return 1
+
+       return 0
+}
Index: choose_partition/lvm/do_option
===================================================================
--- choose_partition/lvm/do_option      (revision 38836)
+++ choose_partition/lvm/do_option      (working copy)
@@ -109,6 +109,8 @@
        [ $? -eq 30 ] && return
        db_get partman-lvm/vgcreate_name
        vg="$RET"
+
+       # Check VG name
        if [ -z "$vg" ]; then
                db_set partman-lvm/vgcreate_nonamegiven "false"
                db_input critical partman-lvm/vgcreate_nonamegiven
@@ -116,6 +118,13 @@
                return
        fi
 
+       if ! vg_name_ok "$vg"; then
+               db_set partman-lvm/badnamegiven "false"
+               db_input critical partman-lvm/badnamegiven
+               db_go
+               return
+       fi
+
        # Check whether the VG name is already in use
        if vgs "$vg" > /dev/null 2>&1; then
                db_set partman-lvm/vgcreate_nameused "false"
@@ -421,14 +430,23 @@
        db_go
        [ $? -eq 30 ] && return
        db_get partman-lvm/lvcreate_name
-       if [ -z "$RET" ]; then
+       lv="$RET"
+
+       # Check LV name
+       if [ -z "$lv" ]; then
                db_set partman-lvm/lvcreate_nonamegiven "false"
                db_input critical partman-lvm/lvcreate_nonamegiven
                db_go
                return
        fi
-       lv="$RET"
 
+       if ! lv_name_ok "$lv"; then
+               db_set partman-lvm/badnamegiven "false"
+               db_input critical partman-lvm/badnamegiven
+               db_go
+               return
+       fi
+
        # Make sure the name isn't already in use
        if lvs "/dev/$vg/$lv" > /dev/null 2>&1; then
                db_subst partman-lvm/lvcreate_exists LV "$lv"

Reply via email to