From 9c843e4ecdfee916ec835b5d35c10b3818aba9e3 Mon Sep 17 00:00:00 2001
From: Timo Teräs <timo.teras@iki.fi>
Date: Mon, 26 Jul 2021 16:25:03 +0300
Subject: Refactor .apk extraction code

This moves and isolates the tar code to tar.c. And the actual
file extraction to disk is moved to extract.c.

A new API is introduced and used for v2 file extraction. This
essentially moves and isolates the apk_sign_ctx_* beast into
extract_v2.c and offers a saner interface to handling packages.

A place holder is added for v3 extraction.
---
 src/app_verify.c | 30 +++++++++---------------------
 1 file changed, 9 insertions(+), 21 deletions(-)

(limited to 'src/app_verify.c')

diff --git a/src/app_verify.c b/src/app_verify.c
index adfe0ec..fd1a148 100644
--- a/src/app_verify.c
+++ b/src/app_verify.c
@@ -12,38 +12,26 @@
 #include <unistd.h>
 
 #include "apk_applet.h"
-#include "apk_database.h"
 #include "apk_print.h"
+#include "apk_extract.h"
 
 static int verify_main(void *ctx, struct apk_ctx *ac, struct apk_string_array *args)
 {
 	struct apk_out *out = &ac->out;
-	struct apk_sign_ctx sctx;
-	struct apk_id_cache *idc = apk_ctx_get_id_cache(ac);
-	struct apk_trust *trust = apk_ctx_get_trust(ac);
+	struct apk_extract_ctx ectx;
 	char **parg;
-	int r, ok, rc = 0;
+	int r, rc = 0;
 
-	trust->allow_untrusted = 1;
+	apk_extract_init(&ectx, ac, 0);
 
 	foreach_array_item(parg, args) {
-		apk_sign_ctx_init(&sctx, APK_SIGN_VERIFY, NULL, trust);
-		r = apk_tar_parse(
-			apk_istream_gunzip_mpart(apk_istream_from_file(AT_FDCWD, *parg),
-						 apk_sign_ctx_mpart_cb, &sctx),
-			apk_sign_ctx_verify_tar, &sctx, idc);
-		ok = sctx.control_verified && sctx.data_verified;
+		r = apk_extract(&ectx, apk_istream_from_file(AT_FDCWD, *parg));
 		if (apk_out_verbosity(out) >= 1)
-			apk_msg(out, "%s: %d - %s", *parg, r,
-				r < 0 ? apk_error_str(r) :
-				ok ? "OK" :
-				!sctx.control_verified ? "UNTRUSTED" : "FAILED");
-		else if (!ok)
+			apk_msg(out, "%s: %s", *parg,
+				r < 0 ? apk_error_str(r) : "OK");
+		else if (r < 0)
 			apk_out(out, "%s", *parg);
-		if (!ok)
-			rc++;
-
-		apk_sign_ctx_free(&sctx);
+		if (r < 0) rc++;
 	}
 
 	return rc;
-- 
cgit v1.2.3-70-g09d2