- add %_install_langs to configure languages to be installed.
- add LC_ALL/LC_MESSAGES to query locale search.
- fix: segfault with "--sign" w/o supplying files (#4651).
+ - add headerWrite return code and check for errors.
3.0.1 -> 3.0.2
- eliminate armv4 entries from rpmrc (Andrew E. Mileski).
rpmError(RPMERR_CREATE, _("Unable to open temp file"));
return RPMERR_CREATE;
}
- headerWrite(fd, h, HEADER_MAGIC_YES);
-
- /* Write the archive and get the size */
- if (csa->cpioList != NULL) {
- rc = cpio_gzip(fd, csa);
- } else if (fdFileno(csa->cpioFdIn) >= 0) {
- rc = cpio_copy(fd, csa);
- } else {
- rpmError(RPMERR_CREATE, _("Bad CSA data"));
- rc = RPMERR_BADARG;
+ if (headerWrite(fd, h, HEADER_MAGIC_YES)) {
+ rc = RPMERR_NOSPACE;
+ } else { /* Write the archive and get the size */
+ if (csa->cpioList != NULL) {
+ rc = cpio_gzip(fd, csa);
+ } else if (fdFileno(csa->cpioFdIn) >= 0) {
+ rc = cpio_copy(fd, csa);
+ } else {
+ rpmError(RPMERR_CREATE, _("Bad CSA data"));
+ rc = RPMERR_BADARG;
+ }
}
if (rc != 0) {
fdClose(fd);
RPM_INT32_TYPE, &csa->cpioArchiveSize, 1);
}
(void)fdLseek(fd, 0, SEEK_SET);
- headerWrite(fd, h, HEADER_MAGIC_YES);
+ if (headerWrite(fd, h, HEADER_MAGIC_YES))
+ rc = RPMERR_NOSPACE;
fdClose(fd);
+ unlink(fileName);
+
+ if (rc) {
+ unlink(sigtarget);
+ xfree(sigtarget);
+ return rc;
+ }
/* Open the output file */
- unlink(fileName);
if (fdFileno(fd = fdOpen(fileName, O_WRONLY|O_CREAT|O_TRUNC, 0644)) < 0) {
rpmError(RPMERR_CREATE, _("Could not open %s\n"), fileName);
unlink(sigtarget);
/* */
/********************************************************************/
-void headerWrite(FD_t fd, Header h, int magicp)
+int headerWrite(FD_t fd, Header h, int magicp)
{
void * p;
int length;
int_32 l;
+ ssize_t nb;
p = doHeaderUnload(h, &length);
if (magicp) {
- (void)fdWrite(fd, header_magic, sizeof(header_magic));
+ nb = fdWrite(fd, header_magic, sizeof(header_magic));
+ if (nb != sizeof(header_magic)) {
+ free(p);
+ return 1;
+ }
l = htonl(0);
- (void)fdWrite(fd, &l, sizeof(l));
+ nb = fdWrite(fd, &l, sizeof(l));
+ if (nb != sizeof(l)) {
+ free(p);
+ return 1;
+ }
}
- (void)fdWrite(fd, p, length);
+ nb = fdWrite(fd, p, length);
+ if (nb != length) {
+ free(p);
+ return 1;
+ }
free(p);
+ return 0;
}
Header headerRead(FD_t fd, int magicp)
/* read and write a header from a file */
Header headerRead(FD_t fd, int magicp);
-void headerWrite(FD_t fd, Header h, int magicp);
+int headerWrite(FD_t fd, Header h, int magicp);
Header headerGzRead(FD_t fd, int magicp);
void headerGzWrite(FD_t fd, Header h, int magicp);
unsigned int headerSizeof(Header h, int magicp);
dboffset = faAlloc(db->pkgs, headerSizeof(dbentry, HEADER_MAGIC_NO));
if (!dboffset) {
- rpmError(RPMERR_DBCORRUPT, _("cannot allocate space for database"));
- unblockSignals();
- if (providesCount) free(providesList);
- if (requiredbyCount) free(requiredbyList);
- if (conflictCount) free(conflictList);
- if (triggerCount) free(triggerList);
- if (count) free(fileList);
- return 1;
+ rc = 1;
+ } else {
+ (void)faLseek(db->pkgs, dboffset, SEEK_SET);
+ rc = headerWrite(faFileno(db->pkgs), dbentry, HEADER_MAGIC_NO);
}
- (void)faLseek(db->pkgs, dboffset, SEEK_SET);
- headerWrite(faFileno(db->pkgs), dbentry, HEADER_MAGIC_NO);
+ if (rc) {
+ rpmError(RPMERR_DBCORRUPT, _("cannot allocate space for database"));
+ goto exit;
+ }
/* Now update the appropriate indexes */
if (addIndexEntry(db->nameIndex, name, dboffset, 0))
dbiSyncIndex(db->requiredbyIndex);
dbiSyncIndex(db->triggerIndex);
+exit:
unblockSignals();
if (requiredbyCount) free(requiredbyList);
{
Header oldHeader;
int oldSize;
+ int rc = 0;
oldHeader = rpmdbGetRecord(db, offset);
if (oldHeader == NULL) {
(void)faLseek(db->pkgs, offset, SEEK_SET);
- headerWrite(faFileno(db->pkgs), newHeader, HEADER_MAGIC_NO);
+ rc = headerWrite(faFileno(db->pkgs), newHeader, HEADER_MAGIC_NO);
unblockSignals();
}
- return 0;
+ return rc;
}
void rpmdbRemoveDatabase(const char * rootdir, const char * dbpath)
{
int sigSize, pad;
unsigned char buf[8];
+ int rc = 0;
- headerWrite(fd, header, HEADER_MAGIC_YES);
+ rc = headerWrite(fd, header, HEADER_MAGIC_YES);
+ if (rc)
+ return rc;
+
sigSize = headerSizeof(header, HEADER_MAGIC_YES);
pad = (8 - (sigSize % 8)) % 8;
if (pad) {
rpmMessage(RPMMESS_DEBUG, _("Signature size: %d\n"), sigSize);
rpmMessage(RPMMESS_DEBUG, _("Signature pad : %d\n"), pad);
memset(buf, 0, pad);
- (void)fdWrite(fd, buf, pad);
+ if (fdWrite(fd, buf, pad) != pad)
+ rc = 1;
}
- return 0;
+ return rc;
}
Header rpmNewSignature(void)
int_16 i16 = 1;
int_16 i16a[] = {100, 200, 300};
char ca[] = "char array";
+ int rc;
h = headerNew();
fprintf(stdout, "Original = %d\n", headerSizeof(h));
fd = open("test.out", O_WRONLY|O_CREAT);
- headerWrite(fd, h);
+ rc = headerWrite(fd, h);
close(fd);
h2 = headerCopy(h);
fprintf(stdout, "Copy = %d\n", headerSizeof(h2));
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 1999-08-24 10:09-0400\n"
+"POT-Creation-Date: 1999-08-24 11:10-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
msgid "Could not open %%files file: %s"
msgstr ""
-#: ../build/files.c:1150 ../build/pack.c:425
+#: ../build/files.c:1150 ../build/pack.c:433
#, c-format
msgid "line: %s"
msgstr ""
msgid "Bad CSA data"
msgstr ""
-#: ../build/pack.c:274
+#: ../build/pack.c:282
#, c-format
msgid "Could not open %s\n"
msgstr ""
-#: ../build/pack.c:306 ../build/pack.c:349
+#: ../build/pack.c:314 ../build/pack.c:357
#, c-format
msgid "Unable to write package: %s"
msgstr ""
-#: ../build/pack.c:322 ../lib/rpmchecksig.c:94
+#: ../build/pack.c:330 ../lib/rpmchecksig.c:94
#, c-format
msgid "Generating signature: %d\n"
msgstr ""
-#: ../build/pack.c:339
+#: ../build/pack.c:347
#, c-format
msgid "Unable to read sigtarget: %s"
msgstr ""
-#: ../build/pack.c:364
+#: ../build/pack.c:372
#, c-format
msgid "Wrote: %s\n"
msgstr ""
-#: ../build/pack.c:379
+#: ../build/pack.c:387
#, c-format
msgid "create archive failed on file %s: %s"
msgstr ""
-#: ../build/pack.c:395
+#: ../build/pack.c:403
#, c-format
msgid "cpio_copy write failed: %s"
msgstr ""
-#: ../build/pack.c:402
+#: ../build/pack.c:410
#, c-format
msgid "cpio_copy read failed: %s"
msgstr ""
-#: ../build/pack.c:481
+#: ../build/pack.c:489
#, c-format
msgid "Could not open PreIn file: %s"
msgstr ""
-#: ../build/pack.c:488
+#: ../build/pack.c:496
#, c-format
msgid "Could not open PreUn file: %s"
msgstr ""
-#: ../build/pack.c:495
+#: ../build/pack.c:503
#, c-format
msgid "Could not open PostIn file: %s"
msgstr ""
-#: ../build/pack.c:502
+#: ../build/pack.c:510
#, c-format
msgid "Could not open PostUn file: %s"
msgstr ""
-#: ../build/pack.c:510
+#: ../build/pack.c:518
#, c-format
msgid "Could not open VerifyScript file: %s"
msgstr ""
-#: ../build/pack.c:526
+#: ../build/pack.c:534
#, c-format
msgid "Could not open Trigger script file: %s"
msgstr ""
msgstr ""
#: ../lib/formats.c:65 ../lib/formats.c:83 ../lib/formats.c:104
-#: ../lib/formats.c:137 ../lib/header.c:2058 ../lib/header.c:2075
-#: ../lib/header.c:2095
+#: ../lib/formats.c:137 ../lib/header.c:2072 ../lib/header.c:2089
+#: ../lib/header.c:2109
msgid "(not a number)"
msgstr ""
msgid "Data type %d not supported\n"
msgstr ""
-#: ../lib/header.c:714
+#: ../lib/header.c:728
#, c-format
msgid "Data type %d not supprted\n"
msgstr ""
-#: ../lib/header.c:1058
+#: ../lib/header.c:1072
#, c-format
msgid "Bad count for headerAddEntry(): %d\n"
msgstr ""
-#: ../lib/header.c:1458
+#: ../lib/header.c:1472
#, c-format
msgid "missing { after %"
msgstr ""
-#: ../lib/header.c:1486
+#: ../lib/header.c:1500
msgid "missing } after %{"
msgstr ""
-#: ../lib/header.c:1498
+#: ../lib/header.c:1512
msgid "empty tag format"
msgstr ""
-#: ../lib/header.c:1508
+#: ../lib/header.c:1522
msgid "empty tag name"
msgstr ""
-#: ../lib/header.c:1523
+#: ../lib/header.c:1537
msgid "unknown tag"
msgstr ""
-#: ../lib/header.c:1549
+#: ../lib/header.c:1563
msgid "] expected at end of array"
msgstr ""
-#: ../lib/header.c:1565
+#: ../lib/header.c:1579
msgid "unexpected ]"
msgstr ""
-#: ../lib/header.c:1567
+#: ../lib/header.c:1581
msgid "unexpected }"
msgstr ""
-#: ../lib/header.c:1619
+#: ../lib/header.c:1633
msgid "? expected in expression"
msgstr ""
-#: ../lib/header.c:1626
+#: ../lib/header.c:1640
msgid "{ expected after ? in expression"
msgstr ""
-#: ../lib/header.c:1636 ../lib/header.c:1668
+#: ../lib/header.c:1650 ../lib/header.c:1682
msgid "} expected in expression"
msgstr ""
-#: ../lib/header.c:1643
+#: ../lib/header.c:1657
msgid ": expected following ? subexpression"
msgstr ""
-#: ../lib/header.c:1656
+#: ../lib/header.c:1670
msgid "{ expected after : in expression"
msgstr ""
-#: ../lib/header.c:1675
+#: ../lib/header.c:1689
msgid "| expected at end of expression"
msgstr ""
-#: ../lib/header.c:1842
+#: ../lib/header.c:1856
msgid "(unknown type)"
msgstr ""
msgid "package has no files\n"
msgstr ""
-#: ../lib/rpmdb.c:583
+#: ../lib/rpmdb.c:590
msgid "cannot allocate space for database"
msgstr ""
msgstr ""
#. 8-byte pad
-#: ../lib/signature.c:181 ../lib/signature.c:219
+#: ../lib/signature.c:181 ../lib/signature.c:223
#, c-format
msgid "Signature size: %d\n"
msgstr ""
-#: ../lib/signature.c:182 ../lib/signature.c:220
+#: ../lib/signature.c:182 ../lib/signature.c:224
#, c-format
msgid "Signature pad : %d\n"
msgstr ""
-#: ../lib/signature.c:276 ../lib/signature.c:712
+#: ../lib/signature.c:281 ../lib/signature.c:717
msgid "Couldn't exec pgp"
msgstr ""
-#: ../lib/signature.c:287
+#: ../lib/signature.c:292
msgid "pgp failed"
msgstr ""
#. PGP failed to write signature
#. Just in case
-#: ../lib/signature.c:294
+#: ../lib/signature.c:299
msgid "pgp failed to write signature"
msgstr ""
-#: ../lib/signature.c:299
+#: ../lib/signature.c:304
#, c-format
msgid "PGP sig size: %d\n"
msgstr ""
-#: ../lib/signature.c:310 ../lib/signature.c:386
+#: ../lib/signature.c:315 ../lib/signature.c:391
msgid "unable to read the signature"
msgstr ""
-#: ../lib/signature.c:315
+#: ../lib/signature.c:320
#, c-format
msgid "Got %d bytes of PGP sig\n"
msgstr ""
-#: ../lib/signature.c:352 ../lib/signature.c:687
+#: ../lib/signature.c:357 ../lib/signature.c:692
msgid "Couldn't exec gpg"
msgstr ""
-#: ../lib/signature.c:363
+#: ../lib/signature.c:368
msgid "gpg failed"
msgstr ""
#. GPG failed to write signature
#. Just in case
-#: ../lib/signature.c:370
+#: ../lib/signature.c:375
msgid "gpg failed to write signature"
msgstr ""
-#: ../lib/signature.c:375
+#: ../lib/signature.c:380
#, c-format
msgid "GPG sig size: %d\n"
msgstr ""
-#: ../lib/signature.c:391
+#: ../lib/signature.c:396
#, c-format
msgid "Got %d bytes of GPG sig\n"
msgstr ""
-#: ../lib/signature.c:510 ../lib/signature.c:557
+#: ../lib/signature.c:515 ../lib/signature.c:562
msgid "Could not run pgp. Use --nopgp to skip PGP checks."
msgstr ""
-#: ../lib/signature.c:555 ../lib/signature.c:627
+#: ../lib/signature.c:560 ../lib/signature.c:632
msgid "exec failed!\n"
msgstr ""
-#: ../lib/signature.c:629
+#: ../lib/signature.c:634
msgid "Could not run gpg. Use --nogpg to skip GPG checks."
msgstr ""
#. This case should have been screened out long ago.
-#: ../lib/signature.c:716 ../lib/signature.c:769
+#: ../lib/signature.c:721 ../lib/signature.c:774
msgid "Invalid %%_signature spec in macro file"
msgstr ""
-#: ../lib/signature.c:749
+#: ../lib/signature.c:754
msgid "You must set \"%%_gpg_name\" in your macro file"
msgstr ""
-#: ../lib/signature.c:761
+#: ../lib/signature.c:766
msgid "You must set \"%%_pgp_name\" in your macro file"
msgstr ""
FD_t fdi, fdo;
struct rpmlead lead;
Header hd;
+ int rc;
if (argc == 1) {
fdi = fdDup(STDIN_FILENO);
hd = headerRead(fdi, (lead.major >= 3) ?
HEADER_MAGIC_YES : HEADER_MAGIC_NO);
fdo = fdDup(STDOUT_FILENO);
- headerWrite(fdo, hd, HEADER_MAGIC_YES);
+ rc = headerWrite(fdo, hd, HEADER_MAGIC_YES);
- return 0;
+ return rc;
}