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)) {
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;
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;
545 he->
p.
ui32p = (
void *) &fdummy;
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);
625 if (c >=
'0' && c <=
'9')
626 return (
unsigned char) (c -
'0');
627 if (c >=
'A' && c <=
'F')
628 return (
unsigned char)((int)(c -
'A') + 10);
629 if (c >=
'a' && c <=
'f')
630 return (
unsigned char)((int)(c -
'a') + 10);
631 return (
unsigned char)
'\0';
635 CSA_t csa,
char * passPhrase,
const char ** cookie,
void * _dig)
643 const char * sigtarget;
644 const char * rpmio_flags = NULL;
645 const char * payload_format = NULL;
646 const char * SHA1 = NULL;
647 const char * msg = NULL;
673 payload_format =
rpmExpand(
"%{?_source_payload_format}", NULL);
674 rpmio_flags =
rpmExpand(
"%{?_source_payload}", NULL);
676 payload_format =
rpmExpand(
"%{?_binary_payload_format}", NULL);
677 rpmio_flags =
rpmExpand(
"%{?_binary_payload}", NULL);
680 if (!(payload_format && *payload_format)) {
681 payload_format =
_free(payload_format);
682 payload_format =
xstrdup(
"cpio");
684 if (!(rpmio_flags && *rpmio_flags)) {
685 rpmio_flags =
_free(rpmio_flags);
686 rpmio_flags =
xstrdup(
"w9.gzdio");
688 s = strchr(rpmio_flags,
'.');
691 if (payload_format) {
692 if (!strcmp(payload_format,
"tar")
693 || !strcmp(payload_format,
"ustar")) {
698 #if defined(SUPPORT_AR_PAYLOADS)
699 if (!strcmp(payload_format,
"ar")) {
708 he->
p.
str = payload_format;
714 if (s[1] ==
'g' && s[2] ==
'z') {
721 }
else if (s[1] ==
'b' && s[2] ==
'z') {
728 }
else if (s[1] ==
'l' && s[2] ==
'z') {
736 }
else if (s[1] ==
'x' && s[2] ==
'z') {
745 strcpy(buf, rpmio_flags);
746 buf[s - rpmio_flags] =
'\0';
768 if (!addsig && dig && dig->pub && dig->publen > 0) {
774 he->
p.
argv = (
const char **) &s;
806 {
const char item[] =
"Header";
811 (msg && *msg ? msg :
"write failed\n"));
840 rc =
cpio_doio(fd, h, csa, payload_format, rpmio_flags);
846 rpmio_flags =
_free(rpmio_flags);
847 payload_format =
_free(payload_format);
856 (void) fflush(stdout);
862 addsig = (passPhrase && passPhrase[0]);
868 else if (dig && dig->sig && dig->siglen > 0) {
871 he->
p.
ptr = (
void *) dig->sig;
874 dig->sig =
_free(dig->sig);
890 he->
p.
ui32p = &payloadSize;
906 static const size_t align = 1024;
907 size_t nb = align - 96 - 16 - 16;
913 b = memset(
alloca(nb), 0, nb);
920 assert(sigh != NULL);
924 fd =
Fopen(fn,
"w.fdio");
925 if (fd == NULL ||
Ferror(fd)) {
933 {
const char item[] =
"Lead";
940 void * l = memset(
alloca(nl), 0, nl);
941 const char *N, *V, *R;
943 sprintf(buf,
"%s-%s-%s", N, V, R);
960 {
const char item[] =
"Signature";
966 (msg && *msg ? msg :
"write failed\n"));
975 ifd =
Fopen(sigtarget,
"r.fdio");
976 if (ifd == NULL ||
Ferror(ifd)) {
984 {
const char item[] =
"Header";
991 (msg && *msg ? msg :
"read failed\n"));
1008 (msg && *msg ? msg :
"write failed\n"));
1017 while ((nbr =
Fread(buf,
sizeof(buf[0]),
sizeof(buf), ifd)) > 0) {
1024 nbw = (int)
Fwrite(buf,
sizeof(buf[0]), nbr, fd);
1025 if (nbr != nbw ||
Ferror(fd)) {
1040 if (sigh != NULL && pkgidp != NULL) {
1044 *pkgidp = he->
p.
ui8p;
1058 (void)
Unlink(sigtarget);
1059 sigtarget =
_free(sigtarget);
1137 xx = system(pkgcheck);
1138 if (WEXITSTATUS(xx) == -1 || WEXITSTATUS(xx) == 127) {
1140 if (fail)
return 127;
1142 if (WEXITSTATUS(xx) != 0) {
1154 CSA_t csa = &csabuf;
1155 const char *errorString;
1161 for (pkg = spec->
packages; pkg != NULL; pkg = pkg->
next) {
1198 {
const char *binFormat =
rpmGetPath(
"%{_rpmfilename}", NULL);
1199 char *binRpm, *binDir;
1202 binFormat =
_free(binFormat);
1203 if (binRpm == NULL) {
1207 "filename for package %s: %s\n"), he->
p.
str, errorString);
1212 fn =
rpmGetPath(
"%{_rpmdir}/", binRpm, NULL);
1213 if ((binDir = strchr(binRpm,
'/')) != NULL) {
1217 dn =
rpmGetPath(
"%{_rpmdir}/", binRpm, NULL);
1218 if (
Stat(dn, &st) < 0) {
1226 dn, strerror(
errno));
1232 binRpm =
_free(binRpm);
1235 memset(csa, 0,
sizeof(*csa));
1236 csa->cpioArchiveSize = 0;
1239 csa->cpioFdIn =
fdNew(
"init (packageBinaries)");
1244 assert(csa->fi != NULL);
1250 csa->fi->te =
_free(csa->fi->te);
1254 csa->cpioFdIn =
fdFree(csa->cpioFdIn,
"init (packageBinaries)");
1259 char *pkgcheck =
rpmExpand(
"%{?_build_pkgcheck} ", fn, NULL);
1260 if (pkgcheck[0] !=
' ') {
1263 pkgcheck =
_free(pkgcheck);
1274 if (pkglist != NULL) {
1275 char *pkgcheck_set = NULL;
1279 for (i = 0; i <
argvCount(pkglist); i++)
1280 pkglen += strlen(pkglist[i]) + 1;
1282 for (i = 0; i <
argvCount(pkglist); i++) {
1285 strcat(pkgs, pkglist[i]);
1288 pkgcheck_set =
rpmExpand(
"%{?_build_pkgcheck_set} ", pkgs, NULL);
1289 if (pkgcheck_set[0] !=
' ') {
1292 pkgcheck_set =
_free(pkgcheck_set);
1306 CSA_t csa = &csabuf;
1309 #if defined(RPM_VENDOR_OPENPKG) || defined(RPM_VENDOR_FEDORA) || defined(RPM_VENDOR_MANDRIVA) || defined(RPM_VENDOR_ARK)
1316 #if defined(RPM_VENDOR_OPENPKG) || defined(RPM_VENDOR_FEDORA) || defined(RPM_VENDOR_MANDRIVA) || defined(RPM_VENDOR_ARK)
1335 if (ix >= 0 && ix < RPMSCRIPT_MAX) {
1350 {
const char ** av = NULL;
1352 if (av != NULL && av[0] != NULL) {
1367 {
const char *srcrpmdir =
rpmGetPath(
"%{_srcrpmdir}/", NULL);
1369 const char *pkgcheck =
rpmExpand(
"%{?_build_pkgcheck_srpm} ", fn, NULL);
1373 memset(csa, 0,
sizeof(*csa));
1374 csa->cpioArchiveSize = 0;
1377 csa->cpioFdIn =
fdNew(
"init (packageSources)");
1383 assert(csa->fi != NULL);
1385 if (csa->fi == NULL)
1394 if (rc ==
RPMRC_OK && pkgcheck[0] !=
' ') {
1399 csa->fi->te =
_free(csa->fi->te);
1403 csa->cpioFdIn =
fdFree(csa->cpioFdIn,
"init (packageSources)");
1406 srcrpmdir =
_free(srcrpmdir);
1408 pkgcheck =
_free(pkgcheck);