From 2280a6eecf67065210432f4c9172f736f0bacb58 Mon Sep 17 00:00:00 2001 From: Andrei Vagin Date: Thu, 10 May 2018 06:36:58 +0300 Subject: [PATCH] config: check that there are not unhandled parameters in a config Return an error if we meet unexpected parameters in a config file Cc: Veronika Kabatova Signed-off-by: Andrei Vagin --- criu/crtools.c | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/criu/crtools.c b/criu/crtools.c index 8006b2070..829e5d796 100644 --- a/criu/crtools.c +++ b/criu/crtools.c @@ -401,20 +401,38 @@ int main(int argc, char *argv[], char *envp[]) goto usage; while (1) { + char **_argv = NULL; + int _argc = 0; + idx = -1; switch (state) { case PARSING_GLOBAL_CONF: - opt = getopt_long(global_cfg_argc, global_conf, short_opts, long_opts, &idx); + _argc = global_cfg_argc; + _argv = global_conf; break; case PARSING_USER_CONF: - opt = getopt_long(user_cfg_argc, user_conf, short_opts, long_opts, &idx); + _argc = user_cfg_argc; + _argv = user_conf; break; case PARSING_ARGV: - opt = getopt_long(argc, argv, short_opts, long_opts, &idx); + _argc = argc; + _argv = argv; break; + default: + BUG(); } + opt = getopt_long(_argc, _argv, short_opts, long_opts, &idx); if (opt == -1) { + switch (state) { + case PARSING_GLOBAL_CONF: + case PARSING_USER_CONF: + if (optind < _argc) { + pr_err("Unknown config parameter: %s\n", _argv[optind]); + return -1; + } + break; + } if (state < PARSING_ARGV) { state++; optind = 0;