tech-pkg archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: pkg_info -X: Add FILE_CKSUM (sha256)
> Date: Fri, 16 Jan 2026 12:21:05 +0100
> From: Thomas Klausner <wiz%netbsd.org@localhost>
>
> I think it would be good to hide this behind an additional flag for
> now, so it has to be turned on - and that can be done when the SHA256
> will actually be used by something else.
The attached patch implements it as a flag `-H sha256'.
Without that flag, there is no change to behaviour.
Better?
diff --git a/pkgtools/pkg_install/files/info/info.h b/pkgtools/pkg_install/files/info/info.h
index 8718da209d69..c175cbb7b4a2 100644
--- a/pkgtools/pkg_install/files/info/info.h
+++ b/pkgtools/pkg_install/files/info/info.h
@@ -107,6 +107,11 @@ enum which {
WHICH_LIST
};
+enum summary_hash {
+ SUMMARY_HASH_NONE = 0,
+ SUMMARY_HASH_SHA256,
+};
+
extern int Flags;
extern enum which Which;
extern Boolean File2Pkg;
@@ -114,6 +119,7 @@ extern Boolean Quiet;
extern const char *InfoPrefix;
extern const char *BuildInfoVariable;
extern lpkg_head_t pkgs;
+extern enum summary_hash summary_hash;
int CheckForPkg(const char *);
int CheckForBestPkg(const char *);
diff --git a/pkgtools/pkg_install/files/info/main.c b/pkgtools/pkg_install/files/info/main.c
index 6827443f07fd..b6eddd90c077 100644
--- a/pkgtools/pkg_install/files/info/main.c
+++ b/pkgtools/pkg_install/files/info/main.c
@@ -41,7 +41,7 @@ __RCSID("$NetBSD: main.c,v 1.32 2018/04/25 12:20:53 joerg Exp $");
#include "lib.h"
#include "info.h"
-static const char Options[] = ".aBbcDde:E:fFhIiK:kLl:mNnpQ:qrRsSuvVX";
+static const char Options[] = ".aBbcDde:E:fFH:hIiK:kLl:mNnpQ:qrRsSuvVX";
int Flags = 0;
enum which Which = WHICH_LIST;
@@ -50,13 +50,14 @@ Boolean Quiet = FALSE;
const char *InfoPrefix = "";
const char *BuildInfoVariable = "";
lpkg_head_t pkgs;
+enum summary_hash summary_hash;
static void
usage(void)
{
fprintf(stderr, "%s\n%s\n%s\n%s\n",
"usage: pkg_info [-BbcDdFfhIikLmNnpqRrSsVvX] [-E pkg-name] [-e pkg-name]",
- " [-K pkg_dbdir] [-l prefix] pkg-name ...",
+ " [-H hash] [-K pkg_dbdir] [-l prefix] pkg-name ...",
" pkg_info [-a | -u] [flags]",
" pkg_info [-Q variable] pkg-name ...");
exit(1);
@@ -117,6 +118,13 @@ main(int argc, char **argv)
File2Pkg = 1;
break;
+ case 'H':
+ if (strcmp(optarg, "sha256") == 0)
+ summary_hash = SUMMARY_HASH_SHA256;
+ else
+ errx(EXIT_FAILURE, "unknown hash");
+ break;
+
case 'I':
Flags |= SHOW_INDEX;
break;
diff --git a/pkgtools/pkg_install/files/info/pkg_info.1 b/pkgtools/pkg_install/files/info/pkg_info.1
index 093734751612..452bc1dbd522 100644
--- a/pkgtools/pkg_install/files/info/pkg_info.1
+++ b/pkgtools/pkg_install/files/info/pkg_info.1
@@ -28,6 +28,7 @@
.Op Fl BbcDdFfhIikLmNnpqRrSsVvX
.Op Fl E Ar pkg-name
.Op Fl e Ar pkg-name
+.Op Fl H Ar hash
.Op Fl K Ar pkg_dbdir
.Op Fl l Ar prefix
.Ar pkg-name ...
@@ -133,6 +134,19 @@ See the
section below for more information.
.It Fl f
Show the packing list instructions for each package.
+.It Fl H Ar hash
+When printing
+.Xr pkg_summary 5
+information with
+.Fl X ,
+include a
+.Li FILE_CKSUM
+line with the given
+.Ar hash
+of the package.
+.Pp
+Supported hashes:
+.Li sha256 .
.It Fl h
Print usage message and exit.
.It Fl I
diff --git a/pkgtools/pkg_install/files/info/show.c b/pkgtools/pkg_install/files/info/show.c
index daf3bdba6a08..085628d67e96 100644
--- a/pkgtools/pkg_install/files/info/show.c
+++ b/pkgtools/pkg_install/files/info/show.c
@@ -60,6 +60,11 @@ __RCSID("$NetBSD: show.c,v 1.33 2012/02/21 18:32:14 wiz Exp $");
#if HAVE_ERR_H
#include <err.h>
#endif
+#ifndef NETBSD
+#include <nbcompat/sha2.h>
+#else
+#include <sha2.h>
+#endif
#include "defs.h"
#include "lib.h"
@@ -377,16 +382,25 @@ show_summary(struct pkg_meta *meta, package_t *plist, const char *binpkgfile)
warnx("Build information missing");
if (binpkgfile != NULL && stat(binpkgfile, &st) == 0) {
- const char *base;
-
- base = strrchr(binpkgfile, '/');
- if (base == NULL)
- base = binpkgfile;
- else
- base++;
- printf("FILE_NAME=%s\n", base);
- printf("FILE_SIZE=%" MY_PRIu64 "\n", (uint64_t)st.st_size);
- /* XXX: DIGETS */
+ const char *base;
+
+ base = strrchr(binpkgfile, '/');
+ if (base == NULL)
+ base = binpkgfile;
+ else
+ base++;
+ printf("FILE_NAME=%s\n", base);
+ printf("FILE_SIZE=%" MY_PRIu64 "\n", (uint64_t)st.st_size);
+ switch (summary_hash) {
+ case SUMMARY_HASH_NONE:
+ break;
+ case SUMMARY_HASH_SHA256: {
+ char sha256[SHA256_DIGEST_STRING_LENGTH];
+ printf("FILE_CKSUM=sha256 %s\n",
+ SHA256_File(binpkgfile, sha256));
+ break;
+ }
+ }
}
print_string_as_var("DESCRIPTION", meta->meta_desc);
Home |
Main Index |
Thread Index |
Old Index