version 1.17, 2019/12/09 09:41:54 |
version 1.18, 2019/12/22 06:37:25 |
|
|
{ |
{ |
struct gzheader h; |
struct gzheader h; |
size_t bufsize, len; |
size_t bufsize, len; |
char *p, *meta; |
char *p; |
uint8_t *bufend; |
uint8_t *bufend; |
int fdin, fdout; |
int fdin, fdout; |
|
|
|
|
fake[8] = h.xflg; |
fake[8] = h.xflg; |
len = h.endcomment-h.comment; |
len = h.endcomment-h.comment; |
|
|
meta = xmalloc(len+1); |
|
memcpy(meta, h.comment, len); |
|
meta[len] = 0; |
|
p = verifyzdata(h.comment, len, sigfile, |
p = verifyzdata(h.comment, len, sigfile, |
pubkeyfile, keytype); |
pubkeyfile, keytype); |
|
|
|
|
|
|
if (*p != '\n') |
if (*p != '\n') |
errx(1, "invalid signature"); |
errx(1, "invalid signature"); |
*(p++) = 0; |
|
|
|
fdout = xopen(msgfile, O_CREAT|O_TRUNC|O_NOFOLLOW|O_WRONLY, 0666); |
fdout = xopen(msgfile, O_CREAT|O_TRUNC|O_NOFOLLOW|O_WRONLY, 0666); |
writeall(fdout, fake, sizeof fake, msgfile); |
writeall(fdout, fake, sizeof fake, msgfile); |
writeall(fdout, meta, len+1, msgfile); |
writeall(fdout, h.comment, len+1, msgfile); |
free(meta); |
*(p++) = 0; |
copy_blocks(fdout, fdin, p, h.endcomment, bufsize, bufend); |
copy_blocks(fdout, fdin, p, h.endcomment, bufsize, bufend); |
free(h.buffer); |
free(h.buffer); |
close(fdout); |
close(fdout); |