gnome-keyring r1289 - in trunk: . daemon/pk daemon/pk/tests



Author: nnielsen
Date: Mon Sep  1 03:27:38 2008
New Revision: 1289
URL: http://svn.gnome.org/viewvc/gnome-keyring?rev=1289&view=rev

Log:
	* deamon/pk/gkr-pk-index.c:
	* daemon/pk/gkr-pk-index.h:
	* daemon/pk/gkr-pk-object.c:
	* daemon/pk/gkr-pk-object.h:
	* daemon/pk/gkr-pk-storage.c:
	* daemon/pk/tests/unit-test-pk-index.c:
	* daemon/pk/tests/unit-test-pk-object.c: Use the keyring item 
	display_name to store PK object labels in. 


Modified:
   trunk/ChangeLog
   trunk/daemon/pk/gkr-pk-index.c
   trunk/daemon/pk/gkr-pk-index.h
   trunk/daemon/pk/gkr-pk-object.c
   trunk/daemon/pk/gkr-pk-object.h
   trunk/daemon/pk/gkr-pk-storage.c
   trunk/daemon/pk/tests/unit-test-pk-index.c
   trunk/daemon/pk/tests/unit-test-pk-object.c

Modified: trunk/daemon/pk/gkr-pk-index.c
==============================================================================
--- trunk/daemon/pk/gkr-pk-index.c	(original)
+++ trunk/daemon/pk/gkr-pk-index.c	Mon Sep  1 03:27:38 2008
@@ -398,7 +398,7 @@
 	 *  - Encrypted indexes. It's not secure to store password 
 	 *    in clear text indexes.
 	 */
-	 
+	
 	return index->keyring->location && 
 	       !gkr_keyring_is_insecure (index->keyring); 
 }
@@ -539,7 +539,7 @@
 	return g_strdup (attr->value.string);
 }
 
-gchar*
+const gchar*
 gkr_pk_index_get_secret (GkrPkIndex *index, gkrconstid digest)
 {
 	GkrKeyringItem *item;
@@ -553,7 +553,24 @@
 	if (item == NULL)
 		return NULL;
 		
-	return gkr_secure_strdup (item->secret);	
+	return item->secret;	
+}
+
+const gchar*
+gkr_pk_index_get_label (GkrPkIndex *index, gkrconstid digest)
+{
+	GkrKeyringItem *item;
+	
+	if (!index)
+		index = gkr_pk_index_default ();
+	
+	g_return_val_if_fail (GKR_IS_PK_INDEX (index), NULL);
+	
+	item = find_item_for_digest (index, digest, FALSE);
+	if (item == NULL)
+		return NULL;
+	
+	return item->display_name;
 }
 
 guchar*
@@ -684,6 +701,34 @@
 	return write_string (index, digest, field, val);
 }
 
+gboolean
+gkr_pk_index_set_label (GkrPkIndex *index, gkrconstid digest, 
+                        const gchar *label)
+{
+	GkrKeyringItem *item;
+	
+	if (!index)
+		index = gkr_pk_index_default ();
+
+	g_return_val_if_fail (GKR_IS_PK_INDEX (index), FALSE);
+	
+	item = find_item_for_digest (index, digest, TRUE);
+	if (!item)
+		return FALSE;
+
+	/* Make sure it's actually changed */
+	if (string_equal (item->display_name, label))
+		return FALSE;
+	
+	g_free (item->display_name);
+	item->display_name = g_strdup (label);
+
+	if (!gkr_keyring_save_to_disk (index->keyring))
+		g_warning ("writing label: couldn't write index keyring to disk");
+	
+	return TRUE;	
+}
+
 gboolean 
 gkr_pk_index_set_secret (GkrPkIndex *index, gkrconstid digest, 
                          const gchar *val)
@@ -694,9 +739,10 @@
 		index = gkr_pk_index_default ();
 
 	g_return_val_if_fail (GKR_IS_PK_INDEX (index), FALSE);
+	g_return_val_if_fail (index->keyring, FALSE);
 	
 	/* Cannot store secrets in an insecure keyring. Caller should have checked this. */
