Radish alpha
H
HardenedBSD Package Manager
Radicle
Git (anonymous pull)
Log in to clone via SSH
Explicitly pass when passmode should be used with libarchive
Baptiste Daroussin committed 11 years ago
commit bf4a9a6ec13824036c035ceba01076e5e30841b4
parent cebcccdd58f20113fbb8e0c4b7e83e61810959e6
5 files changed +16 -10
modified libpkg/packing.c
@@ -1,5 +1,5 @@
/*-
-
 * Copyright (c) 2011-2012 Baptiste Daroussin <bapt@FreeBSD.org>
+
 * Copyright (c) 2011-2014 Baptiste Daroussin <bapt@FreeBSD.org>
 * Copyright (c) 2011 Will Andrews <will@FreeBSD.org>
 * All rights reserved.
 * 
@@ -53,13 +53,18 @@ struct packing {
};

int
-
packing_init(struct packing **pack, const char *path, pkg_formats format)
+
packing_init(struct packing **pack, const char *path, pkg_formats format, bool passmode)
{
	char archive_path[MAXPATHLEN];
	const char *ext;

	assert(pack != NULL);

+
	if (passmode && !is_dir(path)) {
+
		pkg_emit_error("When using passmode, a directory should be provided");
+
		return (EPKG_FATAL);
+
	}
+

	if ((*pack = calloc(1, sizeof(struct packing))) == NULL) {
		pkg_emit_errno("calloc", "packing");
		return (EPKG_FATAL);
@@ -69,7 +74,7 @@ packing_init(struct packing **pack, const char *path, pkg_formats format)
	archive_read_disk_set_standard_lookup((*pack)->aread);
	archive_read_disk_set_symlink_physical((*pack)->aread);

-
	if (!is_dir(path)) {
+
	if (!passmode) {
		(*pack)->pass = false;
		(*pack)->awrite = archive_write_new();
		archive_write_set_format_pax_restricted((*pack)->awrite);
modified libpkg/pkg.c
@@ -1,5 +1,5 @@
/*-
-
 * Copyright (c) 2011-2013 Baptiste Daroussin <bapt@FreeBSD.org>
+
 * Copyright (c) 2011-2014 Baptiste Daroussin <bapt@FreeBSD.org>
 * Copyright (c) 2011-2012 Julien Laffaye <jlaffaye@FreeBSD.org>
 * Copyright (c) 2012 Bryan Drewery <bryan@shatow.net>
 * Copyright (c) 2013 Matthew Seaman <matthew@FreeBSD.org>
@@ -1534,7 +1534,7 @@ pkg_copy_tree(struct pkg *pkg, const char *src, const char *dest)
	/* Execute pre-install scripts */
	pkg_script_run(pkg, PKG_SCRIPT_PRE_INSTALL);

-
	if (packing_init(&pack, dest, 0) != EPKG_OK) {
+
	if (packing_init(&pack, dest, 0, true) != EPKG_OK) {
		/* TODO */
		return EPKG_FATAL;
	}
modified libpkg/pkg_create.c
@@ -1,5 +1,5 @@
/*-
-
 * Copyright (c) 2011-2013 Baptiste Daroussin <bapt@FreeBSD.org>
+
 * Copyright (c) 2011-2014 Baptiste Daroussin <bapt@FreeBSD.org>
 * Copyright (c) 2011-2012 Julien Laffaye <jlaffaye@FreeBSD.org>
 * Copyright (c) 2014 Matthew Seaman <matthew@FreeBSD.org>
 * Copyright (c) 2014 Vsevolod Stakhov <vsevolod@FreeBSD.org>
@@ -200,7 +200,7 @@ pkg_create_archive(const char *outdir, struct pkg *pkg, pkg_formats format,
		return (NULL);
	}

-
	if (packing_init(&pkg_archive, pkg_path, format) != EPKG_OK)
+
	if (packing_init(&pkg_archive, pkg_path, format, false) != EPKG_OK)
		pkg_archive = NULL;

	free(pkg_path);
modified libpkg/pkg_repo_create.c
@@ -876,7 +876,7 @@ pkg_repo_pack_db(const char *name, const char *archive, char *path,
	sig = NULL;
	pub = NULL;

-
	if (packing_init(&pack, archive, meta->packing_format) != EPKG_OK)
+
	if (packing_init(&pack, archive, meta->packing_format, false) != EPKG_OK)
		return (EPKG_FATAL);

	if (rsa != NULL) {
modified libpkg/private/pkg.h
@@ -1,5 +1,5 @@
/*-
-
 * Copyright (c) 2011-2012 Baptiste Daroussin <bapt@FreeBSD.org>
+
 * Copyright (c) 2011-2014 Baptiste Daroussin <bapt@FreeBSD.org>
 * Copyright (c) 2011-2012 Julien Laffaye <jlaffaye@FreeBSD.org>
 * Copyright (c) 2013 Matthew Seaman <matthew@FreeBSD.org>
 * Copyright (c) 2013 Vsevolod Stakhov <vsevolod@FreeBSD.org>
@@ -534,7 +534,8 @@ void pkg_provide_free(struct pkg_provide *);

struct packing;

-
int packing_init(struct packing **pack, const char *path, pkg_formats format);
+
int packing_init(struct packing **pack, const char *path, pkg_formats format,
+
    bool passmode);
int packing_append_file_attr(struct packing *pack, const char *filepath,
			     const char *newpath, const char *uname,
			     const char *gname, mode_t perm);