summaryrefslogtreecommitdiff
path: root/pkcs11/secret-store
diff options
context:
space:
mode:
authorStef Walter <stef@memberwebs.com>2010-06-12 17:38:27 +0000
committerStef Walter <stef@memberwebs.com>2010-06-12 21:22:07 +0000
commit92852897d420071033557bf77123a447c45b0ea1 (patch)
treee2c553b3a2661ac0a9aca11f6a2076082072f239 /pkcs11/secret-store
parent2954ca8774c95bd2a033b3d62a64ce78c1a2fe93 (diff)
downloadgnome-keyring-92852897d420071033557bf77123a447c45b0ea1.tar.gz
Implement auto unlock in wrap-layer.
* Including tests and necessary infrastructure.
Diffstat (limited to 'pkcs11/secret-store')
-rw-r--r--pkcs11/secret-store/gkm-secret-collection.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/pkcs11/secret-store/gkm-secret-collection.c b/pkcs11/secret-store/gkm-secret-collection.c
index 04e7718c..970da454 100644
--- a/pkcs11/secret-store/gkm-secret-collection.c
+++ b/pkcs11/secret-store/gkm-secret-collection.c
@@ -398,12 +398,23 @@ static CK_RV
gkm_secret_collection_get_attribute (GkmObject *base, GkmSession *session, CK_ATTRIBUTE_PTR attr)
{
GkmSecretCollection *self = GKM_SECRET_COLLECTION (base);
+ const gchar *identifier;
+ GkmSecret *master;
switch (attr->type) {
case CKA_CLASS:
return gkm_attribute_set_ulong (attr, CKO_G_COLLECTION);
case CKA_G_CREDENTIAL_TEMPLATE:
return gkm_attribute_set_template (attr, self->template);
+ case CKA_G_LOGIN_COLLECTION:
+ identifier = gkm_secret_object_get_identifier (GKM_SECRET_OBJECT (base));
+ g_return_val_if_fail (identifier, CKR_GENERAL_ERROR);
+ return gkm_attribute_set_bool (attr, g_str_equal (identifier, "login"));
+ case CKA_TRUSTED:
+ if (self->sdata)
+ return gkm_attribute_set_bool (attr, CK_FALSE);
+ master = gkm_secret_data_get_master (self->sdata);
+ return gkm_attribute_set_bool (attr, (master && !gkm_secret_is_trivially_weak (master)));
}
return GKM_OBJECT_CLASS (gkm_secret_collection_parent_class)->get_attribute (base, session, attr);
}