]> git.ipfire.org Git - pakfire.git/commitdiff
linter: Check if we have Build IDs
authorMichael Tremer <michael.tremer@ipfire.org>
Sat, 26 Oct 2024 16:12:17 +0000 (16:12 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Sat, 26 Oct 2024 16:12:17 +0000 (16:12 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/linter-file.c

index d6b8627783d880e27d893a1337c535fba1346342..76180f1059e9094748faff1fc09bacd9dcdeaff5 100644 (file)
@@ -864,6 +864,27 @@ static int pakfire_linter_file_has_debuglink(struct pakfire_linter_file* lfile)
        return pakfire_linter_file_elf(lfile, __pakfire_linter_file_has_debuglink, NULL);
 }
 
+static int __pakfire_linter_file_has_buildid(
+               struct pakfire_linter_file* lfile, Elf* elf, void* data) {
+       const void* buildid = NULL;
+       ssize_t length = 0;
+
+       // Fetch the build ID
+       length = dwelf_elf_gnu_build_id(elf, &buildid);
+       if (length < 0)
+               return length;
+
+       // If length is zero there is no build ID
+       else if (length == 0)
+               return pakfire_linter_file_error(lfile, "Missing Build ID");
+
+       return 0;
+}
+
+static int pakfire_linter_file_has_buildid(struct pakfire_linter_file* lfile) {
+       return pakfire_linter_file_elf(lfile, __pakfire_linter_file_has_buildid, NULL);
+}
+
 int pakfire_linter_file_lint(struct pakfire_linter_file* lfile) {
        int r = 0;
 
@@ -891,6 +912,11 @@ int pakfire_linter_file_lint(struct pakfire_linter_file* lfile) {
                if (r < 0)
                        return r;
 
+               // Check if we have a build ID
+               r = pakfire_linter_file_has_buildid(lfile);
+               if (r < 0)
+                       return r;
+
                // Check if we have a debug link
                r = pakfire_linter_file_has_debuglink(lfile);
                if (r < 0)