]> git.ipfire.org Git - people/ms/pakfire.git/commitdiff
parser: Assign a UUID to generated packages
authorMichael Tremer <michael.tremer@ipfire.org>
Fri, 5 Mar 2021 16:37:43 +0000 (16:37 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Fri, 5 Mar 2021 16:37:43 +0000 (16:37 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
Makefile.am
configure.ac
src/libpakfire/include/pakfire/util.h
src/libpakfire/libpakfire.sym
src/libpakfire/parser.c
src/libpakfire/util.c

index c15625ead978b48b2a971a42fb99fb5dfd5fbf18..3e6cb8ce27cc436275f9da56b0c7a4432b88bda1 100644 (file)
@@ -323,7 +323,8 @@ libpakfire_la_CFLAGS = \
        -fvisibility=hidden \
        $(OPENSSL_CFLAGS) \
        $(PCRE2_CFLAGS) \
-       $(SQLITE3_CFLAGS)
+       $(SQLITE3_CFLAGS) \
+       $(UUID_CFLAGS)
 
 libpakfire_la_CPPFLAGS = \
        $(AM_CPPFLAGS) \
@@ -344,7 +345,8 @@ libpakfire_la_LIBADD = \
        $(OPENSSL_LIBS) \
        $(PCRE2_LIBS) \
        $(SOLV_LIBS) \
-       $(SQLITE3_LIBS)
+       $(SQLITE3_LIBS) \
+       $(UUID_LIBS)
 
 libpakfire_la_DEPENDENCIES = \
        src/libpakfire/libpakfire.sym \
index 47e33b61fcb778fb7d68014e71b74727191736e5..a2cdd14e20a336823bfbf079d4d27386e2d037fa 100644 (file)
@@ -182,6 +182,7 @@ PKG_CHECK_MODULES([LZMA], [liblzma])
 PKG_CHECK_MODULES([OPENSSL], [openssl >= 1.1.1])
 PKG_CHECK_MODULES([PCRE2], [libpcre2-8])
 PKG_CHECK_MODULES([SQLITE3], [sqlite3])
+PKG_CHECK_MODULES([UUID], [uuid])
 
 AM_PATH_GPGME([1.6.0], [], [AC_MSG_ERROR([*** GPGME not found])])
 
index 2f99489862bf9f9bd4ef4e32e8a6d85ef197ac04..c4ef1bf3fc8267f4db8e46080132edac5298cf6b 100644 (file)
@@ -54,6 +54,8 @@ int pakfire_read_file_into_buffer(FILE* f, char** buffer, size_t* len);
 size_t pakfire_string_to_size(const char* s);
 char** pakfire_split_string(const char* s, char delim);
 
+char* pakfire_generate_uuid();
+
 #ifdef PAKFIRE_PRIVATE
 
 int pakfire_string_endswith(const char* s, const char* suffix);
index 29e1d421137a458d8dc5dfa3b77603d65d427531..40df6d12556c8d18400e566c61f871ad5c832f3f 100644 (file)
@@ -406,6 +406,7 @@ global:
        pakfire_access;
        pakfire_basename;
        pakfire_dirname;
+       pakfire_generate_uuid;
        pakfire_get_errno;
        pakfire_path_isdir;
        pakfire_path_join;
index 5758ab9fa37838cf368ffb5b59e3f7bb5e178c59..09c503824de72adb34a382a5c155121f1b340980 100644 (file)
@@ -774,6 +774,16 @@ PAKFIRE_EXPORT int pakfire_parser_create_package(PakfireParser parser,
                goto CLEANUP;
        }
 
+       // Assign a new UUID to this package
+       char* uuid = pakfire_generate_uuid();
+       if (!uuid) {
+               ERROR(parser->pakfire, "Generating a UUID failed: %s\n", strerror(errno));
+               goto CLEANUP;
+       }
+
+       pakfire_package_set_uuid(*pkg, uuid);
+       free(uuid);
+
        // All okay
        r = 0;
 
index fe6ba5be842436a31211030b71a39fed1ab22cfc..9f0b054ac1299a4cd5d1a660c7392b70df1460ed 100644 (file)
@@ -31,6 +31,8 @@
 #include <time.h>
 #include <unistd.h>
 
+#include <uuid/uuid.h>
+
 #include <pakfire/constants.h>
 #include <pakfire/logging.h>
 #include <pakfire/private.h>
@@ -455,3 +457,22 @@ PAKFIRE_EXPORT char** pakfire_split_string(const char* s, char delim) {
 
        return ret;
 }
+
+PAKFIRE_EXPORT char* pakfire_generate_uuid() {
+       uuid_t uuid;
+
+       // Generate a new random value
+       uuid_generate_random(uuid);
+
+       char* ret = malloc(UUID_STR_LEN + 1);
+       if (!ret)
+               return NULL;
+
+       // Convert it to string
+       uuid_unparse_lower(uuid, ret);
+
+       // Terminate string
+       ret[UUID_STR_LEN] = '\0';
+
+       return ret;
+}