summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharlie Brej <cbrej@cs.man.ac.uk>2010-08-03 16:06:26 +0100
committerCharlie Brej <cbrej@cs.man.ac.uk>2010-08-03 16:06:26 +0100
commit1bc0f2acef117f909d93793fb5c32c15f15b0088 (patch)
tree05a9b719630d850613d1b5e906231057c9ed45e2
parent31b55d05a859f8c9e86306ab240dcf3078ff70f4 (diff)
Add user agent to tidbits
-rw-r--r--src/libtidbit/tidbit-key.c3
-rw-r--r--src/libtidbit/tidbit-key.h5
-rw-r--r--src/libtidbit/tidbit-record.c18
3 files changed, 17 insertions, 9 deletions
diff --git a/src/libtidbit/tidbit-key.c b/src/libtidbit/tidbit-key.c
index 157055a..3c0d51f 100644
--- a/src/libtidbit/tidbit-key.c
+++ b/src/libtidbit/tidbit-key.c
@@ -27,7 +27,7 @@
#include "tidbit.h"
#include "tidbit-key.h"
-PtrTidbitKey tidbit_key_get (char* application) //FIXME make/get a real key
+PtrTidbitKey tidbit_key_get (char* application, char* agent) //FIXME make/get a real key
{
GnomeKeyringPasswordSchema my_schema = {
@@ -44,6 +44,7 @@ PtrTidbitKey tidbit_key_get (char* application) //FIXME make/get a real key
PtrTidbitKey key = g_new(TidbitKey, 1);
key->ref_count = 1;
+ key->agent = g_strdup(agent);
GnomeKeyringResult key_result = gnome_keyring_find_password_sync (&my_schema, &raw_pem,
"application", application,
diff --git a/src/libtidbit/tidbit-key.h b/src/libtidbit/tidbit-key.h
index 6cf5969..ce59b25 100644
--- a/src/libtidbit/tidbit-key.h
+++ b/src/libtidbit/tidbit-key.h
@@ -31,14 +31,15 @@ struct _TidbitKey{
int ref_count;
int size;
char* public_key_string;
+ char* agent;
TidbitKeyType type;
union {
RSA *rsa;
- DSA *dsa;
+ DSA *dsa; //FIXME Add differentiantion and decoding DSA
} data;
};
-PtrTidbitKey tidbit_key_get (char* application);
+PtrTidbitKey tidbit_key_get (char* application, char* agent);
void tidbit_key_ref (PtrTidbitKey key);
void tidbit_key_unref (PtrTidbitKey key);
char* tidbit_key_sign_data (PtrTidbitKey key, char* data);
diff --git a/src/libtidbit/tidbit-record.c b/src/libtidbit/tidbit-record.c
index 2af6944..58f5d46 100644
--- a/src/libtidbit/tidbit-record.c
+++ b/src/libtidbit/tidbit-record.c
@@ -41,9 +41,7 @@
#define TIDBIT_RECORD_ELEMENT_KEY_CHAR_IS_VALID(_chr) (((_chr) >= 'a' && (_chr) <= 'z') || (_chr) == '_')
#define TIDBIT_RECORD_ELEMENT_VALUE_CHAR_IS_VALID(_chr) ((_chr) >= 0x20)
-#define TIDBIT_RECORD_HEADER_V0_1 "TIDBIT/0.1"
-
-#define TIDBIT_RECORD_HEADER TIDBIT_RECORD_HEADER_V0_1
+#define TIDBIT_RECORD_HEADER "TIDBIT/0.1; libtidbit/0.1"
static PtrTidbitRecord tidbit_record_new_raw (void)
{
@@ -120,7 +118,7 @@ void tidbit_record_sign (PtrTidbitRecord record, PtrTidbitKey key)
g_assert(record->status == TIDBIT_RECORD_STATUS_NEW);
record->user_name = g_strdup(key->public_key_string); //FIXME use function
GString* rec_str = g_string_sized_new (TIDBIT_RECORD_MAX_SIZE);
- g_string_append (rec_str, TIDBIT_RECORD_HEADER "\n");
+ g_string_append_printf (rec_str, TIDBIT_RECORD_HEADER"; %s\n", key->agent);
g_string_append_printf (rec_str, TIDBIT_RECORD_ELEMENT_KEY_USERKEY TIDBIT_RECORD_ELEMENT_SEPARATOR "%s\n", record->user_name);
g_string_append_printf (rec_str, TIDBIT_RECORD_ELEMENT_KEY_TABLE TIDBIT_RECORD_ELEMENT_SEPARATOR "%s\n", record->table_name);
@@ -182,8 +180,16 @@ PtrTidbitRecord tidbit_record_from_raw (char* raw)
PtrTidbitRecord record = tidbit_record_new_raw ();
record->raw = g_strdup(raw);
- g_str_has_prefix(data, TIDBIT_RECORD_HEADER "\n");
- data += strlen(TIDBIT_RECORD_HEADER "\n");
+ if (!g_str_has_prefix(data, "TIDBIT"))
+ return record;
+ data += strlen("TIDBIT");
+ while (*data){
+ if (*data == '\n'){
+ data++;
+ break;
+ }
+ data++;
+ }
if (!tidbit_record_extract_pair_from_raw (data, &data, &key, &value))
return record;