From ddc5063c167ea3c253262c79c177d72c6aab68f9 Mon Sep 17 00:00:00 2001 From: Dan Walsh Date: Tue, 23 Aug 2011 14:46:37 -0400 Subject: [PATCH] policycoreutils: setfiles: Fix process_glob to handle error situations properly Rather than error when a glob does not match return success as this is not a problem. Signed-off-by: Eric Paris Acked-by: Eric Paris --- policycoreutils/setfiles/restore.c | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/policycoreutils/setfiles/restore.c b/policycoreutils/setfiles/restore.c index 3a697f94..48ffcad0 100644 --- a/policycoreutils/setfiles/restore.c +++ b/policycoreutils/setfiles/restore.c @@ -368,19 +368,21 @@ int process_glob(char *name, int recurse) { int errors; memset(&globbuf, 0, sizeof(globbuf)); errors = glob(name, GLOB_TILDE | GLOB_PERIOD, NULL, &globbuf); - if (errors) - errors = process_one_realpath(name, recurse); - else { - for (i = 0; i < globbuf.gl_pathc; i++) { - int len = strlen(globbuf.gl_pathv[i]) -2; - if (len > 0 && strcmp(&globbuf.gl_pathv[i][len--], "/.") == 0) - continue; - if (len > 0 && strcmp(&globbuf.gl_pathv[i][len], "/..") == 0) - continue; - errors |= process_one_realpath(globbuf.gl_pathv[i], recurse); - } - globfree(&globbuf); + if (errors == GLOB_NOMATCH) + return 0; + + if (errors) + return errors; + + for (i = 0; i < globbuf.gl_pathc; i++) { + int len = strlen(globbuf.gl_pathv[i]) -2; + if (len > 0 && strcmp(&globbuf.gl_pathv[i][len--], "/.") == 0) + continue; + if (len > 0 && strcmp(&globbuf.gl_pathv[i][len], "/..") == 0) + continue; + errors |= process_one_realpath(globbuf.gl_pathv[i], recurse); } + globfree(&globbuf); return errors; }