diff options
author | Timo Teras <timo.teras@iki.fi> | 2009-07-17 13:07:52 +0300 |
---|---|---|
committer | Timo Teras <timo.teras@iki.fi> | 2009-07-17 13:07:52 +0300 |
commit | 3f4f9e9957a27be4efb29498f8fecd63eafcd16c (patch) | |
tree | f9306fef078e62423f38ab58300b98bba4c4ab08 /src/verify.c | |
parent | 50fed1063e080530c7654ebd168e833af2d98c98 (diff) | |
download | apk-tools-3f4f9e9957a27be4efb29498f8fecd63eafcd16c.tar.bz2 apk-tools-3f4f9e9957a27be4efb29498f8fecd63eafcd16c.tar.xz |
verify: new applet (ref #46)
an utility to check package signature and integrity.
Diffstat (limited to 'src/verify.c')
-rw-r--r-- | src/verify.c | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/verify.c b/src/verify.c new file mode 100644 index 0000000..2fed4bd --- /dev/null +++ b/src/verify.c @@ -0,0 +1,49 @@ +/* verify.c - Alpine Package Keeper (APK) + * + * Copyright (C) 2009 Timo Teräs <timo.teras@iki.fi> + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published + * by the Free Software Foundation. See http://www.gnu.org/ for details. + */ + +#include <stdio.h> +#include <unistd.h> + +#include "apk_applet.h" +#include "apk_database.h" + +static int verify_main(void *ctx, int argc, char **argv) +{ + struct apk_database db; + struct apk_sign_ctx sctx; + int i, ok, rc = 0; + + apk_db_open(&db, NULL, APK_OPENF_NO_STATE); + for (i = 0; i < argc; i++) { + apk_sign_ctx_init(&sctx, APK_SIGN_VERIFY); + apk_pkg_read(&db, argv[i], &sctx); + ok = sctx.control_verified && sctx.data_verified; + if (apk_verbosity >= 1) + apk_message("%s: %s", argv[i], + ok ? "OK" : + sctx.data_verified ? "UNTRUSTED" : "FAILED"); + if (!ok) + rc++; + apk_sign_ctx_free(&sctx); + } + apk_db_close(&db); + + return rc; +} + +static struct apk_applet apk_verify = { + .name = "verify", + .help = "Verify package integrity and signature", + .arguments = "FILE...", + .main = verify_main, +}; + +APK_DEFINE_APPLET(apk_verify); + |