diff options
Diffstat (limited to 'meta/recipes-devtools/rpm/rpm/rpm-check-rootpath-reasonableness.patch')
-rw-r--r-- | meta/recipes-devtools/rpm/rpm/rpm-check-rootpath-reasonableness.patch | 96 |
1 files changed, 0 insertions, 96 deletions
diff --git a/meta/recipes-devtools/rpm/rpm/rpm-check-rootpath-reasonableness.patch b/meta/recipes-devtools/rpm/rpm/rpm-check-rootpath-reasonableness.patch deleted file mode 100644 index 3d8d645a77..0000000000 --- a/meta/recipes-devtools/rpm/rpm/rpm-check-rootpath-reasonableness.patch +++ /dev/null @@ -1,96 +0,0 @@ -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 - |