[gnome-keyring/dbus-api] Figure out CKA_TOKEN for a PKCS#11 object based on manager.



commit c6984ff529116280817fecda73250b4027da9da7
Author: Stef Walter <stef memberwebs com>
Date:   Sat Jul 18 19:30:16 2009 +0000

    Figure out CKA_TOKEN for a PKCS#11 object based on manager.
    
    Instead of manually setting CKA_TOKEN as the 'permanent' property
    on an object, we automatically infer it from the manager that
    the token object is on.

 pkcs11/gck/gck-manager.c |    3 ---
 pkcs11/gck/gck-object.c  |   23 +++++------------------
 pkcs11/gck/gck-session.c |    5 -----
 3 files changed, 5 insertions(+), 26 deletions(-)
---
diff --git a/pkcs11/gck/gck-manager.c b/pkcs11/gck/gck-manager.c
index 2b305dc..1638b3e 100644
--- a/pkcs11/gck/gck-manager.c
+++ b/pkcs11/gck/gck-manager.c
@@ -407,9 +407,6 @@ add_object (GckManager *self, GckObject *object)
 		gck_object_set_handle (object, handle);
 	}
 
-	/* Make the object know about its token state */
-	g_object_set (object, "permanent", self->pv->for_token, NULL);
-
 	/* 
 	 * We don't ref the objects or anything. They're expected to 
 	 * unregister upon dispose.   
diff --git a/pkcs11/gck/gck-object.c b/pkcs11/gck/gck-object.c
index 928638e..b9fef0c 100644
--- a/pkcs11/gck/gck-object.c
+++ b/pkcs11/gck/gck-object.c
@@ -38,8 +38,7 @@ enum {
 	PROP_HANDLE,
 	PROP_MANAGER,
 	PROP_STORE,
-	PROP_UNIQUE,
-	PROP_PERMANENT
+	PROP_UNIQUE
 };
 
 enum {
@@ -59,7 +58,6 @@ struct _GckObjectPrivate {
 	GckManager *manager;
 	GckStore *store;
 	gchar *unique;
-	gboolean permanent;
 	GckObjectLifetime *lifetime;
 };
 
@@ -142,7 +140,9 @@ gck_object_real_get_attribute (GckObject *self, CK_ATTRIBUTE* attr)
 	case CKA_PRIVATE:
 		return gck_attribute_set_bool (attr, FALSE);
 	case CKA_TOKEN:
-		return gck_attribute_set_bool (attr, self->pv->permanent);
+		if (!self->pv->manager)
+			return gck_attribute_set_bool (attr, FALSE);
+		return gck_attribute_set_bool (attr, gck_manager_get_for_token (self->pv->manager));
 	case CKA_GNOME_UNIQUE:
 		if (self->pv->unique)
 			return gck_attribute_set_string (attr, self->pv->unique);
@@ -215,9 +215,7 @@ gck_object_real_create_attribute (GckObject *self, GckTransaction *transaction,
 		gck_attribute_consume (attr);
 		if (rv == CKR_OK) {
 			/* Must be a session object for an auto destruct */
-			if (self->pv->lifetime->timed_when >= 0 && self->pv->permanent)
-				rv = CKR_TEMPLATE_INCONSISTENT;
-			else
+			if (self->pv->lifetime->timed_when >= 0)
 				gck_transaction_add (transaction, self, start_callback, session);
 		}
 		if (rv != CKR_OK)
@@ -343,10 +341,6 @@ gck_object_set_property (GObject *obj, guint prop_id, const GValue *value,
 		g_return_if_fail (!self->pv->unique);
 		self->pv->unique = g_value_dup_string (value);
 		break;
-	case PROP_PERMANENT:
-		self->pv->permanent = g_value_get_boolean (value);
-		g_object_notify (G_OBJECT (self), "permanent");
-		break;
 	default:
 		G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, prop_id, pspec);
 		break;
@@ -372,9 +366,6 @@ gck_object_get_property (GObject *obj, guint prop_id, GValue *value,
 	case PROP_UNIQUE:
 		g_value_set_string (value, gck_object_get_unique (self));
 		break;
-	case PROP_PERMANENT:
-		g_value_set_boolean (value, self->pv->permanent);
-		break;
 	default:
 		G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, prop_id, pspec);
 		break;
@@ -416,10 +407,6 @@ gck_object_class_init (GckObjectClass *klass)
 	           g_param_spec_string ("unique", "Unique Identifer", "Machine unique identifier", 
 	                                NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
 	
-	g_object_class_install_property (gobject_class, PROP_PERMANENT,
-	           g_param_spec_boolean ("permanent", "Is Permanent Object", "Is permanent token object", 
-	                                 FALSE, G_PARAM_READWRITE));
-	
 	signals[NOTIFY_ATTRIBUTE] = g_signal_new ("notify-attribute", GCK_TYPE_OBJECT, 
 	                                G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET (GckObjectClass, notify_attribute),
 	                                NULL, NULL, g_cclosure_marshal_VOID__ULONG, 
diff --git a/pkcs11/gck/gck-session.c b/pkcs11/gck/gck-session.c
index a8055d4..334a770 100644
--- a/pkcs11/gck/gck-session.c
+++ b/pkcs11/gck/gck-session.c
@@ -791,11 +791,6 @@ gck_session_C_CreateObject (GckSession* self, CK_ATTRIBUTE_PTR template,
 		}
 	}
 	
-	if (!gck_transaction_get_failed (transaction)) {
-		g_object_set (object, "permanent", is_token, NULL);
-		gck_attributes_consume (attrs, n_attrs, CKA_TOKEN, G_MAXULONG);
-	}
-
 	/* Give the object a chance to create additional attributes */
 	for (i = 0; i < n_attrs && !gck_transaction_get_failed (transaction); ++i) {
 		if (!gck_attribute_consumed (&attrs[i]))



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]