1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-21 13:34:40 +03:00

Remove tag length restriction and allow / = ! : # & characters.

This commit is contained in:
Alasdair Kergon 2010-11-17 10:19:29 +00:00
parent adc78505f3
commit 10955b8289
6 changed files with 31 additions and 6 deletions

View File

@ -1,5 +1,6 @@
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.

View File

@ -285,6 +285,25 @@ void unescape_colons_and_at_signs(char *src,
*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

View File

@ -33,6 +33,7 @@ char *build_dm_uuid(struct dm_pool *mem, const char *lvid,
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);

View File

@ -205,6 +205,7 @@ is mounted read-only when the script runs.
.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
@ -221,10 +222,13 @@ Only the new LVM2 metadata format supports tagging: objects using the
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.

View File

@ -418,7 +418,7 @@ int tag_arg(struct cmd_context *cmd __attribute__((unused)), struct arg_values *
if (*pos == '@')
pos++;
if (!validate_name(pos))
if (!validate_tag(pos))
return 0;
av->value = pos;

View File

@ -222,7 +222,7 @@ int process_each_lv(struct cmd_context *cmd, int argc, char **argv,
vgname = lv_name;
if (*vgname == '@') {
if (!validate_name(vgname + 1)) {
if (!validate_tag(vgname + 1)) {
log_error("Skipping invalid tag %s",
vgname);
continue;
@ -528,7 +528,7 @@ int process_each_vg(struct cmd_context *cmd, int argc, char **argv,
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)
@ -698,7 +698,7 @@ int process_each_pv(struct cmd_context *cmd, int argc, char **argv,
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)
@ -1113,7 +1113,7 @@ struct dm_list *create_pv_list(struct dm_pool *mem, struct volume_group *vg, int
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;
}