From: Michael Tremer Date: Fri, 5 Mar 2021 16:37:43 +0000 (+0000) Subject: parser: Assign a UUID to generated packages X-Git-Tag: 0.9.28~1285^2~626 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=df552c326821a30d3a2624cbf383600f9234744a;p=pakfire.git parser: Assign a UUID to generated packages Signed-off-by: Michael Tremer --- diff --git a/Makefile.am b/Makefile.am index c15625ead..3e6cb8ce2 100644 --- a/Makefile.am +++ b/Makefile.am @@ -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 \ diff --git a/configure.ac b/configure.ac index 47e33b61f..a2cdd14e2 100644 --- a/configure.ac +++ b/configure.ac @@ -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])]) diff --git a/src/libpakfire/include/pakfire/util.h b/src/libpakfire/include/pakfire/util.h index 2f9948986..c4ef1bf3f 100644 --- a/src/libpakfire/include/pakfire/util.h +++ b/src/libpakfire/include/pakfire/util.h @@ -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); diff --git a/src/libpakfire/libpakfire.sym b/src/libpakfire/libpakfire.sym index 29e1d4211..40df6d125 100644 --- a/src/libpakfire/libpakfire.sym +++ b/src/libpakfire/libpakfire.sym @@ -406,6 +406,7 @@ global: pakfire_access; pakfire_basename; pakfire_dirname; + pakfire_generate_uuid; pakfire_get_errno; pakfire_path_isdir; pakfire_path_join; diff --git a/src/libpakfire/parser.c b/src/libpakfire/parser.c index 5758ab9fa..09c503824 100644 --- a/src/libpakfire/parser.c +++ b/src/libpakfire/parser.c @@ -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; diff --git a/src/libpakfire/util.c b/src/libpakfire/util.c index fe6ba5be8..9f0b054ac 100644 --- a/src/libpakfire/util.c +++ b/src/libpakfire/util.c @@ -31,6 +31,8 @@ #include #include +#include + #include #include #include @@ -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; +}