Sign index-meta

This commit is contained in:
Piotr Wójcik 2019-10-01 21:18:25 +02:00 committed by Juan RP
parent b4e93a95bf
commit 381b7b7600
3 changed files with 33 additions and 13 deletions

View File

@ -93,8 +93,7 @@ repodata_flush(struct xbps_handle *xhp, const char *repodir,
buf = xbps_dictionary_externalize(idx); buf = xbps_dictionary_externalize(idx);
if (buf == NULL) if (buf == NULL)
return false; return false;
buflen = strlen(buf); rv = xbps_archive_append_buf(ar, buf, strlen(buf),
rv = xbps_archive_append_buf(ar, buf, buflen,
XBPS_REPOIDX, 0644, "root", "root"); XBPS_REPOIDX, 0644, "root", "root");
free(buf); free(buf);
if (rv != 0) { if (rv != 0) {
@ -110,12 +109,32 @@ repodata_flush(struct xbps_handle *xhp, const char *repodir,
} else { } else {
buf = xbps_dictionary_externalize(meta); buf = xbps_dictionary_externalize(meta);
} }
rv = xbps_archive_append_buf(ar, buf, strlen(buf), buflen = strlen(buf);
rv = xbps_archive_append_buf(ar, buf, buflen,
XBPS_REPOIDX_META, 0644, "root", "root"); XBPS_REPOIDX_META, 0644, "root", "root");
free(buf);
if (rv != 0) if (rv != 0)
return false; return false;
if (meta)
{
rv = sign_buffer(buf, buflen, privkey, &sig, &siglen);
free(buf);
if (rv != 0) {
free(sig);
return false;
}
assert(sig);
rv = xbps_archive_append_buf(ar, sig, siglen,
XBPS_REPOIDXMETA_SIG, 0644, "root", "root");
if (rv != 0) {
free(sig);
return false;
}
free(sig);
} else {
free(buf);
}
/* Write data to tempfile and rename */ /* Write data to tempfile and rename */
if (archive_write_close(ar) != ARCHIVE_OK) if (archive_write_close(ar) != ARCHIVE_OK)
return false; return false;

View File

@ -116,18 +116,19 @@
*/ */
#define XBPS_REPOIDX "index.plist" #define XBPS_REPOIDX "index.plist"
/**
* @def XBPS_REPOIDX_SIG
* Filename for the signature of repository index property list.
*/
#define XBPS_REPOIDX_SIG "index.plist.sig"
/** /**
* @def XBPS_REPOIDX_META * @def XBPS_REPOIDX_META
* Filename for the repository index metadata property list. * Filename for the repository index metadata property list.
*/ */
#define XBPS_REPOIDX_META "index-meta.plist" #define XBPS_REPOIDX_META "index-meta.plist"
/**
* @def XBPS_REPOIDXMETA_SIG
* Filename for the signature of repository index metadata
* property list.
*/
#define XBPS_REPOIDXMETA_SIG "index-meta.plist.sig"
/** /**
* @def XBPS_FLAG_VERBOSE * @def XBPS_FLAG_VERBOSE
* Verbose flag that can be used in the function callbacks to alter * Verbose flag that can be used in the function callbacks to alter
@ -1360,7 +1361,7 @@ struct xbps_repo {
xbps_dictionary_t idxmeta; xbps_dictionary_t idxmeta;
/** /**
* @var uri * @var uri
* *
* URI string associated with repository. * URI string associated with repository.
*/ */
const char *uri; const char *uri;

View File

@ -75,9 +75,9 @@ repo_verify_index(struct xbps_repo *repo, unsigned char *digest) {
return false; return false;
} }
if (strcmp(archive_entry_pathname(entry), XBPS_REPOIDX_SIG) != 0) { if (strcmp(archive_entry_pathname(entry), XBPS_REPOIDXMETA_SIG) != 0) {
xbps_dbg_printf(repo->xhp, xbps_dbg_printf(repo->xhp,
"%s: no signature of %s\n", repo->uri, XBPS_REPOIDX); "%s: no signature of %s\n", repo->uri, XBPS_REPOIDX_META);
return false; return false;
} }