[Midnightbsd-cvs] src [7654] trunk/lib/libmport: merge changes from 0.8
laffer1 at midnightbsd.org
laffer1 at midnightbsd.org
Fri Aug 5 18:55:33 EDT 2016
Revision: 7654
http://svnweb.midnightbsd.org/src/?rev=7654
Author: laffer1
Date: 2016-08-05 18:55:32 -0400 (Fri, 05 Aug 2016)
Log Message:
-----------
merge changes from 0.8
Modified Paths:
--------------
trunk/lib/libmport/bundle_read.c
trunk/lib/libmport/bundle_read_install_pkg.c
trunk/lib/libmport/db.c
trunk/lib/libmport/install_primative.c
trunk/lib/libmport/instance.c
trunk/lib/libmport/mport_private.h
Modified: trunk/lib/libmport/bundle_read.c
===================================================================
--- trunk/lib/libmport/bundle_read.c 2016-08-05 22:53:53 UTC (rev 7653)
+++ trunk/lib/libmport/bundle_read.c 2016-08-05 22:55:32 UTC (rev 7654)
@@ -52,12 +52,15 @@
*/
int mport_bundle_read_init(mportBundleRead *bundle, const char *filename)
{
- if ((bundle->filename = strdup(filename)) == NULL)
- RETURN_ERROR(MPORT_ERR_FATAL, "Couldn't dup filename");
+ if (filename == NULL)
+ RETURN_ERROR(MPORT_ERR_FATAL, "Filename is null");
+
+ if ((bundle->filename = strdup(filename)) == NULL) {
+ RETURN_ERROR(MPORT_ERR_FATAL, "Couldn't dup filename");
+ }
if ((bundle->archive = archive_read_new()) == NULL)
- RETURN_ERROR(MPORT_ERR_FATAL, "Couldn't dup filename");
-
+ RETURN_ERROR(MPORT_ERR_FATAL, "Couldn't initialize archive read");
if (archive_read_support_format_tar(bundle->archive) != ARCHIVE_OK)
RETURN_ERROR(MPORT_ERR_FATAL, archive_error_string(bundle->archive));
Modified: trunk/lib/libmport/bundle_read_install_pkg.c
===================================================================
--- trunk/lib/libmport/bundle_read_install_pkg.c 2016-08-05 22:53:53 UTC (rev 7653)
+++ trunk/lib/libmport/bundle_read_install_pkg.c 2016-08-05 22:55:32 UTC (rev 7654)
@@ -56,14 +56,17 @@
int
mport_bundle_read_install_pkg(mportInstance *mport, mportBundleRead *bundle, mportPackageMeta *pkg)
{
- if (do_pre_install(mport, bundle, pkg) != MPORT_OK)
+ if (do_pre_install(mport, bundle, pkg) != MPORT_OK) {
RETURN_CURRENT_ERROR;
+ }
- if (do_actual_install(mport, bundle, pkg) != MPORT_OK)
+ if (do_actual_install(mport, bundle, pkg) != MPORT_OK) {
RETURN_CURRENT_ERROR;
+ }
- if (do_post_install(mport, bundle, pkg) != MPORT_OK)
+ if (do_post_install(mport, bundle, pkg) != MPORT_OK) {
RETURN_CURRENT_ERROR;
+ }
syslog(LOG_NOTICE, "%s-%s installed", pkg->name, pkg->version);
@@ -158,6 +161,7 @@
mode_t *dirset;
mode_t dirnewmode;
char *mode = NULL;
+ char *mkdirp = NULL;
struct stat sb;
char file[FILENAME_MAX], cwd[FILENAME_MAX], dir[FILENAME_MAX];
char *fm_owner, *fm_group, *fm_mode;
@@ -263,11 +267,14 @@
case ASSET_DIRRM:
case ASSET_DIRRMTRY:
case ASSET_DIR_OWNER_MODE:
- if (stat(data, &sb) == -1)
- mkdir(data, 0755); /* XXX: we ignore error because it's most likely already there */
+ mkdirp = strdup(data); /* need a char * here */
+ if (mport_mkdirp(mkdirp, S_IRWXU | S_IRWXG | S_IRWXO) == 0) {
+ free(mkdirp);
+ SET_ERRORX(MPORT_ERR_FATAL, "Unable to create directory %s", data);
+ goto ERROR;
+ }
+ free(mkdirp);
- if (stat(data, &sb))
- goto ERROR;
if (fm_mode != NULL && fm_mode[0] != '\0') {
if ((dirset = setmode(fm_mode)) == NULL)
goto ERROR;
@@ -277,14 +284,20 @@
goto ERROR;
}
if (fm_owner != NULL && fm_group != NULL && fm_owner[0] != '\0' && fm_group[0] != '\0') {
- if (chown(data, mport_get_uid(fm_owner), mport_get_gid(fm_group)) == -1)
+ if (chown(data, mport_get_uid(fm_owner), mport_get_gid(fm_group)) == -1) {
+ SET_ERROR(MPORT_ERR_FATAL, "Unable to change owner");
goto ERROR;
+ }
} else if (fm_owner != NULL && fm_owner[0] != '\0') {
- if (chown(data, mport_get_uid(fm_owner), group) == -1)
+ if (chown(data, mport_get_uid(fm_owner), group) == -1) {
+ SET_ERROR(MPORT_ERR_FATAL, "Unable to change owner");
goto ERROR;
+ }
} else if (fm_group != NULL && fm_group[0] != '\0') {
- if (chown(data, owner, mport_get_gid(fm_group)) == -1)
+ if (chown(data, owner, mport_get_gid(fm_group)) == -1) {
+ SET_ERROR(MPORT_ERR_FATAL, "Unable to change owner");
goto ERROR;
+ }
}
break;
@@ -313,8 +326,10 @@
if (mport_bundle_read_extract_next_file(bundle, entry) != MPORT_OK)
goto ERROR;
- if (lstat(file, &sb))
+ if (lstat(file, &sb)) {
+ SET_ERRORX(MPORT_ERR_FATAL, "Unable to stat file %s", file);
goto ERROR;
+ }
if (S_ISREG(sb.st_mode)) {
if (type == ASSET_FILE_OWNER_MODE) {
@@ -323,46 +338,64 @@
#ifdef DEBUG
fprintf(stderr, "owner %s and group %s\n", fm_owner, fm_group);
#endif
- if (chown(file, mport_get_uid(fm_owner), mport_get_gid(fm_group)) == -1)
+ if (chown(file, mport_get_uid(fm_owner), mport_get_gid(fm_group)) == -1) {
+ SET_ERROR(MPORT_ERR_FATAL, "Unable to change owner");
goto ERROR;
+ }
} else if (fm_owner != NULL && fm_owner[0] != '\0') {
#ifdef DEBUG
fprintf(stderr, "owner %s\n", fm_owner);
#endif
- if (chown(file, mport_get_uid(fm_owner), group) == -1)
+ if (chown(file, mport_get_uid(fm_owner), group) == -1) {
+ SET_ERROR(MPORT_ERR_FATAL, "Unable to change owner");
goto ERROR;
+ }
} else if (fm_group != NULL && fm_group[0] != '\0') {
#ifdef DEBUG
fprintf(stderr, "group %s\n", fm_group);
#endif
- if (chown(file, owner, mport_get_gid(fm_group)) == -1)
+ if (chown(file, owner, mport_get_gid(fm_group)) == -1) {
+ SET_ERROR(MPORT_ERR_FATAL, "Unable to change owner");
goto ERROR;
+ }
} else {
// use default.
- if (chown(file, owner, group) == -1)
+ if (chown(file, owner, group) == -1) {
+ SET_ERROR(MPORT_ERR_FATAL, "Unable to change owner");
goto ERROR;
+ }
}
} else {
/* Set the owner and group */
- if (chown(file, owner, group) == -1)
+ if (chown(file, owner, group) == -1) {
+ SET_ERRORX(MPORT_ERR_FATAL, "Unable to set permissions on file %s", file);
goto ERROR;
+ }
}
/* Set the file permissions, assumes non NFSv4 */
if (mode != NULL) {
- if (stat(file, &sb))
+ if (stat(file, &sb)) {
+ SET_ERRORX(MPORT_ERR_FATAL, "Unable to stat file %s", file);
goto ERROR;
+ }
if (type == ASSET_FILE_OWNER_MODE && fm_mode != NULL) {
- if ((set = setmode(fm_mode)) == NULL)
+ if ((set = setmode(fm_mode)) == NULL) {
+ SET_ERROR(MPORT_ERR_FATAL, "Unable to set mode");
goto ERROR;
+ }
} else {
- if ((set = setmode(mode)) == NULL)
+ if ((set = setmode(mode)) == NULL) {
+ SET_ERROR(MPORT_ERR_FATAL, "Unable to set mode");
goto ERROR;
+ }
}
newmode = getmode(set, sb.st_mode);
free(set);
- if (chmod(file, newmode))
+ if (chmod(file, newmode)) {
+ SET_ERROR(MPORT_ERR_FATAL, "Unable to set file permissions");
goto ERROR;
+ }
}
/* shell registration */
@@ -486,10 +519,13 @@
sqlite3_reset(insert);
}
+
sqlite3_finalize(assets);
sqlite3_finalize(insert);
- if (mport_db_do(db, "UPDATE packages SET status='clean' WHERE pkg=%Q", pkg->name) != MPORT_OK)
+ if (mport_db_do(db, "UPDATE packages SET status='clean' WHERE pkg=%Q", pkg->name) != MPORT_OK) {
+ SET_ERROR(MPORT_ERR_FATAL, "Unable to mark package clean");
goto ERROR;
+ }
mport_pkgmeta_logevent(mport, pkg, "Installed");
(mport->progress_free_cb)();
Modified: trunk/lib/libmport/db.c
===================================================================
--- trunk/lib/libmport/db.c 2016-08-05 22:53:53 UTC (rev 7653)
+++ trunk/lib/libmport/db.c 2016-08-05 22:55:32 UTC (rev 7654)
@@ -287,5 +287,7 @@
RUN_SQL(db, "CREATE TABLE IF NOT EXISTS settings (name text NOT NULL, val text NOT NULL)");
RUN_SQL(db, "CREATE INDEX IF NOT EXISTS settings_name ON settings (name)");
+ mport_set_database_version(db);
+
return (MPORT_OK);
}
Modified: trunk/lib/libmport/install_primative.c
===================================================================
--- trunk/lib/libmport/install_primative.c 2016-08-05 22:53:53 UTC (rev 7653)
+++ trunk/lib/libmport/install_primative.c 2016-08-05 22:55:32 UTC (rev 7654)
@@ -39,6 +39,7 @@
mportBundleRead *bundle;
mportPackageMeta **pkgs, *pkg;
int i;
+ bool error = false;
if ((bundle = mport_bundle_read_new()) == NULL)
RETURN_ERROR(MPORT_ERR_FATAL, "Out of memory.");
@@ -68,6 +69,7 @@
{
mport_call_msg_cb(mport, "Unable to install %s-%s: %s", pkg->name, pkg->version, mport_err_string());
/* TODO: WHY WAS THIS HERE mport_set_err(MPORT_OK, NULL); */
+ error = true;
break; /* do not keep going if we have a package failure! */
}
}
@@ -74,6 +76,9 @@
if (mport_bundle_read_finish(mport, bundle) != MPORT_OK)
RETURN_CURRENT_ERROR;
+
+ if (error)
+ return MPORT_ERR_FATAL;
return MPORT_OK;
}
Modified: trunk/lib/libmport/instance.c
===================================================================
--- trunk/lib/libmport/instance.c 2016-08-05 22:53:53 UTC (rev 7653)
+++ trunk/lib/libmport/instance.c 2016-08-05 22:55:32 UTC (rev 7654)
@@ -100,13 +100,14 @@
mport->progress_free_cb = &mport_default_progress_free_cb;
mport->confirm_cb = &mport_default_confirm_cb;
- mport_upgrade_master_schema(mport->db, mport_get_database_version(mport->db));
+ int db_version = mport_get_database_version(mport->db);
+ if (db_version < 1) {
+ /* new, create tables */
+ mport_generate_master_schema(mport->db);
+ db_version = mport_get_database_version(mport->db);
+ }
- if (MPORT_MASTER_VERSION == mport_get_database_version(mport->db))
- return (MPORT_OK);
-
- /* create tables */
- return mport_generate_master_schema(mport->db);
+ return mport_upgrade_master_schema(mport->db, db_version);
}
/**
Modified: trunk/lib/libmport/mport_private.h
===================================================================
--- trunk/lib/libmport/mport_private.h 2016-08-05 22:53:53 UTC (rev 7653)
+++ trunk/lib/libmport/mport_private.h 2016-08-05 22:55:32 UTC (rev 7654)
@@ -86,6 +86,7 @@
gid_t mport_get_gid(const char *);
int mport_rmtree(const char *);
int mport_mkdir(const char *);
+int mport_mkdirp(char *, mode_t);
int mport_rmdir(const char *, int);
int mport_chdir(mportInstance *, const char *);
int mport_xsystem(mportInstance *, const char *, ...);
@@ -181,7 +182,6 @@
#error "libmport only supports MidnightBSD versions 0.7 and greater."
#endif
-
/* fetch stuff */
#define MPORT_URL_PATH MPORT_ARCH "/" MPORT_OSVERSION
#define MPORT_INDEX_URL_PATH MPORT_URL_PATH "/index.db.bz2"
More information about the Midnightbsd-cvs
mailing list