[packages/apk-tools] new, version 2.10.1
glen
glen at pld-linux.org
Sun Nov 4 04:37:31 CET 2018
commit 9f4525391a27509d7918b2bbf49ff5553c63d14d
Author: Elan Ruusamäe <glen at pld-linux.org>
Date: Sun Nov 4 05:31:29 2018 +0200
new, version 2.10.1
0001-add-support-for-openssl-1.1.patch | 380 +++++++++++++++++++++
0001-fix-strncpy-bounds-errors.patch | 67 ++++
...de-sys-sysmacros.h-for-makedev-definition.patch | 37 ++
apk-tools.spec | 45 +++
4 files changed, 529 insertions(+)
---
diff --git a/apk-tools.spec b/apk-tools.spec
new file mode 100644
index 0000000..543d4ae
--- /dev/null
+++ b/apk-tools.spec
@@ -0,0 +1,45 @@
+Summary: Alpine Package Keeper - package manager for alpine
+Name: apk-tools
+Version: 2.10.1
+Release: 1
+License: GPL v2
+Group: Base
+Source0: https://dev.alpinelinux.org/archive/apk-tools/%{name}-%{version}.tar.xz
+# Source0-md5: d14969082e880bd056644f73ac3b3eb2
+Patch0: 0001-fix-strncpy-bounds-errors.patch
+Patch1: 0002-include-sys-sysmacros.h-for-makedev-definition.patch
+Patch2: 0001-add-support-for-openssl-1.1.patch
+URL: https://git.alpinelinux.org/cgit/apk-tools/
+BuildRequires: openssl-devel
+BuildRequires: tar >= 1:1.22
+BuildRequires: xz
+BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
+
+%define _sbindir /sbin
+
+%description
+Package manager for Alpine Linux.
+
+%prep
+%setup -q
+%patch0 -p1
+%patch1 -p1
+%patch2 -p1
+
+%build
+%{__make}
+
+%install
+rm -rf $RPM_BUILD_ROOT
+%{__make} install \
+ DESTDIR=$RPM_BUILD_ROOT
+
+# empty file
+%{__rm} $RPM_BUILD_ROOT%{_docdir}/apk/README
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%files
+%defattr(644,root,root,755)
+%attr(755,root,root) %{_sbindir}/apk
diff --git a/0001-add-support-for-openssl-1.1.patch b/0001-add-support-for-openssl-1.1.patch
new file mode 100644
index 0000000..18c8c94
--- /dev/null
+++ b/0001-add-support-for-openssl-1.1.patch
@@ -0,0 +1,380 @@
+From beab8545ebb2898a2beb157a4d9424ebddf3e26f Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Timo=20Ter=C3=A4s?= <timo.teras at iki.fi>
+Date: Fri, 26 Oct 2018 08:21:52 +0300
+Subject: [PATCH] add support for openssl 1.1
+
+---
+ src/apk_blob.h | 2 +-
+ src/apk_io.h | 1 -
+ src/apk_openssl.h | 21 +++++++++++++++++++++
+ src/apk_package.h | 2 +-
+ src/archive.c | 17 ++++++++++-------
+ src/database.c | 19 ++++++++++++-------
+ src/io.c | 45 ++++++++++++++++++++++++++-------------------
+ src/package.c | 37 +++++++++++++++++++------------------
+ 8 files changed, 90 insertions(+), 54 deletions(-)
+ create mode 100644 src/apk_openssl.h
+
+diff --git a/src/apk_blob.h b/src/apk_blob.h
+index 2d2e30e..4fdd3be 100644
+--- a/src/apk_blob.h
++++ b/src/apk_blob.h
+@@ -14,9 +14,9 @@
+
+ #include <ctype.h>
+ #include <string.h>
+-#include <openssl/evp.h>
+
+ #include "apk_defines.h"
++#include "apk_openssl.h"
+
+ typedef const unsigned char *apk_spn_match;
+ typedef unsigned char apk_spn_match_def[256 / 8];
+diff --git a/src/apk_io.h b/src/apk_io.h
+index 94aa989..26c3f28 100644
+--- a/src/apk_io.h
++++ b/src/apk_io.h
+@@ -12,7 +12,6 @@
+ #define APK_IO
+
+ #include <sys/types.h>
+-#include <openssl/evp.h>
+ #include <fcntl.h>
+ #include <time.h>
+
+diff --git a/src/apk_openssl.h b/src/apk_openssl.h
+new file mode 100644
+index 0000000..c45beb9
+--- /dev/null
++++ b/src/apk_openssl.h
+@@ -0,0 +1,21 @@
++#ifndef APK_SSL_COMPAT_H
++#define APK_SSL_COMPAT_H
++
++#include <openssl/opensslv.h>
++#include <openssl/evp.h>
++
++#if OPENSSL_VERSION_NUMBER < 0x1010000fL || (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x2070000fL)
++
++static inline EVP_MD_CTX *EVP_MD_CTX_new(void)
++{
++ return EVP_MD_CTX_create();
++}
++
++static inline void EVP_MD_CTX_free(EVP_MD_CTX *mdctx)
++{
++ return EVP_MD_CTX_destroy(mdctx);
++}
++
++#endif
++
++#endif
+diff --git a/src/apk_package.h b/src/apk_package.h
+index 87635a9..6c4ff29 100644
+--- a/src/apk_package.h
++++ b/src/apk_package.h
+@@ -58,7 +58,7 @@ struct apk_sign_ctx {
+ int data_verified : 1;
+ char data_checksum[EVP_MAX_MD_SIZE];
+ struct apk_checksum identity;
+- EVP_MD_CTX mdctx;
++ EVP_MD_CTX *mdctx;
+
+ struct {
+ apk_blob_t data;
+diff --git a/src/archive.c b/src/archive.c
+index 9a184fd..f3a66c2 100644
+--- a/src/archive.c
++++ b/src/archive.c
+@@ -28,6 +28,7 @@
+ #include "apk_defines.h"
+ #include "apk_print.h"
+ #include "apk_archive.h"
++#include "apk_openssl.h"
+
+ struct tar_header {
+ /* ustar header, Posix 1003.1 */
+@@ -82,7 +83,7 @@ struct apk_tar_entry_istream {
+ struct apk_istream is;
+ struct apk_istream *tar_is;
+ size_t bytes_left;
+- EVP_MD_CTX mdctx;
++ EVP_MD_CTX *mdctx;
+ struct apk_checksum *csum;
+ time_t mtime;
+ };
+@@ -121,10 +122,10 @@ static ssize_t tar_entry_read(void *stream, void *ptr, size_t size)
+ if (teis->csum == NULL)
+ return r;
+
+- EVP_DigestUpdate(&teis->mdctx, ptr, r);
++ EVP_DigestUpdate(teis->mdctx, ptr, r);
+ if (teis->bytes_left == 0) {
+- teis->csum->type = EVP_MD_CTX_size(&teis->mdctx);
+- EVP_DigestFinal_ex(&teis->mdctx, teis->csum->data, NULL);
++ teis->csum->type = EVP_MD_CTX_size(teis->mdctx);
++ EVP_DigestFinal_ex(teis->mdctx, teis->csum->data, NULL);
+ }
+ return r;
+ }
+@@ -210,7 +211,9 @@ int apk_tar_parse(struct apk_istream *is, apk_archive_entry_parser parser,
+ char filename[sizeof buf.name + sizeof buf.prefix + 2];
+
+ odi = (struct apk_tar_digest_info *) &buf.linkname[3];
+- EVP_MD_CTX_init(&teis.mdctx);
++ teis.mdctx = EVP_MD_CTX_new();
++ if (!teis.mdctx) return -ENOMEM;
++
+ memset(&entry, 0, sizeof(entry));
+ entry.name = buf.name;
+ while ((r = apk_istream_read(is, &buf, 512)) == 512) {
+@@ -327,7 +330,7 @@ int apk_tar_parse(struct apk_istream *is, apk_archive_entry_parser parser,
+ if (entry.mode & S_IFMT) {
+ /* callback parser function */
+ if (teis.csum != NULL)
+- EVP_DigestInit_ex(&teis.mdctx,
++ EVP_DigestInit_ex(teis.mdctx,
+ apk_checksum_default(), NULL);
+
+ r = parser(ctx, &entry, &teis.is);
+@@ -360,7 +363,7 @@ err:
+ /* Check that there was no partial (or non-zero) record */
+ if (r >= 0) r = -EBADMSG;
+ ok:
+- EVP_MD_CTX_cleanup(&teis.mdctx);
++ EVP_MD_CTX_free(teis.mdctx);
+ free(pax.ptr);
+ free(longname.ptr);
+ apk_fileinfo_free(&entry);
+diff --git a/src/database.c b/src/database.c
+index 8cf63b2..91fcedd 100644
+--- a/src/database.c
++++ b/src/database.c
+@@ -35,6 +35,7 @@
+ #include "apk_applet.h"
+ #include "apk_archive.h"
+ #include "apk_print.h"
++#include "apk_openssl.h"
+
+ static const apk_spn_match_def apk_spn_repo_separators = {
+ [4] = (1<<0) /* */,
+@@ -2363,18 +2364,22 @@ static struct apk_db_dir_instance *apk_db_install_directory_entry(struct install
+
+ static const char *format_tmpname(struct apk_package *pkg, struct apk_db_file *f, char tmpname[static TMPNAME_MAX])
+ {
+- EVP_MD_CTX mdctx;
++ EVP_MD_CTX *mdctx;
+ unsigned char md[EVP_MAX_MD_SIZE];
+ apk_blob_t b = APK_BLOB_PTR_LEN(tmpname, TMPNAME_MAX);
+
+ if (!f) return NULL;
+
+- EVP_DigestInit(&mdctx, EVP_sha256());
+- EVP_DigestUpdate(&mdctx, pkg->name->name, strlen(pkg->name->name) + 1);
+- EVP_DigestUpdate(&mdctx, f->diri->dir->name, f->diri->dir->namelen);
+- EVP_DigestUpdate(&mdctx, "/", 1);
+- EVP_DigestUpdate(&mdctx, f->name, f->namelen);
+- EVP_DigestFinal(&mdctx, md, NULL);
++ mdctx = EVP_MD_CTX_new();
++ if (!mdctx) return NULL;
++
++ EVP_DigestInit_ex(mdctx, EVP_sha256(), NULL);
++ EVP_DigestUpdate(mdctx, pkg->name->name, strlen(pkg->name->name) + 1);
++ EVP_DigestUpdate(mdctx, f->diri->dir->name, f->diri->dir->namelen);
++ EVP_DigestUpdate(mdctx, "/", 1);
++ EVP_DigestUpdate(mdctx, f->name, f->namelen);
++ EVP_DigestFinal_ex(mdctx, md, NULL);
++ EVP_MD_CTX_free(mdctx);
+
+ apk_blob_push_blob(&b, APK_BLOB_PTR_LEN(f->diri->dir->name, f->diri->dir->namelen));
+ apk_blob_push_blob(&b, APK_BLOB_STR("/.apk."));
+diff --git a/src/io.c b/src/io.c
+index ff254fd..0295807 100644
+--- a/src/io.c
++++ b/src/io.c
+@@ -28,6 +28,7 @@
+ #include "apk_defines.h"
+ #include "apk_io.h"
+ #include "apk_hash.h"
++#include "apk_openssl.h"
+
+ #if defined(__GLIBC__) || defined(__UCLIBC__)
+ #define HAVE_FGETPWENT_R
+@@ -623,22 +624,25 @@ static void hash_len_data(EVP_MD_CTX *ctx, uint32_t len, const void *ptr)
+ void apk_fileinfo_hash_xattr_array(struct apk_xattr_array *xattrs, const EVP_MD *md, struct apk_checksum *csum)
+ {
+ struct apk_xattr *xattr;
+- EVP_MD_CTX mdctx;
++ EVP_MD_CTX *mdctx;
+
+- if (!xattrs || xattrs->num == 0) {
+- csum->type = APK_CHECKSUM_NONE;
+- return;
+- }
++ if (!xattrs || xattrs->num == 0) goto err;
++ mdctx = EVP_MD_CTX_new();
++ if (!mdctx) goto err;
+
+ qsort(xattrs->item, xattrs->num, sizeof(xattrs->item[0]), cmp_xattr);
+
+- EVP_DigestInit(&mdctx, md);
++ EVP_DigestInit_ex(mdctx, EVP_sha256(), NULL);
+ foreach_array_item(xattr, xattrs) {
+- hash_len_data(&mdctx, strlen(xattr->name), xattr->name);
+- hash_len_data(&mdctx, xattr->value.len, xattr->value.ptr);
++ hash_len_data(mdctx, strlen(xattr->name), xattr->name);
++ hash_len_data(mdctx, xattr->value.len, xattr->value.ptr);
+ }
+- csum->type = EVP_MD_CTX_size(&mdctx);
+- EVP_DigestFinal(&mdctx, csum->data, NULL);
++ csum->type = EVP_MD_CTX_size(mdctx);
++ EVP_DigestFinal_ex(mdctx, csum->data, NULL);
++ EVP_MD_CTX_free(mdctx);
++ return;
++err:
++ csum->type = APK_CHECKSUM_NONE;
+ }
+
+ void apk_fileinfo_hash_xattr(struct apk_file_info *fi)
+@@ -723,17 +727,20 @@ int apk_fileinfo_get(int atfd, const char *filename, unsigned int flags,
+ } else {
+ bs = apk_bstream_from_file(atfd, filename);
+ if (!IS_ERR_OR_NULL(bs)) {
+- EVP_MD_CTX mdctx;
++ EVP_MD_CTX *mdctx;
+ apk_blob_t blob;
+
+- EVP_DigestInit(&mdctx, apk_checksum_evp(checksum));
+- if (bs->flags & APK_BSTREAM_SINGLE_READ)
+- EVP_MD_CTX_set_flags(&mdctx, EVP_MD_CTX_FLAG_ONESHOT);
+- while (!APK_BLOB_IS_NULL(blob = apk_bstream_read(bs, APK_BLOB_NULL)))
+- EVP_DigestUpdate(&mdctx, (void*) blob.ptr, blob.len);
+- fi->csum.type = EVP_MD_CTX_size(&mdctx);
+- EVP_DigestFinal(&mdctx, fi->csum.data, NULL);
+-
++ mdctx = EVP_MD_CTX_new();
++ if (mdctx) {
++ EVP_DigestInit_ex(mdctx, apk_checksum_evp(checksum), NULL);
++ if (bs->flags & APK_BSTREAM_SINGLE_READ)
++ EVP_MD_CTX_set_flags(mdctx, EVP_MD_CTX_FLAG_ONESHOT);
++ while (!APK_BLOB_IS_NULL(blob = apk_bstream_read(bs, APK_BLOB_NULL)))
++ EVP_DigestUpdate(mdctx, (void*) blob.ptr, blob.len);
++ fi->csum.type = EVP_MD_CTX_size(mdctx);
++ EVP_DigestFinal_ex(mdctx, fi->csum.data, NULL);
++ EVP_MD_CTX_free(mdctx);
++ }
+ apk_bstream_close(bs, NULL);
+ }
+ }
+diff --git a/src/package.c b/src/package.c
+index e19250a..baa8a90 100644
+--- a/src/package.c
++++ b/src/package.c
+@@ -21,6 +21,7 @@
+ #include <sys/wait.h>
+ #include <sys/stat.h>
+
++#include "apk_openssl.h"
+ #include <openssl/pem.h>
+
+ #include "apk_defines.h"
+@@ -490,9 +491,9 @@ void apk_sign_ctx_init(struct apk_sign_ctx *ctx, int action,
+ ctx->data_started = 1;
+ break;
+ }
+- EVP_MD_CTX_init(&ctx->mdctx);
+- EVP_DigestInit_ex(&ctx->mdctx, ctx->md, NULL);
+- EVP_MD_CTX_set_flags(&ctx->mdctx, EVP_MD_CTX_FLAG_ONESHOT);
++ ctx->mdctx = EVP_MD_CTX_new();
++ EVP_DigestInit_ex(ctx->mdctx, ctx->md, NULL);
++ EVP_MD_CTX_set_flags(ctx->mdctx, EVP_MD_CTX_FLAG_ONESHOT);
+ }
+
+ void apk_sign_ctx_free(struct apk_sign_ctx *ctx)
+@@ -501,7 +502,7 @@ void apk_sign_ctx_free(struct apk_sign_ctx *ctx)
+ free(ctx->signature.data.ptr);
+ if (ctx->signature.pkey != NULL)
+ EVP_PKEY_free(ctx->signature.pkey);
+- EVP_MD_CTX_cleanup(&ctx->mdctx);
++ EVP_MD_CTX_free(ctx->mdctx);
+ }
+
+ static int check_signing_key_trust(struct apk_sign_ctx *sctx)
+@@ -674,16 +675,16 @@ int apk_sign_ctx_mpart_cb(void *ctx, int part, apk_blob_t data)
+
+ /* Drool in the remaining of the digest block now, we will finish
+ * it on all cases */
+- EVP_DigestUpdate(&sctx->mdctx, data.ptr, data.len);
++ EVP_DigestUpdate(sctx->mdctx, data.ptr, data.len);
+
+ /* End of control-block and checking control hash/signature or
+ * end of data-block and checking its hash/signature */
+ if (sctx->has_data_checksum && !end_of_control) {
+ /* End of control-block and check it's hash */
+- EVP_DigestFinal_ex(&sctx->mdctx, calculated, NULL);
+- if (EVP_MD_CTX_size(&sctx->mdctx) == 0 ||
++ EVP_DigestFinal_ex(sctx->mdctx, calculated, NULL);
++ if (EVP_MD_CTX_size(sctx->mdctx) == 0 ||
+ memcmp(calculated, sctx->data_checksum,
+- EVP_MD_CTX_size(&sctx->mdctx)) != 0)
++ EVP_MD_CTX_size(sctx->mdctx)) != 0)
+ return -EKEYREJECTED;
+ sctx->data_verified = 1;
+ if (!(apk_flags & APK_ALLOW_UNTRUSTED) &&
+@@ -700,7 +701,7 @@ int apk_sign_ctx_mpart_cb(void *ctx, int part, apk_blob_t data)
+ case APK_SIGN_VERIFY:
+ case APK_SIGN_VERIFY_AND_GENERATE:
+ if (sctx->signature.pkey != NULL) {
+- r = EVP_VerifyFinal(&sctx->mdctx,
++ r = EVP_VerifyFinal(sctx->mdctx,
+ (unsigned char *) sctx->signature.data.ptr,
+ sctx->signature.data.len,
+ sctx->signature.pkey);
+@@ -717,13 +718,13 @@ int apk_sign_ctx_mpart_cb(void *ctx, int part, apk_blob_t data)
+ sctx->data_verified = 1;
+ }
+ if (sctx->action == APK_SIGN_VERIFY_AND_GENERATE) {
+- sctx->identity.type = EVP_MD_CTX_size(&sctx->mdctx);
+- EVP_DigestFinal_ex(&sctx->mdctx, sctx->identity.data, NULL);
++ sctx->identity.type = EVP_MD_CTX_size(sctx->mdctx);
++ EVP_DigestFinal_ex(sctx->mdctx, sctx->identity.data, NULL);
+ }
+ break;
+ case APK_SIGN_VERIFY_IDENTITY:
+ /* Reset digest for hashing data */
+- EVP_DigestFinal_ex(&sctx->mdctx, calculated, NULL);
++ EVP_DigestFinal_ex(sctx->mdctx, calculated, NULL);
+ if (memcmp(calculated, sctx->identity.data,
+ sctx->identity.type) != 0)
+ return -EKEYREJECTED;
+@@ -733,21 +734,21 @@ int apk_sign_ctx_mpart_cb(void *ctx, int part, apk_blob_t data)
+ break;
+ case APK_SIGN_GENERATE:
+ /* Package identity is the checksum */
+- sctx->identity.type = EVP_MD_CTX_size(&sctx->mdctx);
+- EVP_DigestFinal_ex(&sctx->mdctx, sctx->identity.data, NULL);
++ sctx->identity.type = EVP_MD_CTX_size(sctx->mdctx);
++ EVP_DigestFinal_ex(sctx->mdctx, sctx->identity.data, NULL);
+ if (sctx->action == APK_SIGN_GENERATE &&
+ sctx->has_data_checksum)
+ return -ECANCELED;
+ break;
+ }
+ reset_digest:
+- EVP_DigestInit_ex(&sctx->mdctx, sctx->md, NULL);
+- EVP_MD_CTX_set_flags(&sctx->mdctx, EVP_MD_CTX_FLAG_ONESHOT);
++ EVP_DigestInit_ex(sctx->mdctx, sctx->md, NULL);
++ EVP_MD_CTX_set_flags(sctx->mdctx, EVP_MD_CTX_FLAG_ONESHOT);
+ return 0;
+
+ update_digest:
+- EVP_MD_CTX_clear_flags(&sctx->mdctx, EVP_MD_CTX_FLAG_ONESHOT);
+- EVP_DigestUpdate(&sctx->mdctx, data.ptr, data.len);
++ EVP_MD_CTX_clear_flags(sctx->mdctx, EVP_MD_CTX_FLAG_ONESHOT);
++ EVP_DigestUpdate(sctx->mdctx, data.ptr, data.len);
+ return 0;
+ }
+
+--
+2.19.0
+
diff --git a/0001-fix-strncpy-bounds-errors.patch b/0001-fix-strncpy-bounds-errors.patch
new file mode 100644
index 0000000..9bb47ec
--- /dev/null
+++ b/0001-fix-strncpy-bounds-errors.patch
@@ -0,0 +1,67 @@
+From d409acef489f9c96cd0566b2427760fda2a57221 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Elan=20Ruusam=C3=A4e?= <glen at delfi.ee>
+Date: Sat, 3 Nov 2018 20:53:39 +0200
+Subject: [PATCH 1/2] fix strncpy bounds errors
+
+error: 'strncpy' specified bound 4096 equals destination size [-Werror=stringop-truncation]
+---
+ libfetch/http.c | 3 ++-
+ src/archive.c | 12 ++++++++----
+ src/database.c | 3 ++-
+ 3 files changed, 12 insertions(+), 6 deletions(-)
+
+diff --git a/libfetch/http.c b/libfetch/http.c
+index 638c9a8..de43a36 100644
+--- a/libfetch/http.c
++++ b/libfetch/http.c
+@@ -499,7 +499,8 @@ http_parse_mtime(const char *p, time_t *mtime)
+ char locale[64], *r;
+ struct tm tm;
+
+- strncpy(locale, setlocale(LC_TIME, NULL), sizeof(locale));
++ strncpy(locale, setlocale(LC_TIME, NULL), sizeof(locale) - 1);
++ locale[sizeof(locale) - 1] = '\0';
+ setlocale(LC_TIME, "C");
+ r = strptime(p, "%a, %d %b %Y %H:%M:%S GMT", &tm);
+ /* XXX should add support for date-2 and date-3 */
+diff --git a/src/archive.c b/src/archive.c
+index f3a66c2..059f3ff 100644
+--- a/src/archive.c
++++ b/src/archive.c
+@@ -385,11 +385,15 @@ int apk_tar_write_entry(struct apk_ostream *os, const struct apk_file_info *ae,
+ else
+ return -1;
+
+- if (ae->name != NULL)
+- strncpy(buf.name, ae->name, sizeof(buf.name));
++ if (ae->name != NULL) {
++ strncpy(buf.name, ae->name, sizeof(buf.name) - 1);
++ buf.name[sizeof(buf.name) - 1] = '\0';
++ }
+
+- strncpy(buf.uname, ae->uname ?: "root", sizeof(buf.uname));
+- strncpy(buf.gname, ae->gname ?: "root", sizeof(buf.gname));
++ strncpy(buf.uname, ae->uname ?: "root", sizeof(buf.uname) - 1);
++ buf.uname[sizeof(buf.uname) - 1] = '\0';
++ strncpy(buf.gname, ae->gname ?: "root", sizeof(buf.gname) - 1);
++ buf.gname[sizeof(buf.gname) - 1] = '\0';
+
+ PUT_OCTAL(buf.size, ae->size);
+ PUT_OCTAL(buf.uid, ae->uid);
+diff --git a/src/database.c b/src/database.c
+index 91fcedd..92c4793 100644
+--- a/src/database.c
++++ b/src/database.c
+@@ -2778,7 +2778,8 @@ static int apk_db_unpack_pkg(struct apk_database *db,
+ if (!(pkg->repos & db->local_repos))
+ need_copy = TRUE;
+ } else {
+- strncpy(file, pkg->filename, sizeof(file));
++ strncpy(file, pkg->filename, sizeof(file) - 1);
++ file[sizeof(file) - 1] = '\0';
+ need_copy = TRUE;
+ }
+ if (!apk_db_cache_active(db))
+--
+2.19.1
+
diff --git a/0002-include-sys-sysmacros.h-for-makedev-definition.patch b/0002-include-sys-sysmacros.h-for-makedev-definition.patch
new file mode 100644
index 0000000..37d1288
--- /dev/null
+++ b/0002-include-sys-sysmacros.h-for-makedev-definition.patch
@@ -0,0 +1,37 @@
+From 79b56618237d54ff302d9eef1c0c44ee980fe1a2 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Elan=20Ruusam=C3=A4e?= <glen at delfi.ee>
+Date: Sat, 3 Nov 2018 20:54:12 +0200
+Subject: [PATCH 2/2] include sys/sysmacros.h for makedev definition
+
+---
+ src/archive.c | 1 +
+ src/database.c | 1 +
+ 2 files changed, 2 insertions(+)
+
+diff --git a/src/archive.c b/src/archive.c
+index 059f3ff..9ad5835 100644
+--- a/src/archive.c
++++ b/src/archive.c
+@@ -21,6 +21,7 @@
+ #include <sys/wait.h>
+ #include <sys/stat.h>
+ #include <sys/xattr.h>
++#include <sys/sysmacros.h>
+ #include <limits.h>
+ #include <stdint.h>
+ #include <stdlib.h>
+diff --git a/src/database.c b/src/database.c
+index 92c4793..0f3c87e 100644
+--- a/src/database.c
++++ b/src/database.c
+@@ -27,6 +27,7 @@
+ #include <sys/stat.h>
+ #include <sys/mount.h>
+ #include <sys/statvfs.h>
++#include <sys/sysmacros.h>
+ #include <linux/magic.h>
+
+ #include "apk_defines.h"
+--
+2.19.1
+
================================================================
---- gitweb:
http://git.pld-linux.org/gitweb.cgi/packages/apk-tools.git/commitdiff/9f4525391a27509d7918b2bbf49ff5553c63d14d
More information about the pld-cvs-commit
mailing list