-	if (val != NULL && !gkr_pk_index_allows_secrets (index)) {
+	if (val != NULL && index->keyring->location && !gkr_pk_index_allows_secrets (index)) {
 		g_warning ("gkr_pk_index_set_secret() called on an insecure keyring. Cannot "
 		           "store secrets in a text based or otherwise insecure keyring.");
 		return FALSE;

Modified: trunk/daemon/pk/gkr-pk-index.h
==============================================================================
--- trunk/daemon/pk/gkr-pk-index.h	(original)
+++ trunk/daemon/pk/gkr-pk-index.h	Mon Sep  1 03:27:38 2008
@@ -75,7 +75,9 @@
 gchar*              gkr_pk_index_get_string            (GkrPkIndex *index, gkrconstid digest,
                                                         const gchar *field);
 
-gchar*              gkr_pk_index_get_secret            (GkrPkIndex *index, gkrconstid digest);
+const gchar*        gkr_pk_index_get_label             (GkrPkIndex *index, gkrconstid digest);
+
+const gchar*        gkr_pk_index_get_secret            (GkrPkIndex *index, gkrconstid digest);
 
 guchar*             gkr_pk_index_get_binary            (GkrPkIndex *index, gkrconstid digest,
                                                         const gchar *field, gsize *n_data);
@@ -92,6 +94,9 @@
 gboolean            gkr_pk_index_set_string            (GkrPkIndex *index, gkrconstid digest,
                                                         const gchar *field, const gchar *val);
 
+gboolean            gkr_pk_index_set_label             (GkrPkIndex *index, gkrconstid digest,
+                                                        const gchar *label);
+
 gboolean            gkr_pk_index_set_secret            (GkrPkIndex *index, gkrconstid digest,
                                                         const gchar *secret);
 

Modified: trunk/daemon/pk/gkr-pk-object.c
==============================================================================
--- trunk/daemon/pk/gkr-pk-object.c	(original)
+++ trunk/daemon/pk/gkr-pk-object.c	Mon Sep  1 03:27:38 2008
@@ -858,7 +858,7 @@
 	g_return_val_if_fail (GKR_IS_PK_OBJECT (xobj), FALSE);
 	
 	return pv->orig_label != NULL || 
-	       gkr_pk_object_index_has_value (xobj, GKR_PK_INDEX_LABEL);
+	       gkr_pk_object_index_get_label (xobj);
 }
 
 const gchar*
@@ -871,7 +871,7 @@
 	
 	if (!pv->label) {
 		/* Try the label from the index */
-		pv->label = gkr_pk_object_index_get_string (xobj, GKR_PK_INDEX_LABEL);
+		pv->label = g_strdup (gkr_pk_object_index_get_label (xobj));
 				
 		/* Try any original label handed us by parsers */
 		if (!pv->label && pv->orig_label) 
@@ -908,7 +908,7 @@
 gkr_pk_object_set_label (GkrPkObject *xobj, const gchar *label)
 {
 	g_return_if_fail (GKR_IS_PK_OBJECT (xobj));
-	gkr_pk_object_index_set_string (xobj, "label", label);
+	gkr_pk_object_index_set_label (xobj, label);
 }
 
 /* -------------------------------------------------------------------
@@ -1001,6 +1001,22 @@
 	return gkr_pk_index_get_binary (index, object->digest, field, n_data);
 }
 
+const gchar*
+gkr_pk_object_index_get_label (GkrPkObject *object)
+{
+	GkrPkIndex *index = NULL;
+	
+	g_return_val_if_fail (GKR_IS_PK_OBJECT (object), NULL);
+	g_return_val_if_fail (object->digest, NULL);
+	
+	if (object->storage) {
+		g_return_val_if_fail (GKR_IS_PK_STORAGE (object->storage), NULL);
+		index = gkr_pk_storage_index (object->storage, object->location);
+	}
+	
+	return gkr_pk_index_get_label (index, object->digest);
+}
+
 void
 gkr_pk_object_index_set_boolean (GkrPkObject *object, const gchar *field,
                                  gboolean value)
@@ -1059,6 +1075,23 @@
 }
 
 void
+gkr_pk_object_index_set_label (GkrPkObject *object, const gchar *label)
+{
+	GkrPkIndex *index = NULL;
+	
+	g_return_if_fail (GKR_IS_PK_OBJECT (object));
+	g_return_if_fail (object->digest);
+	
+	if (object->storage) {
+		g_return_if_fail (GKR_IS_PK_STORAGE (object->storage));
+		index = gkr_pk_storage_index (object->storage, object->location);
+	}
+	
+	if (gkr_pk_index_set_label (index, object->digest, label))
+		gkr_pk_object_flush (object);
+}
+
+void
 gkr_pk_object_index_clear (GkrPkObject *object, const gchar *field)
 {
 	GkrPkIndex *index = NULL;

Modified: trunk/daemon/pk/gkr-pk-object.h
==============================================================================
--- trunk/daemon/pk/gkr-pk-object.h	(original)
+++ trunk/daemon/pk/gkr-pk-object.h	Mon Sep  1 03:27:38 2008
@@ -31,8 +31,6 @@
 
 G_BEGIN_DECLS
 
-#define GKR_PK_INDEX_LABEL              "label"
-
 #define GKR_PK_OBJECT_HANDLE_MASK       0x0FFFFFFF
 #define GKR_PK_OBJECT_IS_PERMANENT	0x10000000
 #define GKR_PK_OBJECT_IS_TEMPORARY	0x00000000
@@ -177,6 +175,8 @@
                                                       const gchar *field,
                                                       gsize *n_data);
 
+const gchar*        gkr_pk_object_index_get_label    (GkrPkObject *object);
+
 void                gkr_pk_object_index_set_boolean  (GkrPkObject *object,
                                                       const gchar *field,
                                                       gboolean value);
@@ -190,6 +190,9 @@
                                                       const guchar *data,
                                                       gsize n_data);
 
+void                gkr_pk_object_index_set_label    (GkrPkObject *object,
+                                                      const gchar *label);
+
 void                gkr_pk_object_index_clear        (GkrPkObject *object, 
                                                       const gchar *field);
 

Modified: trunk/daemon/pk/gkr-pk-storage.c
==============================================================================
--- trunk/daemon/pk/gkr-pk-storage.c	(original)
+++ trunk/daemon/pk/gkr-pk-storage.c	Mon Sep  1 03:27:38 2008
@@ -791,7 +791,7 @@
 		
 	/* See if we can find a valid password for this location */
 	if (st == 2) {
-		*result = gkr_pk_index_get_secret (index, digest);
+		*result = gkr_secure_strdup (gkr_pk_index_get_secret (index, digest));
 		if (*result != NULL)
 			return TRUE;
 		

Modified: trunk/daemon/pk/tests/unit-test-pk-index.c
==============================================================================
--- trunk/daemon/pk/tests/unit-test-pk-index.c	(original)
+++ trunk/daemon/pk/tests/unit-test-pk-index.c	Mon Sep  1 03:27:38 2008
@@ -89,6 +89,40 @@
 	CuAssert (cu, "get_binary returned wrong data", memcmp (data, DATA, DATA_L) == 0);
 }
 
+void unit_test_index_secret (CuTest *cu)
+{
+	gboolean ret;
+	const gchar *secret;
+	
+	ret = gkr_pk_index_set_secret (pk_index, object->digest, "my secret");
+	CuAssert (cu, "set_secret returned false", ret == TRUE);
+	
+	/* Setting same secret should return false */
+	ret = gkr_pk_index_set_secret (pk_index, object->digest, "my secret");
+	CuAssert (cu, "set_secret shouldn't return true", ret == FALSE);
+	
+	secret = gkr_pk_index_get_secret (pk_index, object->digest);
+	CuAssert (cu, "get_secret returned no data", secret != NULL);
+	CuAssert (cu, "get_secret returned wrong secret", strcmp (secret, "my secret") == 0);
+}
+
+void unit_test_index_label (CuTest *cu)
+{
+	gboolean ret;
+	const gchar *label;
+	
+	ret = gkr_pk_index_set_label (pk_index, object->digest, "my label");
+	CuAssert (cu, "set_label returned false", ret == TRUE);
+	
+	/* Setting same label should return false */
+	ret = gkr_pk_index_set_label (pk_index, object->digest, "my label");
+	CuAssert (cu, "set_label shouldn't return true", ret == FALSE);
+	
+	label = gkr_pk_index_get_label (pk_index, object->digest);
+	CuAssert (cu, "get_label returned no data", label != NULL);
+	CuAssert (cu, "get_label returned wrong label", strcmp (label, "my label") == 0);
+}
+
 void unit_test_index_string (CuTest *cu)
 {
 	gchar *str;

Modified: trunk/daemon/pk/tests/unit-test-pk-object.c
==============================================================================
--- trunk/daemon/pk/tests/unit-test-pk-object.c	(original)
+++ trunk/daemon/pk/tests/unit-test-pk-object.c	Mon Sep  1 03:27:38 2008
@@ -90,7 +90,7 @@
 	g_printerr ("ORIG LABEL: %s\n", label);
 	
 	/* After setting a label in index, should return that */
-	gkr_pk_object_index_set_string (object_1, GKR_PK_INDEX_LABEL, "Index Label");
+	gkr_pk_object_index_set_label (object_1, "Index Label");
 	label = gkr_pk_object_get_label (object_1);
 	CuAssert (cu, "no label returned after index label", label != NULL);
 	CuAssert (cu, "wrong label returned after index label", strcmp (label, "Index Label") == 0);



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