X-Git-Url: https://git.librecmc.org/?p=oweals%2Fopkg-lede.git;a=blobdiff_plain;f=libopkg%2Fpkg.c;h=6c07b840b8c978e194e49abdb42f89d37868b084;hp=26b6efe31b4da30d28c28bfaad067d069c7490d6;hb=b6a38150404297fd718587d1ffefc160044f2f64;hpb=5b68464bd8b8405fae90c1d96cdd7367a506bd5c diff --git a/libopkg/pkg.c b/libopkg/pkg.c index 26b6efe..6c07b84 100644 --- a/libopkg/pkg.c +++ b/libopkg/pkg.c @@ -18,6 +18,7 @@ #include "includes.h" #include #include +#include #include #include "pkg.h" @@ -1052,6 +1053,7 @@ char * pkg_formatted_field(pkg_t *pkg, const char *field ) void pkg_print_info(pkg_t *pkg, FILE *file) { + int t=0; char * buff; if (pkg == NULL) { return; @@ -1061,7 +1063,7 @@ void pkg_print_info(pkg_t *pkg, FILE *file) if ( buff == NULL ) return; if (strlen(buff)>2){ - fwrite(buff, 1, strlen(buff), file); + t = fwrite(buff, 1, strlen(buff), file); //#~rzr:TODO } free(buff); } @@ -1079,7 +1081,7 @@ void pkg_print_status(pkg_t * pkg, FILE * file) can be found in th available file. But, someone proposed the idea to make it possible to - reconstruct a .ipk from an installed package, (ie. for beaming + reconstruct a .opk from an installed package, (ie. for beaming from one handheld to another). So, maybe we actually want a few more fields here, (depends, suggests, etc.), so that that would be guaranteed to work even in the absence of more information @@ -1311,7 +1313,7 @@ str_list_t *pkg_get_installed_files(pkg_t *pkg) return NULL; } - /* For uninstalled packages, get the file list firectly from the package. + /* For uninstalled packages, get the file list directly from the package. For installed packages, look at the package.list file in the database. */ if (pkg->state_status == SS_NOT_INSTALLED || pkg->dest == NULL) { @@ -1493,8 +1495,24 @@ int pkg_run_script(opkg_conf_t *conf, pkg_t *pkg, scripts when running with offline_root mode and/or a dest other than '/'. I've been playing around with some clever chroot tricks and I might come up with something workable. */ + /* + * Attempt to provide a restricted environment for offline operation + * Need the following set as a minimum: + * OPKG_OFFLINE_ROOT = absolute path to root dir + * D = absolute path to root dir (for OE generated postinst) + * PATH = something safe (a restricted set of utilities) + */ + + bool AllowOfflineMode = false; if (conf->offline_root) { setenv("OPKG_OFFLINE_ROOT", conf->offline_root, 1); + setenv("D", conf->offline_root, 1); + if (NULL == conf->offline_root_path || '\0' == conf->offline_root_path[0]) { + setenv("PATH", "/dev/null", 1); + } else { + setenv("PATH", conf->offline_root_path, 1); + AllowOfflineMode = true; + } } setenv("PKG_ROOT", @@ -1505,7 +1523,7 @@ int pkg_run_script(opkg_conf_t *conf, pkg_t *pkg, return 0; } - if (conf->offline_root) { + if (conf->offline_root && !AllowOfflineMode) { fprintf(stderr, "(offline root mode: not running %s.%s)\n", pkg->name, script); free(path); return 0;