#include "oldheader.h"
#include "rpmerr.h"
#include "rpmlib.h"
+#include "tread.h"
/* This *can't* read 1.0 headers -- it needs 1.1 (w/ group and icon fields)
or better. I'd be surprised if any 1.0 headers are left anywhere anyway.
unsigned int archiveOffset;
unsigned int groupLength;
- if (read(fd, &lit, sizeof(lit)) != sizeof(lit)) {
+ if (timedRead(fd, &lit, sizeof(lit)) != sizeof(lit)) {
return strerror(errno);
}
return "out of memory";
}
- if (read(fd, header->group, groupLength) != groupLength) {
+ if (timedRead(fd, header->group, groupLength) != groupLength) {
oldhdrFree(header);
return strerror(errno);
}
free(header->icon);
return "out of memory";
}
- if (read(fd, header->icon, header->iconLength) != header->iconLength) {
+ if (timedRead(fd, header->icon, header->iconLength) !=
+ header->iconLength) {
oldhdrFree(header);
return strerror(errno);
}
}
while (bytesRead < specOffset) {
- if (read(fd, &ch, 1) != 1) {
+ if (timedRead(fd, &ch, 1) != 1) {
oldhdrFree(header);
return strerror(errno);
}
bytesRead++;
}
- if (read(fd, header->spec, header->specLength) != header->specLength) {
+ if (timedRead(fd, header->spec, header->specLength) != header->specLength) {
oldhdrFree(header);
return strerror(errno);
}
bytesRead += header->specLength;
while (bytesRead < archiveOffset) {
- if (read(fd, &ch, 1) != 1) {
+ if (timedRead(fd, &ch, 1) != 1) {
oldhdrFree(header);
return strerror(errno);
}
#include "rpmerr.h"
#include "rpmlead.h"
+#include "tread.h"
/* The lead needs to be 8 byte aligned */
int readLead(int fd, struct rpmlead *lead)
{
- if (read(fd, lead, sizeof(*lead)) != sizeof(*lead)) {
+ if (timedRead(fd, lead, sizeof(*lead)) != sizeof(*lead)) {
error(RPMERR_READERROR, "read failed: %s (%d)", strerror(errno),
errno);
return 1;
#include <fcntl.h>
#include <strings.h>
-#include "signature.h"
#include "md5.h"
#include "rpmlib.h"
#include "rpmlead.h"
#include "rpmerr.h"
+#include "signature.h"
+#include "tread.h"
typedef int (*md5func)(char * fn, unsigned char * digest);
case RPMSIG_PGP262_1024:
message(MESS_DEBUG, "Old PGP signature\n");
/* These are always 256 bytes */
- if (read(fd, buf, 256) != 256) {
+ if (timedRead(fd, buf, 256) != 256) {
return 1;
}
if (header) {
return 1;
}
if (pad) {
- if (read(fd, buf, pad) != pad) {
+ if (timedRead(fd, buf, pad) != pad) {
freeHeader(h);
return 1;
}
*sig = malloc(*size);
fd = open(sigfile, O_RDONLY);
- if (read(fd, *sig, *size) != *size) {
+ if (timedRead(fd, *sig, *size) != *size) {
unlink(sigfile);
close(fd);
free(*sig);
struct stat statbuf;
fstat(fd, &statbuf);
- headerArchiveSize = statbuf.st_size - sizeof(struct rpmlead) - sigsize;
- message(MESS_DEBUG, "sigsize : %d\n", sigsize);
- message(MESS_DEBUG, "Header + Archive: %d\n", headerArchiveSize);
- message(MESS_DEBUG, "expected size : %d\n", size);
+ if (S_ISREG(statbuf.st_mode)) {
+ headerArchiveSize = statbuf.st_size - sizeof(struct rpmlead) - sigsize;
+
+ message(MESS_DEBUG, "sigsize : %d\n", sigsize);
+ message(MESS_DEBUG, "Header + Archive: %d\n", headerArchiveSize);
+ message(MESS_DEBUG, "expected size : %d\n", size);
- return size - headerArchiveSize;
+ return size - headerArchiveSize;
+ } else {
+ message(MESS_DEBUG, "file is not regular -- skipping size check\n");
+ return 0;
+ }
}
int verifySignature(char *file, int_32 sigTag, void *sig, int count,