|
|
@ -1162,7 +1162,7 @@ PEP_STATUS _myself(PEP_SESSION session, |
|
|
|
if (!session || !identity || EMPTYSTR(identity->address)) |
|
|
|
return PEP_ILLEGAL_VALUE; |
|
|
|
|
|
|
|
// this is leading to crashes otherwise |
|
|
|
// this leads to crashes otherwise |
|
|
|
|
|
|
|
if (!(identity->user_id && identity->user_id[0])) { |
|
|
|
free(identity->user_id); |
|
|
@ -1172,6 +1172,14 @@ PEP_STATUS _myself(PEP_SESSION session, |
|
|
|
return PEP_OUT_OF_MEMORY; |
|
|
|
} |
|
|
|
|
|
|
|
// Cache the input username, if there is one and it's not read_only |
|
|
|
char* cached_input_username = NULL; |
|
|
|
if (!read_only && identity->username) { |
|
|
|
cached_input_username = strdup(identity->username); |
|
|
|
if (!cached_input_username) |
|
|
|
return PEP_OUT_OF_MEMORY; |
|
|
|
} |
|
|
|
|
|
|
|
pEp_identity *stored_identity = NULL; |
|
|
|
char* revoked_fpr = NULL; |
|
|
|
bool valid_key_found = false; |
|
|
@ -1355,9 +1363,19 @@ PEP_STATUS _myself(PEP_SESSION session, |
|
|
|
// We want to set an identity in the DB even if a key isn't found, but we have to preserve the status if |
|
|
|
// it's NOT ok |
|
|
|
if (!read_only) { |
|
|
|
// set identity will not automatically set identity.username in the database, only |
|
|
|
// the person.username (user default). So we set it here, but will then force-set the name again if we |
|
|
|
// have to. |
|
|
|
PEP_STATUS set_id_status = set_identity(session, identity); |
|
|
|
if (set_id_status == PEP_STATUS_OK) |
|
|
|
set_id_status = set_as_pEp_user(session, identity); |
|
|
|
if (set_id_status == PEP_STATUS_OK && cached_input_username) { |
|
|
|
// Force-set input username |
|
|
|
set_id_status = force_set_identity_username(session, identity, cached_input_username); |
|
|
|
free(identity->username); |
|
|
|
identity->username = cached_input_username; |
|
|
|
cached_input_username = NULL; |
|
|
|
} |
|
|
|
|
|
|
|
status = (status == PEP_STATUS_OK ? set_id_status : status); |
|
|
|
} |
|
|
@ -1366,6 +1384,7 @@ pEp_free: |
|
|
|
free(default_own_id); |
|
|
|
free(revoked_fpr); |
|
|
|
free_identity(stored_identity); |
|
|
|
free(cached_input_username); |
|
|
|
return status; |
|
|
|
} |
|
|
|
|
|
|
|