18 #define _RPMFI_INTERNAL
19 #define _RPMEVR_INTERNAL
20 #define _RPMTAG_INTERNAL
41 const char * payload_format,
const char * fmodeMacro)
48 const char *failedFile = NULL;
53 {
const char *fmode =
rpmExpand(fmodeMacro, NULL);
54 if (!(fmode && fmode[0] ==
'w'))
84 failedFile =
_free(failedFile);
100 while((nb =
Fread(buf,
sizeof(buf[0]),
sizeof(buf), csa->
cpioFdIn)) > 0) {
101 if (
Fwrite(buf,
sizeof(buf[0]), nb, fdo) != nb) {
124 const char * fn = buf;
128 fn =
rpmGetPath(
"%{_builddir}/%{?buildsubdir:%{buildsubdir}/}", file, NULL);
130 fd =
Fopen(fn,
"r.fdio");
131 if (fn != buf) fn =
_free(fn);
132 if (fd == NULL ||
Ferror(fd)) {
139 while (fgets(buf, (
int)
sizeof(buf), f)) {
159 HE_t he = memset(
alloca(
sizeof(*he)), 0,
sizeof(*he));
190 HE_t he = memset(
alloca(
sizeof(*he)), 0,
sizeof(*he));
217 HE_t he = memset(
alloca(
sizeof(*he)), 0,
sizeof(*he));
224 _(
"Could not open PreIn file: %s\n"), pkg->
preInFile);
231 _(
"Could not open PreUn file: %s\n"), pkg->
preUnFile);
245 _(
"Could not open PostIn file: %s\n"), pkg->
postInFile);
252 _(
"Could not open PostUn file: %s\n"), pkg->
postUnFile);
267 _(
"Could not open VerifyScript file: %s\n"), pkg->
verifyFile);
299 _(
"Could not open Trigger script file: %s\n"),
305 static const char *bull =
"";
320 int readRPM(
const char *
fileName,
Spec *specp,
void * l,
323 const char * msg =
"";
328 fdi = (fileName != NULL)
329 ?
Fopen(fileName,
"r.fdio")
330 :
fdDup(STDIN_FILENO);
332 if (fdi == NULL ||
Ferror(fdi)) {
334 (fileName ? fileName :
"<stdin>"),
336 if (fdi) (void)
Fclose(fdi);
340 {
const char item[] =
"Lead";
345 msg =
xstrdup(
"item size is zero");
355 (fileName ? fileName :
"<stdin>"), msg);
365 (fileName ? fileName :
"<stdin>"),
Fstrerror(fdi));
389 if (sigs) *sigs = NULL;
399 (fileName ? fileName :
"<stdin>"));
404 (fileName ? fileName :
"<stdin>"));
424 #define RPMPKGVERSION_MIN 30004
425 #define RPMPKGVERSION_MAX 40003
427 static int rpmpkg_version = -1;
429 static int rpmLeadVersion(
void)
436 if (rpmpkg_version < 0) {
438 if (rpmpkg_version < RPMPKGVERSION_MIN)
439 rpmpkg_version = RPMPKGVERSION_MIN;
440 if (rpmpkg_version > RPMPKGVERSION_MAX)
441 rpmpkg_version = RPMPKGVERSION_MAX;
444 rpmlead_version = rpmpkg_version / 10000;
446 if (rpmlead_version < 3 || rpmlead_version > 4)
448 return rpmlead_version;
454 HE_t he = memset(
alloca(
sizeof(*he)), 0,
sizeof(*he));
455 const char *N, *V, *R;
456 #ifdef RPM_VENDOR_MANDRIVA
465 const char ** provides = NULL;
466 const char ** providesEVR = NULL;
479 nb = 21 + strlen(V) + 1 + strlen(R) + 1;
480 #ifdef RPM_VENDOR_MANDRIVA
484 nb += (gotD ? strlen(D) + 1 : 0);
493 sprintf(p,
"%d:", E);
497 #ifdef RPM_VENDOR_MANDRIVA
514 provides = he->
p.
argv;
515 providesCount = he->
c;
526 providesEVR = he->
p.
argv;
528 for (i = 0; i < providesCount; i++) {
530 static const char * vdummy =
"";
535 he->
p.
argv = &vdummy;
560 provideFlags = he->
p.
ui32p;
563 if (provides && providesEVR && provideFlags)
564 for (i = 0; i < providesCount; i++) {
565 if (!(provides[i] && providesEVR[i]))
568 !strcmp(N, provides[i]) && !strcmp(pEVR, providesEVR[i])))
577 provides =
_free(provides);
578 providesEVR =
_free(providesEVR);
579 provideFlags =
_free(provideFlags);
617 CSA_t csa,
char *passPhrase,
const char **cookie)
619 HE_t he = memset(
alloca(
sizeof(*he)), 0,
sizeof(*he));
623 const char * sigtarget;
624 const char * rpmio_flags = NULL;
625 const char * payload_format = NULL;
626 const char * SHA1 = NULL;
627 const char * msg = NULL;
652 payload_format =
rpmExpand(
"%{?_source_payload_format}", NULL);
653 rpmio_flags =
rpmExpand(
"%{?_source_payload}", NULL);
655 payload_format =
rpmExpand(
"%{?_binary_payload_format}", NULL);
656 rpmio_flags =
rpmExpand(
"%{?_binary_payload}", NULL);
659 if (!(payload_format && *payload_format)) {
660 payload_format =
_free(payload_format);
661 payload_format =
xstrdup(
"cpio");
663 if (!(rpmio_flags && *rpmio_flags)) {
664 rpmio_flags =
_free(rpmio_flags);
665 rpmio_flags =
xstrdup(
"w9.gzdio");
667 s = strchr(rpmio_flags,
'.');
670 if (payload_format) {
671 if (!strcmp(payload_format,
"tar")
672 || !strcmp(payload_format,
"ustar")) {
677 #if defined(SUPPORT_AR_PAYLOADS)
678 if (!strcmp(payload_format,
"ar")) {
687 he->
p.
str = payload_format;
693 if (s[1] ==
'g' && s[2] ==
'z') {
700 }
else if (s[1] ==
'b' && s[2] ==
'z') {
707 }
else if (s[1] ==
'l' && s[2] ==
'z') {
715 }
else if (s[1] ==
'x' && s[2] ==
'z') {
724 strcpy(buf, rpmio_flags);
725 buf[s - rpmio_flags] =
'\0';
768 {
const char item[] =
"Header";
773 (msg && *msg ? msg :
"write failed\n"));
785 rc =
cpio_doio(fd, h, csa, payload_format, rpmio_flags);
791 rpmio_flags =
_free(rpmio_flags);
792 payload_format =
_free(payload_format);
801 (void) fflush(stdout);
807 addsig = (passPhrase && passPhrase[0]);
826 he->
p.
ui32p = &payloadSize;
842 static const size_t align = 1024;
843 size_t nb = align - 96 - 16 - 16;
849 b = memset(
alloca(nb), 0, nb);
856 assert(sigh != NULL);
860 fd =
Fopen(fileName,
"w.fdio");
861 if (fd == NULL ||
Ferror(fd)) {
869 {
const char item[] =
"Lead";
876 void * l = memset(
alloca(nl), 0, nl);
877 const char *N, *V, *R;
879 sprintf(buf,
"%s-%s-%s", N, V, R);
896 {
const char item[] =
"Signature";
902 (msg && *msg ? msg :
"write failed\n"));
911 ifd =
Fopen(sigtarget,
"r.fdio");
912 if (ifd == NULL ||
Ferror(ifd)) {
920 {
const char item[] =
"Header";
927 (msg && *msg ? msg :
"read failed\n"));
944 (msg && *msg ? msg :
"write failed\n"));
953 while ((nbr =
Fread(buf,
sizeof(buf[0]),
sizeof(buf), ifd)) > 0) {
960 nbw = (int)
Fwrite(buf,
sizeof(buf[0]), nbr, fd);
961 if (nbr != nbw ||
Ferror(fd)) {
976 if (sigh != NULL && pkgidp != NULL) {
980 *pkgidp = he->
p.
ui8p;
995 sigtarget =
_free(sigtarget);
1009 HE_t he = memset(
alloca(
sizeof(*he)), 0,
sizeof(*he));
1068 HE_t he = memset(
alloca(
sizeof(*he)), 0,
sizeof(*he));
1070 CSA_t csa = &csabuf;
1071 const char *errorString;
1076 for (pkg = spec->
packages; pkg != NULL; pkg = pkg->
next) {
1113 {
const char *binFormat =
rpmGetPath(
"%{_rpmfilename}", NULL);
1114 char *binRpm, *binDir;
1117 binFormat =
_free(binFormat);
1118 if (binRpm == NULL) {
1122 "filename for package %s: %s\n"), he->
p.
str, errorString);
1128 fn =
rpmGetPath(
"%{_rpmdir}/", binRpm, NULL);
1129 if ((binDir = strchr(binRpm,
'/')) != NULL) {
1133 dn =
rpmGetPath(
"%{_rpmdir}/", binRpm, NULL);
1134 if (
Stat(dn, &st) < 0) {
1142 dn, strerror(
errno));
1148 binRpm =
_free(binRpm);
1151 memset(csa, 0,
sizeof(*csa));
1152 csa->cpioArchiveSize = 0;
1155 csa->cpioFdIn =
fdNew(
"init (packageBinaries)");
1160 assert(csa->cpioList != NULL);
1166 csa->cpioList->te =
_free(csa->cpioList->te);
1168 csa->cpioList =
rpmfiFree(csa->cpioList);
1170 csa->cpioFdIn =
fdFree(csa->cpioFdIn,
"init (packageBinaries)");
1183 HE_t he = memset(
alloca(
sizeof(*he)), 0,
sizeof(*he));
1185 CSA_t csa = &csabuf;
1188 #if defined(RPM_VENDOR_OPENPKG) || defined(RPM_VENDOR_FEDORA) || defined(RPM_VENDOR_MANDRIVA) || defined(RPM_VENDOR_ARK)
1195 #if defined(RPM_VENDOR_OPENPKG) || defined(RPM_VENDOR_FEDORA) || defined(RPM_VENDOR_MANDRIVA) || defined(RPM_VENDOR_ARK)
1206 {
const char ** av = NULL;
1208 if (av != NULL && av[0] != NULL) {
1223 {
const char *srcrpmdir =
rpmGetPath(
"%{_srcrpmdir}/", NULL);
1228 memset(csa, 0,
sizeof(*csa));
1229 csa->cpioArchiveSize = 0;
1232 csa->cpioFdIn =
fdNew(
"init (packageSources)");
1237 assert(csa->cpioList != NULL);
1244 csa->cpioList->te =
_free(csa->cpioList->te);
1246 csa->cpioList =
rpmfiFree(csa->cpioList);
1248 csa->cpioFdIn =
fdFree(csa->cpioFdIn,
"init (packageSources)");
1251 srcrpmdir =
_free(srcrpmdir);