Version 2.02.77 -
===================================
+ Remove tag length restriction and allow / = ! : # & characters.
Support repetition of --addtag and --deltag arguments.
Add infrastructure for specific cmdline arguments to be repeated in groups.
Split the_args cmdline arguments and values into arg_props and arg_values.
*substr_first_unquoted_at_sign = arr_substr_first_unquoted[1];
}
+/*
+ * A-Za-z0-9._-+/=!:&#
+ */
+int validate_tag(const char *n)
+{
+ register char c;
+ register int len = 0;
+
+ if (!n || !*n)
+ return 0;
+
+ while ((len++, c = *n++))
+ if (!isalnum(c) && c != '.' && c != '_' && c != '-' && c != '+' && c != '/'
+ && c != '=' && c != '!' && c != ':' && c != '&' && c != '#')
+ return 0;
+
+ return 1;
+}
+
/*
* Device layer names are all of the form <vg>-<lv>-<layer>, any
* other hyphens that appear in these names are quoted with yet
const char *layer);
int validate_name(const char *n);
+int validate_tag(const char *n);
int apply_lvname_restrictions(const char *name);
int is_reserved_lvname(const char *name);
.TP
\fB--addtag tag\fP
Add the tag \fBtag\fP to a PV, VG or LV.
+Supply this argument multiple times to add more than one tag at once.
A tag is a word that can be used to group LVM2 objects of the same type
together.
Tags can be given on the command line in place of PV, VG or LV
LVM1 metadata format cannot be tagged because the on-disk format does not
support it.
Snapshots cannot be tagged.
-Characters allowed in tags are: A-Z a-z 0-9 _ + . -
+Characters allowed in tags are: A-Z a-z 0-9 _ + . - and
+as of version 2.02.78 the following characters are also
+accepted: / = ! : # &
.TP
\fB--deltag tag\fP
Delete the tag \fBtag\fP from a PV, VG or LV, if it's present.
+Supply this argument multiple times to remove more than one tag at once.
.TP
\fB--alloc AllocationPolicy\fP
The allocation policy to use: \fBcontiguous\fP, \fBcling\fP, \fBnormal\fP, \fBanywhere\fP or \fBinherit\fP.
if (*pos == '@')
pos++;
- if (!validate_name(pos))
+ if (!validate_tag(pos))
return 0;
av->value = pos;
vgname = lv_name;
if (*vgname == '@') {
- if (!validate_name(vgname + 1)) {
+ if (!validate_tag(vgname + 1)) {
log_error("Skipping invalid tag %s",
vgname);
continue;
for (; opt < argc; opt++) {
vg_name = argv[opt];
if (*vg_name == '@') {
- if (!validate_name(vg_name + 1)) {
+ if (!validate_tag(vg_name + 1)) {
log_error("Skipping invalid tag %s",
vg_name);
if (ret_max < EINVALID_CMD_LINE)
if (at_sign && (at_sign == argv[opt])) {
tagname = at_sign + 1;
- if (!validate_name(tagname)) {
+ if (!validate_tag(tagname)) {
log_error("Skipping invalid tag %s",
tagname);
if (ret_max < EINVALID_CMD_LINE)
if (at_sign && (at_sign == argv[i])) {
tagname = at_sign + 1;
- if (!validate_name(tagname)) {
+ if (!validate_tag(tagname)) {
log_error("Skipping invalid tag %s", tagname);
continue;
}