[Rpm-maint] [PATCH 3/3] Change mkattr to always create a %defattr with explicitly set modes.

Mark Wielaard mark at klomp.org
Thu Jun 29 11:26:26 UTC 2017


mkattr used "-" as default mode which would pick up the mode for files
as they were on disk. This could cause files generated by rpmbuild to
use a "non-standard" mode if umask was set by the user. Explitictly
use 755 for directories and 644 for files to make builds independent
of any umask settings.

This works as is for both files and directories, so no file argument
is necessary anymore.

https://bugzilla.redhat.com/show_bug.cgi?id=1452893
https://bugzilla.redhat.com/show_bug.cgi?id=1458839

Signed-off-by: Mark Wielaard <mark at klomp.org>
---
 build/files.c | 17 ++++++++---------
 1 file changed, 8 insertions(+), 9 deletions(-)

diff --git a/build/files.c b/build/files.c
index cb7def6..dcc772e 100644
--- a/build/files.c
+++ b/build/files.c
@@ -203,13 +203,12 @@ static void dupAttrRec(const AttrRec oar, AttrRec nar)
     *nar = *oar; /* struct assignment */
 }
 
-static char *mkattr(const char *fn)
+/* Creates a default $defattr string. Can be used with argvAdd().
+   Caller owns the new string which needs to be freed when done.  */
+static char *mkattr(void)
 {
     char *s = NULL;
-    if (fn)
-	rasprintf(&s, "%s(-,%s,%s) %s", "%attr", UID_0_USER, GID_0_GROUP, fn);
-    else
-	rasprintf(&s, "%s(-,%s,%s)", "%defattr", UID_0_USER, GID_0_GROUP);
+    rasprintf(&s, "%s(644,%s,%s,755)", "%defattr", UID_0_USER, GID_0_GROUP);
     return s;
 }
 
@@ -1867,7 +1866,7 @@ static int generateBuildIDs(FileList fl, ARGV_t *files)
 	    debugiddir = rpmGetPath(fl->buildRoot, DEBUG_ID_DIR, NULL);
 
 	    /* Make sure to reset all file flags to defaults.  */
-	    attrstr = mkattr(NULL);
+	    attrstr = mkattr();
 	    argvAdd(files, attrstr);
 	    free (attrstr);
 
@@ -2825,7 +2824,7 @@ static void filterDebuginfoPackage(rpmSpec spec, Package pkg,
 	if (access(path, F_OK) == 0) {
 	    /* Append the file list preamble */
 	    if (!files) {
-		char *attr = mkattr(NULL);
+		char *attr = mkattr();
 		argvAdd(&files, attr);
 		argvAddDir(&files, DEBUG_LIB_DIR);
 		free(attr);
@@ -2885,7 +2884,7 @@ static int addDebugDwz(Package pkg, char *buildroot)
     rasprintf(&path, "%s%s", buildroot, DEBUG_DWZ_DIR);
     if (lstat(path, &sbuf) == 0 && S_ISDIR(sbuf.st_mode)) {
 	if (!pkg->fileList) {
-	    char *attr = mkattr(NULL);
+	    char *attr = mkattr();
 	    argvAdd(&pkg->fileList, attr);
 	    argvAddDir(&pkg->fileList, DEBUG_LIB_DIR);
 	    free(attr);
@@ -2919,7 +2918,7 @@ static int addDebugSrc(Package pkg, char *buildroot)
 		continue;
 	    rasprintf(&path, "%s/%s", DEBUG_SRC_DIR, de->d_name);
 	    if (!pkg->fileList) {
-		char *attr = mkattr(NULL);
+		char *attr = mkattr();
 		argvAdd(&pkg->fileList, attr);
 		free(attr);
 	    }
-- 
1.8.3.1



More information about the Rpm-maint mailing list