]> git.ipfire.org Git - pakfire.git/commitdiff
file: Verify timestamps
authorMichael Tremer <michael.tremer@ipfire.org>
Fri, 19 Aug 2022 14:53:11 +0000 (14:53 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Fri, 19 Aug 2022 14:53:11 +0000 (14:53 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/file.c

index 1c5518f1d73adee129a1d5c907b9f9a2fc77ea50..3fbe13234d58cf8473e581c1688c1893f158f8c0 100644 (file)
@@ -46,6 +46,8 @@ enum pakfire_file_verification_status {
        PAKFIRE_FILE_SIZE_CHANGED         = (1 << 4),
        PAKFIRE_FILE_OWNER_CHANGED        = (1 << 5),
        PAKFIRE_FILE_GROUP_CHANGED        = (1 << 6),
+       PAKFIRE_FILE_CTIME_CHANGED        = (1 << 7),
+       PAKFIRE_FILE_MTIME_CHANGED        = (1 << 8),
 };
 
 struct pakfire_file {
@@ -613,6 +615,24 @@ static int pakfire_file_verify_ownership(struct pakfire_file* file, const struct
        return 0;
 }
 
+static int pakfire_file_verify_timestamps(struct pakfire_file* file, const struct stat* st) {
+       // Check creation time
+       if (file->ctime != st->st_ctime) {
+               file->verify_status |= PAKFIRE_FILE_CTIME_CHANGED;
+
+               DEBUG(file->pakfire, "%s: Creation time changed\n", file->path);
+       }
+
+       // Check modification time
+       if (file->mtime != st->st_mtime) {
+               file->verify_status |= PAKFIRE_FILE_MTIME_CHANGED;
+
+               DEBUG(file->pakfire, "%s: Modification time changed\n", file->path);
+       }
+
+       return 0;
+}
+
 /*
        Verify the file - i.e. does the metadata match what is on disk?
 */
@@ -650,5 +670,10 @@ int pakfire_file_verify(struct pakfire_file* file, int* status) {
        if (r)
                return r;
 
+       // Verify timestamps
+       r = pakfire_file_verify_timestamps(file, &st);
+       if (r)
+               return r;
+
        return 0;
 }