]> git.seodisparate.com - SimpleArchiver/commitdiff
Impl. setting stored UID/GID if EUID 0
authorStephen Seo <seo.disparate@gmail.com>
Fri, 27 Sep 2024 07:09:23 +0000 (16:09 +0900)
committerStephen Seo <seo.disparate@gmail.com>
Wed, 2 Oct 2024 06:11:23 +0000 (15:11 +0900)
src/archiver.c

index 1d6a4a51d9956b5f6fcaf2c7373a8f35a602bdc6..b654cf501682ab067b3aadb3033e11800bf8a7a7 100644 (file)
@@ -2463,6 +2463,13 @@ int simple_archiver_parse_archive_version_1(FILE *in_f, int_fast8_t do_extract,
     SIMPLE_ARCHIVER_PLATFORM == SIMPLE_ARCHIVER_PLATFORM_LINUX
           if (chmod(file_info->filename, permissions) == -1) {
             return SDAS_INTERNAL_ERROR;
+          } else if (geteuid() == 0 &&
+                     chown(file_info->filename, file_info->uid,
+                           file_info->gid) != 0) {
+            fprintf(stderr,
+                    "ERROR Failed to set UID/GID as EUID 0 of file \"%s\"!\n",
+                    file_info->filename);
+            return SDAS_INTERNAL_ERROR;
           }
 #endif
         } else {