X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fwgtpkg-digsig.c;h=3aa4da304f7c4d9a04434147a6b862d05dc161f9;hb=9ab266df6642c6e930e03b3024d7c3d53ef88bbc;hp=6e66e38b6de25b5e0b6ae634c3109462a7a67335;hpb=26d75de504d808191dbadc9a735009a214a789b0;p=src%2Fapp-framework-main.git diff --git a/src/wgtpkg-digsig.c b/src/wgtpkg-digsig.c index 6e66e38..3aa4da3 100644 --- a/src/wgtpkg-digsig.c +++ b/src/wgtpkg-digsig.c @@ -18,10 +18,13 @@ #include #include #include +#include +#include #include #include #include +#include #include "verbose.h" @@ -278,7 +281,7 @@ error: /* verify the digital signature of the file described by 'fdesc' */ int verify_digsig(struct filedesc *fdesc) { - int res; + int res, fd; assert ((fdesc->flags & flag_signature) != 0); debug("-- checking file %s",fdesc->name); @@ -288,7 +291,13 @@ int verify_digsig(struct filedesc *fdesc) clear_certificates(); /* reads and xml parses the signature file */ - document = xmlReadFile(fdesc->name, NULL, 0); + fd = openat(workdirfd, fdesc->name, O_RDONLY); + if (fd < 0) { + syslog(LOG_ERR, "cant't open file %s", fdesc->name); + return -1; + } + document = xmlReadFd(fd, fdesc->name, NULL, 0); + close(fd); if (document == NULL) { syslog(LOG_ERR, "xml parse of file %s failed", fdesc->name); return -1; @@ -328,7 +337,8 @@ int create_digsig(int index, const char *key, const char **certs) { struct filedesc *fdesc; xmlDocPtr doc; - int rc, len; + int rc, len, fd; + xmlSaveCtxtPtr ctx; rc = -1; @@ -343,13 +353,27 @@ int create_digsig(int index, const char *key, const char **certs) goto error2; /* save the doc as file */ - len = xmlSaveFormatFileEnc(fdesc->name, doc, NULL, 0); + fd = openat(workdirfd, fdesc->name, O_WRONLY|O_CREAT|O_TRUNC, 0644); + if (fd < 0) { + syslog(LOG_ERR, "cant open %s for write", fdesc->name); + goto error2; + } + ctx = xmlSaveToFd(fd, NULL, XML_SAVE_FORMAT); + if (!ctx) { + syslog(LOG_ERR, "xmlSaveToFd failed for %s", fdesc->name); + goto error3; + } + len = xmlSaveDoc(ctx, doc); if (len < 0) { - syslog(LOG_ERR, "xmlSaveFormatFileEnc to %s failed", fdesc->name); + syslog(LOG_ERR, "xmlSaveDoc to %s failed", fdesc->name); goto error2; } rc = 0; +error4: + xmlSaveClose(ctx); +error3: + close(fd); error2: xmlFreeDoc(doc); error: