opkg: allow to configure the path to the signature verification script
[project/opkg-lede.git] / src / opkg-cl.c
index 47e2056e5a754ba8efb6fa325cb9417e220fd958..01c6e94627af927a59bd63542b9f65e670d64ed5 100644 (file)
    opkg command line frontend using libopkg
 */
 
-#include "config.h"
-
+#define _GNU_SOURCE
 #include <stdio.h>
 #include <getopt.h>
+#include <fnmatch.h>
 
 #include "opkg_conf.h"
 #include "opkg_cmd.h"
@@ -52,6 +52,8 @@ enum {
        ARGS_OPT_AUTOREMOVE,
        ARGS_OPT_CACHE,
        ARGS_OPT_FORCE_SIGNATURE,
+       ARGS_OPT_NO_CHECK_CERTIFICATE,
+       ARGS_OPT_VERIFY_PROGRAM,
        ARGS_OPT_SIZE,
 };
 
@@ -91,6 +93,8 @@ static struct option long_options[] = {
        {"force_checksum", 0, 0, ARGS_OPT_FORCE_CHECKSUM},
        {"force-signature", 0, 0, ARGS_OPT_FORCE_SIGNATURE},
        {"force_signature", 0, 0, ARGS_OPT_FORCE_SIGNATURE},
+       {"no-check-certificate", 0, 0, ARGS_OPT_NO_CHECK_CERTIFICATE},
+       {"no_check_certificate", 0, 0, ARGS_OPT_NO_CHECK_CERTIFICATE},
        {"noaction", 0, 0, ARGS_OPT_NOACTION},
        {"download-only", 0, 0, ARGS_OPT_DOWNLOAD_ONLY},
        {"nodeps", 0, 0, ARGS_OPT_NODEPS},
@@ -106,6 +110,8 @@ static struct option long_options[] = {
        {"lists-dir", 1, 0, 'l'},
        {"lists_dir", 1, 0, 'l'},
        {"verbosity", 2, 0, 'V'},
+       {"verify-program", 1, 0, ARGS_OPT_VERIFY_PROGRAM},
+       {"verify_program", 1, 0, ARGS_OPT_VERIFY_PROGRAM},
        {"version", 0, 0, 'v'},
        {0, 0, 0, 0}
 };
@@ -226,6 +232,12 @@ static int args_parse(int argc, char *argv[])
                case ARGS_OPT_FORCE_SIGNATURE:
                        conf->force_signature = 1;
                        break;
+               case ARGS_OPT_NO_CHECK_CERTIFICATE:
+                       conf->no_check_certificate = 1;
+                       break;
+               case ARGS_OPT_VERIFY_PROGRAM:
+                       conf->verify_program = xstrdup(optarg);
+                       break;
                case ':':
                        parse_err = -1;
                        break;
@@ -316,6 +328,8 @@ static void usage()
        printf("                                directory name in a pinch).\n");
        printf("\t-o <dir>              Use <dir> as the root directory for\n");
        printf("\t--offline-root <dir>  offline installation of packages.\n");
+       printf
+           ("\t--verify-program <path> Use the given program to verify usign signatures\n");
        printf
            ("\t--add-arch <arch>:<prio>        Register architecture with given priority\n");
        printf
@@ -335,6 +349,7 @@ static void usage()
        printf
            ("\t--force-remove  Remove package even if prerm script fails\n");
        printf("\t--force-checksum      Don't fail on checksum mismatches\n");
+       printf("\t--no-check-certificate Don't validate SSL certificates\n");
        printf("\t--noaction            No action -- test only\n");
        printf("\t--download-only       No action -- download only\n");
        printf("\t--nodeps              Do not follow dependencies\n");
@@ -391,7 +406,9 @@ int main(int argc, char *argv[])
            !strcmp(cmd_name, "print-architecture") ||
            !strcmp(cmd_name, "print_architecture") ||
            !strcmp(cmd_name, "print-installation-architecture") ||
-           !strcmp(cmd_name, "print_installation_architecture"))
+           !strcmp(cmd_name, "print_installation_architecture") ||
+           !strcmp(cmd_name, "compare_versions") ||
+           !strcmp(cmd_name, "compare-versions"))
                nocheckfordirorfile = 1;
 
        if (!strcmp(cmd_name, "flag") ||
@@ -400,13 +417,13 @@ int main(int argc, char *argv[])
            !strcmp(cmd_name, "remove") ||
            !strcmp(cmd_name, "files") ||
            !strcmp(cmd_name, "search") ||
-           !strcmp(cmd_name, "compare_versions") ||
-           !strcmp(cmd_name, "compare-versions") ||
+           !strcmp(cmd_name, "list") ||
            !strcmp(cmd_name, "list_installed") ||
            !strcmp(cmd_name, "list-installed") ||
            !strcmp(cmd_name, "list_changed_conffiles") ||
            !strcmp(cmd_name, "list-changed-conffiles") ||
-           !strcmp(cmd_name, "status"))
+           !strcmp(cmd_name, "status") ||
+           !strcmp(cmd_name, "update"))
                noreadfeedsfile = 1;
 
        cmd = opkg_cmd_find(cmd_name);
@@ -423,11 +440,11 @@ int main(int argc, char *argv[])
 
        if (!nocheckfordirorfile) {
                if (!noreadfeedsfile) {
-                       if (pkg_hash_load_feeds(SF_NEED_DETAIL))
+                       if (pkg_hash_load_feeds(SF_NEED_DETAIL, NULL, NULL))
                                goto err1;
                }
 
-               if (pkg_hash_load_status_files())
+               if (pkg_hash_load_status_files(NULL, NULL))
                        goto err1;
        }
 
@@ -440,9 +457,6 @@ int main(int argc, char *argv[])
 
        err = opkg_cmd_exec(cmd, argc - opts, (const char **)(argv + opts));
 
-#ifdef HAVE_CURL
-       opkg_curl_cleanup();
-#endif
 err1:
        opkg_conf_deinit();