rpm: check if the argument(rootpath) exists or be writable

When user execute the command "rpm -qai --root=$dir",if $dir doesn't
exist or is unwritable as result of making a typo in rootpath,then
it will create dirent $dir and subdirectory.
So we should add the check function to fix it before creating relational
subdirectory,and warn the incorrect rootpath to user. It just checks the
rootpath reasonableness when the user input the argument(--root=/-r=).

Upstream-Status: Pending

Signed-off-by: Zhixiong Chi <zchi@windriver.com>
---
 rpmqv.c | 45 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 45 insertions(+)

diff --git a/rpmqv.c b/rpmqv.c
index 40c42bd..88d85ab 100644
--- a/rpmqv.c
+++ b/rpmqv.c
@@ -206,6 +206,8 @@ static struct poptOption optionsTable[] = {
    POPT_TABLEEND
 };
 
+static int _rpmqv_rootpath_state = 0;
+
 #ifdef __MINT__
 /* MiNT cannot dynamically increase the stack.  */
 long _stksize = 64 * 1024L;
@@ -427,6 +429,41 @@ static void integrity_check(const char *progname, enum modes progmode_num)
 }
 #endif
 
+/*check if the rootdir is writable or exists */
+int access_file(const char *rootdir)
+{
+    int ret,rootdir_len;
+
+    if(rootdir == NULL) {
+        return -1;
+    }
+
+    rootdir_len = strlen(rootdir);
+    /*make sure that dirent argument trailing is "/" */
+    if(!(rootdir_len && rootdir[rootdir_len - 1] == '/')){
+        char *t = (char *)malloc(rootdir_len + 2);
+        *t = '\0';
+        (void)stpcpy(stpcpy(t,rootdir),"/");
+        ret = access(t,F_OK|W_OK);
+        free(t);
+    }else{
+        ret = access(rootdir,F_OK|W_OK);
+    }
+    return ret;
+}
+
+/*check if input the argument "--root/-r"  */
+void check_argument_root(int argc,char * const argv[])
+{
+    int i;
+    for (i = 0; i < argc; i++) {
+        if(strncmp(argv[i],"--root=",7) == 0 || strncmp(argv[i],"-r=",3) == 0) {
+            _rpmqv_rootpath_state = 1;
+            break;
+        }
+    }
+}
+
 /*@-bounds@*/ /* LCL: segfault */
 /*@-mods@*/ /* FIX: shrug */
 #if !defined(__GLIBC__) && !defined(__LCLINT__)
@@ -476,6 +513,8 @@ int main(int argc, const char ** argv)
     int xx;
 #endif
 	
+    check_argument_root(argc,(char *const *)argv);
+
 #if !defined(__GLIBC__) && !defined(__LCLINT__)
     environ = envp;
 #else
@@ -715,6 +754,12 @@ int main(int argc, const char ** argv)
 		argerror(_("arguments to --root (-r) must begin with a /"));
 	    break;
 	}
+        if (_rpmqv_rootpath_state) {
+            if (access_file(rpmioRootDir)) {
+                fprintf(stderr, _("Invalid directory:%s, ensure it exists or be writable\n"),rpmioRootDir);
+                exit(EXIT_FAILURE);
+            }
+        }
     }
 
 #if defined(RPM_VENDOR_OPENPKG) /* integrity-checking */
-- 
1.9.1

