diff options
Diffstat (limited to 'dbus/dbus-keyring.c')
-rw-r--r-- | dbus/dbus-keyring.c | 136 |
1 files changed, 68 insertions, 68 deletions
diff --git a/dbus/dbus-keyring.c b/dbus/dbus-keyring.c index 6dc1e129..21bde3a5 100644 --- a/dbus/dbus-keyring.c +++ b/dbus/dbus-keyring.c @@ -4,7 +4,7 @@ * Copyright (C) 2003, 2004 Red Hat Inc. * * Licensed under the Academic Free License version 2.1 - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -14,7 +14,7 @@ * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA @@ -96,14 +96,14 @@ typedef struct * as unix timestamp. signed long * matches struct timeval. */ - + DBusString secret; /**< the actual key */ } DBusKey; /** * @brief Internals of DBusKeyring. - * + * * DBusKeyring internals. DBusKeyring is an opaque object, it must be * used via accessor functions. */ @@ -126,7 +126,7 @@ _dbus_keyring_new (void) keyring = dbus_new0 (DBusKeyring, 1); if (keyring == NULL) goto out_0; - + if (!_dbus_string_init (&keyring->directory)) goto out_1; @@ -135,7 +135,7 @@ _dbus_keyring_new (void) if (!_dbus_string_init (&keyring->filename_lock)) goto out_3; - + keyring->refcount = 1; keyring->keys = NULL; keyring->n_keys = 0; @@ -161,7 +161,7 @@ free_keys (DBusKey *keys, int i; /* should be safe for args NULL, 0 */ - + i = 0; while (i < n_keys) { @@ -197,7 +197,7 @@ static dbus_bool_t _dbus_keyring_lock (DBusKeyring *keyring) { int n_timeouts; - + n_timeouts = 0; while (n_timeouts < MAX_LOCK_TIMEOUTS) { @@ -212,7 +212,7 @@ _dbus_keyring_lock (DBusKeyring *keyring) dbus_error_free (&error); _dbus_sleep_milliseconds (LOCK_TIMEOUT_MILLISECONDS); - + ++n_timeouts; } @@ -240,7 +240,7 @@ _dbus_keyring_lock (DBusKeyring *keyring) return FALSE; } } - + return TRUE; } @@ -269,7 +269,7 @@ find_key_by_id (DBusKey *keys, { if (keys[i].id == id) return &keys[i]; - + ++i; } @@ -291,7 +291,7 @@ add_new_key (DBusKey **keys_p, int n_keys; _DBUS_ASSERT_ERROR_IS_CLEAR (error); - + if (!_dbus_string_init (&bytes)) { dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL); @@ -301,10 +301,10 @@ add_new_key (DBusKey **keys_p, keys = *keys_p; n_keys = *n_keys_p; retval = FALSE; - + /* Generate an integer ID and then the actual key. */ retry: - + if (!_dbus_generate_random_bytes (&bytes, 4)) { dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL); @@ -312,7 +312,7 @@ add_new_key (DBusKey **keys_p, } s = (const unsigned char*) _dbus_string_get_const_data (&bytes); - + id = s[0] | (s[1] << 8) | (s[2] << 16) | (s[3] << 24); if (id < 0) id = - id; @@ -327,7 +327,7 @@ add_new_key (DBusKey **keys_p, } _dbus_verbose ("Creating key with ID %d\n", id); - + #define KEY_LENGTH_BYTES 24 _dbus_string_set_length (&bytes, 0); if (!_dbus_generate_random_bytes (&bytes, KEY_LENGTH_BYTES)) @@ -355,7 +355,7 @@ add_new_key (DBusKey **keys_p, } _dbus_get_current_time (×tamp, NULL); - + keys[n_keys-1].id = id; keys[n_keys-1].creation_time = timestamp; if (!_dbus_string_move (&bytes, 0, @@ -367,12 +367,12 @@ add_new_key (DBusKey **keys_p, n_keys -= 1; goto out; } - + retval = TRUE; - + out: *n_keys_p = n_keys; - + _dbus_string_free (&bytes); return retval; } @@ -407,10 +407,10 @@ _dbus_keyring_reload (DBusKeyring *keyring, DBusError tmp_error; _DBUS_ASSERT_ERROR_IS_CLEAR (error); - + if (!_dbus_check_dir_is_private_to_user (&keyring->directory, error)) return FALSE; - + if (!_dbus_string_init (&contents)) { dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL); @@ -423,14 +423,14 @@ _dbus_keyring_reload (DBusKeyring *keyring, _dbus_string_free (&contents); return FALSE; } - + keys = NULL; n_keys = 0; retval = FALSE; have_lock = FALSE; _dbus_get_current_time (&now, NULL); - + if (add_new) { if (!_dbus_keyring_lock (keyring)) @@ -444,8 +444,9 @@ _dbus_keyring_reload (DBusKeyring *keyring, } dbus_error_init (&tmp_error); - if (!_dbus_file_get_contents (&contents, + if (!_dbus_file_get_contents (&contents, &keyring->filename, + NULL, &tmp_error)) { _dbus_verbose ("Failed to load keyring file: %s\n", @@ -477,7 +478,7 @@ _dbus_keyring_reload (DBusKeyring *keyring, /* Don't load more than the max. */ if (n_keys >= (add_new ? MAX_KEYS_IN_FILE - 1 : MAX_KEYS_IN_FILE)) break; - + next = 0; if (!_dbus_string_parse_int (&line, 0, &val, &next)) { @@ -490,11 +491,11 @@ _dbus_keyring_reload (DBusKeyring *keyring, _dbus_verbose ("invalid secret key ID at start of line\n"); continue; } - + id = val; _dbus_string_skip_blank (&line, next, &next); - + if (!_dbus_string_parse_int (&line, next, ×tamp, &next)) { _dbus_verbose ("could not parse secret key timestamp\n"); @@ -509,7 +510,7 @@ _dbus_keyring_reload (DBusKeyring *keyring, now - timestamp, timestamp, now); continue; } - + _dbus_string_skip_blank (&line, next, &next); len = _dbus_string_get_length (&line); @@ -519,7 +520,7 @@ _dbus_keyring_reload (DBusKeyring *keyring, _dbus_verbose ("no secret key after ID and timestamp\n"); continue; } - + /* We have all three parts */ new = dbus_realloc (keys, sizeof (DBusKey) * (n_keys + 1)); if (new == NULL) @@ -537,7 +538,7 @@ _dbus_keyring_reload (DBusKeyring *keyring, dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL); goto out; } - + keys[n_keys-1].id = id; keys[n_keys-1].creation_time = timestamp; if (!_dbus_string_hex_decode (&line, next, &end, @@ -593,8 +594,8 @@ _dbus_keyring_reload (DBusKeyring *keyring, goto nomem; if (!_dbus_string_append_byte (&contents, '\n')) - goto nomem; - + goto nomem; + ++i; continue; @@ -602,7 +603,7 @@ _dbus_keyring_reload (DBusKeyring *keyring, dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL); goto out; } - + if (!_dbus_string_save_to_file (&contents, &keyring->filename, error)) goto out; @@ -614,13 +615,13 @@ _dbus_keyring_reload (DBusKeyring *keyring, keyring->n_keys = n_keys; keys = NULL; n_keys = 0; - - retval = TRUE; - + + retval = TRUE; + out: if (have_lock) _dbus_keyring_unlock (keyring); - + if (! ((retval == TRUE && (error == NULL || error->name == NULL)) || (retval == FALSE && (error == NULL || error->name != NULL)))) { @@ -630,7 +631,7 @@ _dbus_keyring_reload (DBusKeyring *keyring, retval, error, error->name ? error->name : "(none)"); _dbus_assert_not_reached ("didn't handle errors properly"); } - + if (keys != NULL) { i = 0; @@ -643,7 +644,7 @@ _dbus_keyring_reload (DBusKeyring *keyring, dbus_free (keys); } - + _dbus_string_free (&contents); _dbus_string_free (&line); @@ -692,7 +693,7 @@ _dbus_keyring_unref (DBusKeyring *keyring) _dbus_string_free (&keyring->filename_lock); _dbus_string_free (&keyring->directory); free_keys (keyring->keys, keyring->n_keys); - dbus_free (keyring); + dbus_free (keyring); } } @@ -716,13 +717,13 @@ _dbus_keyring_new_for_credentials (DBusCredentials *credentials, dbus_bool_t error_set; DBusError tmp_error; DBusCredentials *our_credentials; - + _DBUS_ASSERT_ERROR_IS_CLEAR (error); - + keyring = NULL; error_set = FALSE; our_credentials = NULL; - + if (!_dbus_string_init (&ringdir)) { dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL); @@ -737,7 +738,7 @@ _dbus_keyring_new_for_credentials (DBusCredentials *credentials, { our_credentials = _dbus_credentials_new_from_current_process (); } - + if (our_credentials == NULL) goto failed; @@ -746,11 +747,11 @@ _dbus_keyring_new_for_credentials (DBusCredentials *credentials, if (!_dbus_credentials_add_from_current_process (our_credentials)) goto failed; } - + if (!_dbus_append_keyring_directory_for_credentials (&ringdir, our_credentials)) goto failed; - + keyring = _dbus_keyring_new (); if (keyring == NULL) goto failed; @@ -758,7 +759,7 @@ _dbus_keyring_new_for_credentials (DBusCredentials *credentials, _dbus_assert (keyring->credentials == NULL); keyring->credentials = our_credentials; our_credentials = NULL; /* so we don't unref it again later */ - + /* should have been validated already, but paranoia check here */ if (!_dbus_keyring_validate_context (context)) { @@ -772,7 +773,7 @@ _dbus_keyring_new_for_credentials (DBusCredentials *credentials, /* Save keyring dir in the keyring object */ if (!_dbus_string_copy (&ringdir, 0, &keyring->directory, 0)) - goto failed; + goto failed; /* Create keyring->filename based on keyring dir and context */ if (!_dbus_string_copy (&keyring->directory, 0, @@ -799,7 +800,7 @@ _dbus_keyring_new_for_credentials (DBusCredentials *credentials, tmp_error.message); dbus_error_free (&tmp_error); } - + /* We don't fail fatally if we can't create the directory, * but the keyring will probably always be empty * unless someone else manages to create it @@ -814,9 +815,9 @@ _dbus_keyring_new_for_credentials (DBusCredentials *credentials, } _dbus_string_free (&ringdir); - + return keyring; - + failed: if (!error_set) dbus_set_error_const (error, @@ -858,8 +859,8 @@ _dbus_keyring_validate_context (const DBusString *context) _dbus_verbose ("context not valid ascii\n"); return FALSE; } - - /* no directory separators */ + + /* no directory separators */ if (_dbus_string_find (context, 0, "/", NULL)) { _dbus_verbose ("context contains a slash\n"); @@ -899,7 +900,7 @@ _dbus_keyring_validate_context (const DBusString *context) _dbus_verbose ("context contains a carriage return\n"); return FALSE; } - + return TRUE; } @@ -910,7 +911,7 @@ find_recent_key (DBusKeyring *keyring) long tv_sec, tv_usec; _dbus_get_current_time (&tv_sec, &tv_usec); - + i = 0; while (i < keyring->n_keys) { @@ -918,10 +919,10 @@ find_recent_key (DBusKeyring *keyring) _dbus_verbose ("Key %d is %ld seconds old\n", i, tv_sec - key->creation_time); - + if ((tv_sec - NEW_KEY_TIMEOUT_SECONDS) < key->creation_time) return key; - + ++i; } @@ -946,7 +947,7 @@ _dbus_keyring_get_best_key (DBusKeyring *keyring, DBusKey *key; _DBUS_ASSERT_ERROR_IS_CLEAR (error); - + key = find_recent_key (keyring); if (key) return key->id; @@ -1033,14 +1034,14 @@ _dbus_keyring_test (void) ring1 = NULL; ring2 = NULL; - + /* Context validation */ - + _dbus_string_init_const (&context, "foo"); _dbus_assert (_dbus_keyring_validate_context (&context)); _dbus_string_init_const (&context, "org_freedesktop_blah"); _dbus_assert (_dbus_keyring_validate_context (&context)); - + _dbus_string_init_const (&context, ""); _dbus_assert (!_dbus_keyring_validate_context (&context)); _dbus_string_init_const (&context, ".foo"); @@ -1059,7 +1060,7 @@ _dbus_keyring_test (void) _dbus_assert (_dbus_keyring_validate_context (&context)); _dbus_string_init_const (&context, "foo bar"); _dbus_assert (!_dbus_keyring_validate_context (&context)); - + if (!_dbus_string_init (&context)) _dbus_assert_not_reached ("no memory"); if (!_dbus_string_append_byte (&context, '\0')) @@ -1089,7 +1090,7 @@ _dbus_keyring_test (void) ring2 = _dbus_keyring_new_for_credentials (NULL, &context, &error); _dbus_assert (ring2 != NULL); _dbus_assert (error.name == NULL); - + if (ring1->n_keys != ring2->n_keys) { fprintf (stderr, "Different number of keys in keyrings\n"); @@ -1107,7 +1108,7 @@ _dbus_keyring_test (void) fprintf (stderr, "Keyring 1 has first key ID %d and keyring 2 has %d\n", ring1->keys[i].id, ring2->keys[i].id); goto failure; - } + } if (ring1->keys[i].creation_time != ring2->keys[i].creation_time) { @@ -1122,7 +1123,7 @@ _dbus_keyring_test (void) fprintf (stderr, "Keyrings 1 and 2 have different secrets for same ID/timestamp\n"); goto failure; } - + ++i; } @@ -1138,7 +1139,7 @@ _dbus_keyring_test (void) /* really unref */ _dbus_keyring_unref (ring1); _dbus_keyring_unref (ring2); - + return TRUE; failure: @@ -1151,4 +1152,3 @@ _dbus_keyring_test (void) } #endif /* DBUS_BUILD_TESTS */ - |