[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