Committing to move to proper branch

doc_update_sequoia
Krista Bennett 5 years ago
parent a69d49bc38
commit a0aa227b72

@ -892,14 +892,15 @@ PEP_STATUS _own_identities_retrieve(
sqlite3_column_text(session->own_identities_retrieve, 0);
fpr = (const char *)
sqlite3_column_text(session->own_identities_retrieve, 1);
user_id = PEP_OWN_USERID;
username = (const char *)
user_id = (const char *)
sqlite3_column_text(session->own_identities_retrieve, 2);
username = (const char *)
sqlite3_column_text(session->own_identities_retrieve, 3);
comm_type = PEP_ct_pEp;
lang = (const char *)
sqlite3_column_text(session->own_identities_retrieve, 3);
sqlite3_column_text(session->own_identities_retrieve, 4);
flags = (unsigned int)
sqlite3_column_int(session->own_identities_retrieve, 4);
sqlite3_column_int(session->own_identities_retrieve, 5);
pEp_identity *ident = new_identity(address, fpr, user_id, username);
if (!ident)
@ -1043,24 +1044,70 @@ DYNAMIC_API PEP_STATUS set_own_key(
fpr && fpr[0]
))
return PEP_ILLEGAL_VALUE;
// First see if we have it in own identities already, AND we retrieve
// our own user_id
pEp_identity* my_id = NULL;
identity_list* my_identities = NULL;
char* my_user_id = NULL;
status = own_identities_retrieve(session, &my_identities);
sqlite3_reset(session->set_own_key);
sqlite3_bind_text(session->set_own_key, 1, address, -1, SQLITE_STATIC);
sqlite3_bind_text(session->set_own_key, 2, fpr, -1, SQLITE_STATIC);
if (status == PEP_STATUS_OK) {
if (my_identities) {
if (!(my_identities->ident && my_identities->ident->user_id))
return PEP_ILLEGAL_VALUE;
int result;
result = sqlite3_step(session->set_own_key);
switch (result) {
case SQLITE_DONE:
status = PEP_STATUS_OK;
break;
my_user_id = strdup(my_identities->ident->user_id);
if (!my_user_id)
return PEP_OUT_OF_MEMORY;
default:
status = PEP_UNKNOWN_ERROR;
}
// Probably cheaper than all the strcmps if there are many,
// plus this avoids the capitalisation and . problems:
status = get_identity(session, my_user_id, address, &my_id);
if (status == PEP_STATUS_OK && my_id) {
if (my_id->fpr && strcasecmp(my_id->fpr, fpr) == 0)) {
// We're done. It was already here.
// FIXME: Do we check trust/revocation/?
goto pep_free;
}
}
// Otherwise, we see if there's a binding for this user_id/key
// in the trust DB
// If there's an id w/ user_id + address
if (my_id) {
free(my_id->fpr);
my_id->fpr = my_user_id;
my_user_id->comm_type = PEP_ct_pEp;
}
else { // Else, we need a new identity
status = new_identity(session, address, fpr, my_user_id, NULL, &my_id);
if (status != PEP_STATUS_OK)
goto pep_free;
my_user_id->me = true;
my_user_id->comm_type = PEP_ct_pEp;
}
}
else {
// I think the prerequisite should be that at least one own identity
// already in the DB, so REALLY look at this.
// status = new_identity(session, address, fpr, "PEP_OWN_USERID", NULL);
// my_user_id->me = true;
// my_user_id->comm_type = PEP_ct_pEp;
return PEP_CANNOT_FIND_IDENTITY;
}
status = set_identity(session, my_id);
}
sqlite3_reset(session->set_own_key);
pep_free:
free(my_id);
free(my_user_id);
return status;
}

@ -174,23 +174,17 @@ static const char *sql_blacklist_retrieve =
// Own keys
// FIXME: PEP_OWN_USERID
// We only care if it's 0 or non-zero
static const char *sql_own_key_is_listed =
"select count(*) from ("
" select main_key_id from person "
" where main_key_id = upper(replace(?1,' ',''))"
" and id = '" PEP_OWN_USERID "' "
" union "
" select main_key_id from identity "
" where main_key_id = upper(replace(?1,' ',''))"
" and user_id = '" PEP_OWN_USERID "' "
" union "
" select fpr from own_keys "
" where fpr = upper(replace(?1,' ',''))"
" );";
" select fpr from trust"
" join identity on id = identity.user_id"
" where fpr = upper(replace(?1,' ',''))"
" and identity.is_own = 1;"
");";
static const char *sql_own_identities_retrieve =
"select address, fpr, username, "
"select address, fpr, username, user_id, "
" lang, identity.flags | pgp_keypair.flags"
" from identity"
" join person on id = identity.user_id"
@ -200,18 +194,16 @@ static const char *sql_own_identities_retrieve =
" where identity.is_own = 1"
" and (identity.flags & ?1) = 0;";
// FIXME: PEP_OWN_USERID
static const char *sql_own_keys_retrieve =
"select fpr from own_keys"
" natural join identity"
" where (identity.flags & ?1) = 0;";
"select fpr from trust"
" join identity on id = identity.user_id"
" where identity.is_own = 1"
// FIXME: PEP_OWN_USERID
static const char *sql_set_own_key =
"insert or replace into own_keys (address, user_id, fpr)"
" values (?1, '" PEP_OWN_USERID "', upper(replace(?2,' ','')));";
// Sequence
static const char *sql_sequence_value1 =
"insert or replace into sequences (name, value, own) "

@ -151,6 +151,7 @@ struct _pEpSession {
// Own keys
sqlite3_stmt *own_key_is_listed;
sqlite3_stmt *own_identities_retrieve;
sqlite3_stmt *own_userid_by_address;
sqlite3_stmt *own_keys_retrieve;
sqlite3_stmt *set_own_key;

Loading…
Cancel
Save