ringaccount: prevent setCertificateStatus for contacts

setCertificateStatus could be used to override contact
policies.
For instance the client calls setCertificateStatus(ALLOWED)
for every ringid in the history, un-banning banned contacts.

Authorization policy for contacts is handled by the daemon,
so prevent overriding it for account contacts.

Change-Id: I52c7651a567c5ad8295f3a9ed714eb3caffdc7cb
Reviewed-by: Guillaume Roguez <guillaume.roguez@savoirfairelinux.com>
This commit is contained in:
Adrien Beraud
2017-05-01 16:51:32 -04:00
committed by Guillaume Roguez
parent 99d4971852
commit 11c13b61fb

View File

@ -2595,6 +2595,10 @@ RingAccount::findCertificate(const std::string& crt_id)
bool
RingAccount::setCertificateStatus(const std::string& cert_id, tls::TrustStore::PermissionStatus status)
{
if (contacts_.find(dht::InfoHash(cert_id)) != contacts_.end()) {
RING_ERR("Forbidden to set certificate status for existing contacts %s", cert_id.c_str());
return false;
}
findCertificate(cert_id);
bool done = trust_.setCertificateStatus(cert_id, status);
if (done)