Add error messages for url helper calls
Rpm allows URLs as cli parameters. The files are then automatically downloaded with %_urlhelper which defaults to curl(1). So far failures have been ignored right away and error messages are generated later when the file was not found on disk. Issue a meaningful error message when the help program is failing or missing completely. This allows not to ship curl with rpm while still giving the user a chance to find out what is going on. This is not quite ideal as the operation continues and creates a second error message later on, but as good as it gets without redesigning the whole code. Related: rhbz#2216754 Resolves: #2683
This commit is contained in:
parent
17739baf98
commit
4c1f71ec9e
15
rpmio/url.c
15
rpmio/url.c
|
@ -99,6 +99,7 @@ int urlGetFile(const char * url, const char * dest)
|
||||||
char *urlhelper = NULL;
|
char *urlhelper = NULL;
|
||||||
int status;
|
int status;
|
||||||
pid_t pid;
|
pid_t pid;
|
||||||
|
int res = -1;
|
||||||
|
|
||||||
urlhelper = rpmExpand("%{?_urlhelper}", NULL);
|
urlhelper = rpmExpand("%{?_urlhelper}", NULL);
|
||||||
|
|
||||||
|
@ -118,9 +119,17 @@ int urlGetFile(const char * url, const char * dest)
|
||||||
execvp(argv[0], argv);
|
execvp(argv[0], argv);
|
||||||
exit(127); /* exit with 127 for compatibility with bash(1) */
|
exit(127); /* exit with 127 for compatibility with bash(1) */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((waitpid(pid, &status, 0) != -1) && WIFEXITED(status)) {
|
||||||
|
if (WEXITSTATUS(status) == 127)
|
||||||
|
rpmlog(RPMLOG_ERR, _("Could not find url helper: \"%s\"\n"), urlhelper);
|
||||||
|
else if (WEXITSTATUS(status) == 0)
|
||||||
|
res = 0;
|
||||||
|
else
|
||||||
|
rpmlog(RPMLOG_ERR, _("Executing url helper \"%s\" failed with status %i\n"), cmd, WEXITSTATUS(status));
|
||||||
|
}
|
||||||
|
|
||||||
free(cmd);
|
free(cmd);
|
||||||
free(urlhelper);
|
free(urlhelper);
|
||||||
|
return res;
|
||||||
return ((waitpid(pid, &status, 0) != -1) &&
|
|
||||||
WIFEXITED(status) && (WEXITSTATUS(status) == 0)) ? 0 : -1;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -383,3 +383,30 @@ runroot_other rpm2archive "${RPMTEST}"/data/SRPMS/hello-1.0-1.src.rpm | tar tzf
|
||||||
])
|
])
|
||||||
|
|
||||||
RPMTEST_CLEANUP
|
RPMTEST_CLEANUP
|
||||||
|
|
||||||
|
AT_SETUP([urlhelper missing])
|
||||||
|
AT_KEYWORDS([urlhelper])
|
||||||
|
RPMDB_INIT
|
||||||
|
RPMTEST_CHECK([
|
||||||
|
# runroot rpm --define "_urlhelper /not/there" --root /srv/test -qp https://example.com/foo-0.1-1.noarch.rpm
|
||||||
|
runroot rpm --define "_urlhelper /not/there" -qp https://www.example.com/foo-1.0-1.x86_64.rpm
|
||||||
|
],
|
||||||
|
[1],
|
||||||
|
[],
|
||||||
|
[error: Could not find url helper: "/not/there"
|
||||||
|
error: open of https://www.example.com/foo-1.0-1.x86_64.rpm failed: No such file or directory
|
||||||
|
])
|
||||||
|
RPMTEST_CLEANUP
|
||||||
|
|
||||||
|
AT_SETUP([urlhelper fails])
|
||||||
|
AT_KEYWORDS([urlhelper])
|
||||||
|
RPMDB_INIT
|
||||||
|
RPMTEST_CHECK([
|
||||||
|
runroot rpm --define "_urlhelper /bin/false" --root /srv/test -qp https://example.com/foo-0.1-1.noarch.rpm 2> >(sed 's|rpm-tmp.* https|rpm-tmp https|' >&2)
|
||||||
|
],
|
||||||
|
[1],
|
||||||
|
[],
|
||||||
|
[error: Executing url helper "/bin/false /usr/local/var/tmp/rpm-tmp https://example.com/foo-0.1-1.noarch.rpm" failed with status 1
|
||||||
|
error: open of https://example.com/foo-0.1-1.noarch.rpm failed: No such file or directory
|
||||||
|
])
|
||||||
|
RPMTEST_CLEANUP
|
||||||
|
|
Loading…
Reference in New Issue