diff options
-rw-r--r-- | bpkg/manifest | 3 | ||||
-rw-r--r-- | bpkg/manifest.cxx | 32 | ||||
-rw-r--r-- | tests/manifest/repositories | 32 |
3 files changed, 61 insertions, 6 deletions
diff --git a/bpkg/manifest b/bpkg/manifest index a6eeb05..d55e714 100644 --- a/bpkg/manifest +++ b/bpkg/manifest @@ -541,6 +541,7 @@ namespace bpkg butl::optional<email_type> email; butl::optional<std::string> summary; butl::optional<std::string> description; + butl::optional<std::string> certificate; // Return the effective role of the repository. If the role is not // explicitly specified (see the role member above), then calculate @@ -548,7 +549,7 @@ namespace bpkg // empty, then the effective role is base. Otherwise -- prerequisite. // If the role is specified, then verify that it is consistent with // the location value (that is, base if the location is empty and - // prerequisite or complete if not) and return that. Otherwise, + // prerequisite or complement if not) and return that. Otherwise, // throw std::logic_error. // repository_role diff --git a/bpkg/manifest.cxx b/bpkg/manifest.cxx index 3f937a8..b94c2c6 100644 --- a/bpkg/manifest.cxx +++ b/bpkg/manifest.cxx @@ -1704,8 +1704,9 @@ namespace bpkg // Canonical name <prefix>/<path> part. // string cp ( - strip_path (path_, remote () ? strip_mode::component : strip_mode::path). - posix_string ()); + strip_path ( + path_, remote () ? strip_mode::component : strip_mode::path). + posix_string ()); // Note: allow empty paths (e.g., http://stable.cppget.org/1/). // @@ -1844,6 +1845,16 @@ namespace bpkg description = move (v); } + else if (n == "certificate") + { + if (certificate) + bad_name ("certificate redefinition"); + + if (v.empty ()) + bad_value ("empty certificate"); + + certificate = move (v); + } else if (!iu) bad_name ("unknown name '" + n + "' in repository manifest"); } @@ -1869,6 +1880,9 @@ namespace bpkg if (description) bad_value ("description not allowed"); + + if (certificate) + bad_value ("certificate not allowed"); } } @@ -1927,6 +1941,14 @@ namespace bpkg s.next ("description", *description); } + if (certificate) + { + if (!b) + bad_value ("certificate not allowed"); + + s.next ("certificate", *certificate); + } + s.next ("", ""); // End of manifest. } @@ -1984,9 +2006,9 @@ namespace bpkg // Web interface URL path part. // - // It is important to call strip_path() before appending the relative path. - // Otherwise the effective URL for the path ./../../.. and the repository - // location http://a.com/foo/pkg/1/math will wrongly be + // It is important to call strip_path() before appending the relative + // path. Otherwise the effective URL for the path ./../../.. and the + // repository location http://a.com/foo/pkg/1/math will wrongly be // http://a.com/foo/pkg instead of http://a.com. // dir_path ipath ( diff --git a/tests/manifest/repositories b/tests/manifest/repositories index bae9c86..06eb8a0 100644 --- a/tests/manifest/repositories +++ b/tests/manifest/repositories @@ -10,3 +10,35 @@ email: repoman@cppget.org; General mailing list. summary: General C++ package repository description: This is the awesome C++ package repository full of exciting\ stuff. +certificate: \ +-----BEGIN CERTIFICATE----- +MIIFLzCCAxegAwIBAgIJAJ71rMp8mDy1MA0GCSqGSIb3DQEBCwUAMDMxFzAVBgNV +BAoMDkNvZGUgU3ludGhlc2lzMRgwFgYDVQQDDA9uYW1lOmNwcGdldC5vcmcwHhcN +MTYwNDA4MTc1NTUwWhcNMTcwNDA4MTc1NTUwWjAzMRcwFQYDVQQKDA5Db2RlIFN5 +bnRoZXNpczEYMBYGA1UEAwwPbmFtZTpjcHBnZXQub3JnMIICIjANBgkqhkiG9w0B +AQEFAAOCAg8AMIICCgKCAgEAwj7lwxkr19ygfNIzQsiKkmyyRG0c5AwMrwvldEk7 +2UIwz5kNb04zveUzQcfNFhau60+xC980Y4TKA4/ScfinyaDfp1I3pmiv4OSDUoBw +9e8a+4Jyo5fuiAXoAYaQyAdwvH1mIbYq1ObRfKW2MTrUXp/HRJAWHHBnv3VmCYBZ +dllY1hasA+SBDMBv6iTXkKUIfEdNDk8cjUR3FjxaefIdip9pHR3G0y4iWctS1drq +AKLE1J0KIJyPsJCvoZnzIeePaCNL/UtRup9mYi2vxHHFD4Ml5Bbp+gE6vq5XhcQz +LeCcGYKB3UjVWuszcpFIoHACw9ja2JUumbTiclUDgLBk8WXJvLjOCNLp9i/MKQws +p5CDfrNe2P6u63ZmtW2v0Qpj/6b6JQmqJaMgHQdDEBUFO3bjwm7yyXyvEjj/EAEJ +pGziWZjan5NKGgKCX1JChQJloMHhzr42YMvceWTMJjAr07Es9vCsCS2KPvAKY7Mv +yewAyK9ucFRDObZVuaFjU+WUTXB1munwO3Jso56EMxeFvu+W1B+m49XS3k/TlBvF +HGnkiSaMwLEJvgFVgQPpG2gD39WDFqX28pWdLL4hM+hXUfdeH0OdXfq66CLu7P8d +cgkZdHRs5UauxLzm1Qo06aLsm2HXrfDnmsd5ENi7RkiFMx1aLh3/cjZD0uHndQUC +LEcCAwEAAaNGMEQwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsGAQUF +BwMDMBoGA1UdEQQTMBGBD2luZm9AY3BwZ2V0Lm9yZzANBgkqhkiG9w0BAQsFAAOC +AgEAHLfv2w82bBMgDgsRX8GU/3eK6CnyfRu4Auto1XjyHCrD6qcIdmebC0hihpSg +5xSlfVwjPRWBmg3z5/K8ln5jM6KKiWHd47OCfx+DW7wbesq2+6lS1btXpRR2pv7j +zG+41Cncu/xVNs9F4CQluVn5xyWFVDUxQfkQqAE46EbkjAmq42y+1ZQnq2Zm47Wr +iMRXQtg1yx7Fs2EpVU+sbW4ImuXgv0YbyYbI1lPhvmx8rIL6lybN3evEfIj7crh7 +5abWPDZzA+1aNL5tiaSNrn3nS/BfJyEYhGMyy0bsekPZiaqGB1q/mgv2rmR/2SRL +Tx+T7sthy/IHTOUbDTY0lUhjc6thQMncgGTaD4TC3QaXhdLWzO9XTh0K7U8BOMwh +wppr1G5aTXY0PUB0+Hs+IQZ4mVfBvKO0Wn6GgoDAs/mW9qvbWP3ZnpdvhB52a49P +g07JQ+R0QgBNQY7t0lT0mOpAPx79Dwc5R8jQCkx4gTr1bWtgyCvza+gpTgUQDOH5 +nawOIIDOnRv4heFdvgfEQs2oKa3X4bM+BsgOx7OTvnWCzJy0IXo0uBbcTrMv9Z62 ++KVwnghQdpURRnUpomt03cTwjqVJVrq287owGv8qqnuGcTTi1SgzNNYREFoljY58 +CCj4yYvTUzXjcAUXaNC5YNw3JEQp8vmciuJwhyUkbifLrHU= +-----END CERTIFICATE----- +\ |