|
|
|
@ -145,66 +145,67 @@ DYNAMIC_API PEP_STATUS update_identity(
|
|
|
|
|
if (status == PEP_OUT_OF_MEMORY)
|
|
|
|
|
goto exit_free;
|
|
|
|
|
|
|
|
|
|
/* ALWAYS elect pubkey */
|
|
|
|
|
/* We elect a pubkey first in case there's no acceptable stored fpr */
|
|
|
|
|
status = elect_pubkey(session, identity);
|
|
|
|
|
if (status != PEP_STATUS_OK)
|
|
|
|
|
goto exit_free;
|
|
|
|
|
|
|
|
|
|
_did_elect_new_key = 1; /*???*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (stored_identity) {
|
|
|
|
|
PEP_comm_type _comm_type_key;
|
|
|
|
|
status = get_key_rating(session, stored_identity->fpr, &_comm_type_key);
|
|
|
|
|
assert(status != PEP_OUT_OF_MEMORY);
|
|
|
|
|
if (status == PEP_OUT_OF_MEMORY)
|
|
|
|
|
goto exit_free;
|
|
|
|
|
|
|
|
|
|
if (EMPTYSTR(identity->username)) {
|
|
|
|
|
free(identity->username);
|
|
|
|
|
identity->username = strdup(stored_identity->username);
|
|
|
|
|
assert(identity->username);
|
|
|
|
|
if (identity->username == NULL){
|
|
|
|
|
status = PEP_OUT_OF_MEMORY;
|
|
|
|
|
|
|
|
|
|
bool dont_use_fpr = true;
|
|
|
|
|
status = blacklist_is_listed(session, stored_identity->fpr, &dont_use_fpr);
|
|
|
|
|
if (status != PEP_STATUS_OK)
|
|
|
|
|
dont_use_fpr = true;
|
|
|
|
|
|
|
|
|
|
if (dont_use_fpr && !(EMPTYSTR(identity->fpr))) {
|
|
|
|
|
/* elected pubkey */
|
|
|
|
|
if (status != PEP_STATUS_OK)
|
|
|
|
|
goto exit_free;
|
|
|
|
|
status = blacklist_is_listed(session, identity->fpr, &dont_use_fpr);
|
|
|
|
|
if (dont_use_fpr) {
|
|
|
|
|
free(identity->fpr);
|
|
|
|
|
identity->fpr = NULL;
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
_did_elect_new_key = 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (EMPTYSTR(identity->fpr)) {
|
|
|
|
|
else {
|
|
|
|
|
identity->fpr = strdup(stored_identity->fpr);
|
|
|
|
|
assert(identity->fpr);
|
|
|
|
|
if (identity->fpr == NULL)
|
|
|
|
|
return PEP_OUT_OF_MEMORY;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Ok, at this point, we either have a non-blacklisted fpr we can work */
|
|
|
|
|
/* with, or we've got nada. */
|
|
|
|
|
if (!EMPTYSTR(identity->fpr)) {
|
|
|
|
|
status = get_key_rating(session, identity->fpr, &_comm_type_key);
|
|
|
|
|
assert(status != PEP_OUT_OF_MEMORY);
|
|
|
|
|
if (status == PEP_OUT_OF_MEMORY)
|
|
|
|
|
goto exit_free;
|
|
|
|
|
status = get_trust(session, identity);
|
|
|
|
|
if (status == PEP_OUT_OF_MEMORY)
|
|
|
|
|
goto exit_free;
|
|
|
|
|
if (_comm_type_key < PEP_ct_unconfirmed_encryption) {
|
|
|
|
|
PEP_STATUS status = elect_pubkey(session, identity);
|
|
|
|
|
if (status != PEP_STATUS_OK)
|
|
|
|
|
goto exit_free;
|
|
|
|
|
|
|
|
|
|
_did_elect_new_key = 1;
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
identity->comm_type = _comm_type_key;
|
|
|
|
|
} else{
|
|
|
|
|
identity->comm_type = stored_identity->comm_type;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else /* !EMPTYSTR(identity->fpr) */ {
|
|
|
|
|
if (_same_fpr(identity->fpr,
|
|
|
|
|
strlen(identity->fpr),
|
|
|
|
|
stored_identity->fpr,
|
|
|
|
|
strlen(stored_identity->fpr))) {
|
|
|
|
|
if (_comm_type_key < PEP_ct_unconfirmed_encryption) {
|
|
|
|
|
if (identity->comm_type == PEP_ct_unknown) {
|
|
|
|
|
identity->comm_type = _comm_type_key;
|
|
|
|
|
}else{
|
|
|
|
|
identity->comm_type = stored_identity->comm_type;
|
|
|
|
|
if (identity->comm_type == PEP_ct_unknown) {
|
|
|
|
|
identity->comm_type = _comm_type_key;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
status = get_trust(session, identity);
|
|
|
|
|
assert(status != PEP_OUT_OF_MEMORY);
|
|
|
|
|
if (status == PEP_OUT_OF_MEMORY)
|
|
|
|
|
goto exit_free;
|
|
|
|
|
if (identity->comm_type < stored_identity->comm_type)
|
|
|
|
|
identity->comm_type = PEP_ct_unknown;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (EMPTYSTR(identity->username)) {
|
|
|
|
|
free(identity->username);
|
|
|
|
|
identity->username = strdup(stored_identity->username);
|
|
|
|
|
assert(identity->username);
|
|
|
|
|
if (identity->username == NULL){
|
|
|
|
|
status = PEP_OUT_OF_MEMORY;
|
|
|
|
|
goto exit_free;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -219,6 +220,7 @@ DYNAMIC_API PEP_STATUS update_identity(
|
|
|
|
|
else /* stored_identity == NULL */ {
|
|
|
|
|
identity->flags = 0;
|
|
|
|
|
|
|
|
|
|
/* Work with the elected key from above */
|
|
|
|
|
if (!EMPTYSTR(identity->fpr)) {
|
|
|
|
|
PEP_comm_type _comm_type_key;
|
|
|
|
|
|
|
|
|
@ -229,11 +231,6 @@ DYNAMIC_API PEP_STATUS update_identity(
|
|
|
|
|
|
|
|
|
|
identity->comm_type = _comm_type_key;
|
|
|
|
|
}
|
|
|
|
|
else /* EMPTYSTR(identity->fpr) */ {
|
|
|
|
|
PEP_STATUS status = elect_pubkey(session, identity);
|
|
|
|
|
if (status != PEP_STATUS_OK)
|
|
|
|
|
goto exit_free;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
status = PEP_STATUS_OK;
|
|
|
|
|