summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Teigland <teigland@redhat.com>2015-06-16 17:11:47 -0500
committerDavid Teigland <teigland@redhat.com>2015-06-16 17:11:47 -0500
commitec567103a59cfe7a38088a22df3cc6b72c244ede (patch)
tree1e76dffcedb1f6c03ba8c2120d5c3a51091e969f
parent85d5823971fc34a2569639c59755a8f6ca24d702 (diff)
downloadlvm2-ec567103a59cfe7a38088a22df3cc6b72c244ede.tar.gz
Validate lock_type_t values when processing arg
-rw-r--r--tools/args.h2
-rw-r--r--tools/lvmcmdline.c13
-rw-r--r--tools/toollib.c2
-rw-r--r--tools/tools.h1
4 files changed, 17 insertions, 1 deletions
diff --git a/tools/args.h b/tools/args.h
index f33de3ba4..1ca2e0ed5 100644
--- a/tools/args.h
+++ b/tools/args.h
@@ -56,7 +56,7 @@ arg(locklv_ARG, '\0', "locklv", string_arg, 0)
arg(lockopt_ARG, '\0', "lockopt", string_arg, 0)
arg(lockstart_ARG, '\0', "lockstart", NULL, 0)
arg(lockstop_ARG, '\0', "lockstop", NULL, 0)
-arg(locktype_ARG, '\0', "locktype", string_arg, 0)
+arg(locktype_ARG, '\0', "locktype", locktype_arg, 0)
arg(maxrecoveryrate_ARG, '\0', "maxrecoveryrate", size_kb_arg, 0)
arg(merge_ARG, '\0', "merge", NULL, 0)
arg(mergedconfig_ARG, '\0', "mergedconfig", NULL, 0)
diff --git a/tools/lvmcmdline.c b/tools/lvmcmdline.c
index 810183012..d0bbb61d7 100644
--- a/tools/lvmcmdline.c
+++ b/tools/lvmcmdline.c
@@ -625,6 +625,19 @@ int alloc_arg(struct cmd_context *cmd __attribute__((unused)), struct arg_values
return 1;
}
+int locktype_arg(struct cmd_context *cmd __attribute__((unused)), struct arg_values *av)
+{
+ lock_type_t lock_type;
+
+ av->sign = SIGN_NONE;
+
+ lock_type = get_lock_type_from_string(av->value);
+ if (lock_type == LOCK_TYPE_INVALID)
+ return 0;
+
+ return 1;
+}
+
int segtype_arg(struct cmd_context *cmd, struct arg_values *av)
{
struct segment_type *segtype;
diff --git a/tools/toollib.c b/tools/toollib.c
index 8eb253343..ff7574ed4 100644
--- a/tools/toollib.c
+++ b/tools/toollib.c
@@ -949,6 +949,8 @@ int vgcreate_params_set_from_args(struct cmd_context *cmd,
return 0;
}
break;
+ case LOCK_TYPE_NONE:
+ break;
};
/*
diff --git a/tools/tools.h b/tools/tools.h
index 943a9ddbb..640aa1544 100644
--- a/tools/tools.h
+++ b/tools/tools.h
@@ -149,6 +149,7 @@ int metadatatype_arg(struct cmd_context *cmd, struct arg_values *av);
int units_arg(struct cmd_context *cmd, struct arg_values *av);
int segtype_arg(struct cmd_context *cmd, struct arg_values *av);
int alloc_arg(struct cmd_context *cmd, struct arg_values *av);
+int locktype_arg(struct cmd_context *cmd, struct arg_values *av);
int readahead_arg(struct cmd_context *cmd, struct arg_values *av);
int metadatacopies_arg(struct cmd_context *cmd __attribute__((unused)), struct arg_values *av);