rpm/srcdefattr.diff

69 lines
1.9 KiB
Diff

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;
}