File srcdefattr.diff of Package rpm

Add new srcdefattr macro. Usefull for assuring that all files
in the src rpms belong to root:root [#48870] rh#125515

--- ./build/files.c.orig	2005-12-14 19:22:43.000000000 +0000
+++ ./build/files.c	2006-02-17 13:57:25.000000000 +0000
@@ -2260,7 +2274,15 @@ int processSourceFiles(Spec spec)
     struct FileList_s fl;
     char *s, **files, **fp;
     Package pkg;
+    static char *_srcdefattr;
+    static int oneshot;
 
+    if (!oneshot) {
+	_srcdefattr = rpmExpand("%{?_srcdefattr}", NULL);
+	if (_srcdefattr && !*_srcdefattr)
+	    _srcdefattr = _free(_srcdefattr);
+	oneshot = 1;
+    }
     sourceFiles = newStringBuf();
 
     /* XXX
@@ -2311,6 +2333,15 @@ int processSourceFiles(Spec spec)
 
     spec->sourceCpioList = NULL;
 
+    /* Init the file list structure */
+    memset(&fl, 0, sizeof(fl));
+    if (_srcdefattr) {
+	char *a = xmalloc(strlen(_srcdefattr) + 9 + 1);
+	strcpy(a, "%defattr ");
+	strcpy(a + 9, _srcdefattr);
+	parseForAttr(a, &fl);
+	a = _free(a);
+    }
     fl.fileList = xcalloc((spec->numSources + 1), sizeof(*fl.fileList));
     fl.processingFailed = 0;
     fl.fileListRecsUsed = 0;
@@ -2359,8 +2390,20 @@ int processSourceFiles(Spec spec)
 	    fl.processingFailed = 1;
 	}
 
-	flp->uname = getUname(flp->fl_uid);
-	flp->gname = getGname(flp->fl_gid);
+	if (fl.def_ar.ar_fmodestr) {
+	    flp->fl_mode &= S_IFMT;
+	    flp->fl_mode |= fl.def_ar.ar_fmode;
+	}
+	if (fl.def_ar.ar_user) {
+	    flp->uname = getUnameS(fl.def_ar.ar_user);
+	} else {
+	    flp->uname = getUname(flp->fl_uid);
+	}
+	if (fl.def_ar.ar_group) {
+	    flp->gname = getGnameS(fl.def_ar.ar_group);
+	} else {
+	    flp->gname = getGname(flp->fl_gid);
+	}
 	flp->langs = xstrdup("");
 	
 	fl.totalFileSize += flp->fl_size;
@@ -2384,6 +2427,7 @@ int processSourceFiles(Spec spec)
 
     sourceFiles = freeStringBuf(sourceFiles);
     fl.fileList = freeFileList(fl.fileList, fl.fileListRecsUsed);
+    freeAttrRec(&fl.def_ar);
     return fl.processingFailed;
 }
 
openSUSE Build Service is sponsored by