int
opkg_download(const char *src, const char *dest_file_name,
- curl_progress_func cb, void *data, const short hide_error)
+ const short hide_error)
{
int err = 0;
opkg_msg(NOTICE, "Downloading %s\n", src);
if (str_starts_with(src, "file:")) {
- const char *file_src = src + 5;
+ char *file_src = urldecode_path(src + 5);
opkg_msg(INFO, "Copying %s to %s...", file_src, dest_file_name);
err = file_copy(file_src, dest_file_name);
opkg_msg(INFO, "Done.\n");
free(src_basec);
+ free(file_src);
return err;
}
{
int res;
- const char *argv[8];
+ const char *argv[11];
int i = 0;
argv[i++] = "wget";
argv[i++] = "-q";
+ if (conf->no_check_certificate) {
+ argv[i++] = "--no-check-certificate";
+ }
+ if (conf->http_timeout) {
+ argv[i++] = "--timeout";
+ argv[i++] = conf->http_timeout;
+ }
if (conf->http_proxy || conf->ftp_proxy) {
argv[i++] = "-Y";
argv[i++] = "on";
}
static int
-opkg_download_cache(const char *src, const char *dest_file_name,
- curl_progress_func cb, void *data)
+opkg_download_cache(const char *src, const char *dest_file_name)
{
char *cache_name = xstrdup(src);
char *cache_location, *p;
int err = 0;
if (!conf->cache || str_starts_with(src, "file:")) {
- err = opkg_download(src, dest_file_name, cb, data, 0);
+ err = opkg_download(src, dest_file_name, 0);
goto out1;
}
if (file_exists(cache_location))
opkg_msg(NOTICE, "Copying %s.\n", cache_location);
else {
- err = opkg_download(src, cache_location, cb, data, 0);
+ err = opkg_download(src, cache_location, 0);
if (err) {
(void)unlink(cache_location);
goto out2;
char *url;
char *local_filename;
char *stripped_filename;
+ char *urlencoded_path;
char *filename;
if (pkg->src == NULL) {
return -1;
}
- sprintf_alloc(&url, "%s/%s", pkg->src->value, filename);
+ urlencoded_path = urlencode_path(filename);
+ sprintf_alloc(&url, "%s/%s", pkg->src->value, urlencoded_path);
+ free(urlencoded_path);
/* The filename might be something like
"../../foo.opk". While this is correct, and exactly what we
sprintf_alloc(&local_filename, "%s/%s", dir, stripped_filename);
pkg_set_string(pkg, PKG_LOCAL_FILENAME, local_filename);
- err = opkg_download_cache(url, local_filename, NULL, NULL);
+ err = opkg_download_cache(url, local_filename);
free(url);
return err;
char *file_base = basename(file_basec);
sprintf_alloc(&tmp_file, "%s/%s", conf->tmp_dir, file_base);
- err = opkg_download(url, tmp_file, NULL, NULL, 0);
+ err = opkg_download(url, tmp_file, 0);
if (err)
return err;
return 0;
pid = fork();
- if (pid < 0)
+ if (pid < 0) {
+ opkg_perror(ERROR, "Failed to fork opkg-key process");
return -1;
+ }
if (!pid) {
execl("/usr/sbin/opkg-key", "opkg-key", "verify", sig_file,