X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dbus%2Fdbus-auth-script.c;h=c1f0c88ec7e7994d81b01149becffc374bd00c11;hb=0b2b6cba926a739ac56666f86ad4f88cbf5a8d48;hp=2ed2af37e9afafbfa1189f8393cfb08d8f57f54f;hpb=43605a6f4e78a8c28afb4b1e924dff0301e0e95c;p=platform%2Fupstream%2Fdbus.git diff --git a/dbus/dbus-auth-script.c b/dbus/dbus-auth-script.c index 2ed2af3..c1f0c88 100644 --- a/dbus/dbus-auth-script.c +++ b/dbus/dbus-auth-script.c @@ -1,5 +1,5 @@ -/* -*- mode: C; c-file-style: "gnu" -*- */ -/* dbus-auth-script.c Test DBusAuth using a special script file (internal to D-BUS implementation) +/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ +/* dbus-auth-script.c Test DBusAuth using a special script file (internal to D-Bus implementation) * * Copyright (C) 2003 Red Hat, Inc. * @@ -17,20 +17,19 @@ * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ #include -#ifdef DBUS_BUILD_TESTS +#ifdef DBUS_ENABLE_EMBEDDED_TESTS #include "dbus-auth-script.h" #include "dbus-auth.h" #include "dbus-string.h" #include "dbus-hash.h" +#include "dbus-credentials.h" #include "dbus-internals.h" -#include "dbus-marshal.h" -#include "dbus-userdb.h" /** * @defgroup DBusAuthScript code for running unit test scripts for DBusAuth @@ -210,6 +209,27 @@ split_string (DBusString *str) return array; } +static void +auth_set_unix_credentials(DBusAuth *auth, + dbus_uid_t uid, + dbus_pid_t pid) +{ + DBusCredentials *credentials; + + credentials = _dbus_credentials_new (); + if (credentials == NULL) + _dbus_assert_not_reached ("no memory"); + + if (uid != DBUS_UID_UNSET) + _dbus_credentials_add_unix_uid (credentials, uid); + if (pid != DBUS_PID_UNSET) + _dbus_credentials_add_pid (credentials, pid); + + _dbus_auth_set_credentials (auth, credentials); + + _dbus_credentials_unref (credentials); +} + /** * Runs an "auth script" which is a script for testing the * authentication protocol. Scripts send and receive data, and then @@ -224,7 +244,7 @@ dbus_bool_t _dbus_auth_script_run (const DBusString *filename) { DBusString file; - DBusError error; + DBusError error = DBUS_ERROR_INIT; DBusString line; dbus_bool_t retval; int line_no; @@ -232,10 +252,12 @@ _dbus_auth_script_run (const DBusString *filename) DBusString from_auth; DBusAuthState state; DBusString context; + DBusString guid; retval = FALSE; auth = NULL; + _dbus_string_init_const (&guid, "5fa01f4202cd837709a3274ca0df9d00"); _dbus_string_init_const (&context, "org_freedesktop_test"); if (!_dbus_string_init (&file)) @@ -254,7 +276,6 @@ _dbus_auth_script_run (const DBusString *filename) return FALSE; } - dbus_error_init (&error); if (!_dbus_file_get_contents (&file, filename, &error)) { _dbus_warn ("Getting contents of %s failed: %s\n", _dbus_string_get_const_data (filename), error.message); @@ -264,11 +285,14 @@ _dbus_auth_script_run (const DBusString *filename) state = DBUS_AUTH_STATE_NEED_DISCONNECT; line_no = 0; + next_iteration: while (_dbus_string_pop_line (&file, &line)) { line_no += 1; + /* _dbus_warn ("%s\n", _dbus_string_get_const_data (&line)); */ + _dbus_string_delete_leading_blanks (&line); if (auth != NULL) @@ -299,10 +323,42 @@ _dbus_auth_script_run (const DBusString *filename) /* Ignore this comment */ goto next_iteration; } +#ifdef DBUS_WIN + else if (_dbus_string_starts_with_c_str (&line, + "WIN_ONLY")) + { + /* Ignore this line */ + goto next_iteration; + } + else if (_dbus_string_starts_with_c_str (&line, + "UNIX_ONLY")) + { + /* skip this file */ + _dbus_warn ("skipping unix only auth script\n"); + retval = TRUE; + goto out; + } +#endif +#ifdef DBUS_UNIX + else if (_dbus_string_starts_with_c_str (&line, + "UNIX_ONLY")) + { + /* Ignore this line */ + goto next_iteration; + } + else if (_dbus_string_starts_with_c_str (&line, + "WIN_ONLY")) + { + /* skip this file */ + _dbus_warn ("skipping windows only auth script\n"); + retval = TRUE; + goto out; + } +#endif else if (_dbus_string_starts_with_c_str (&line, "CLIENT")) { - DBusCredentials creds; + DBusCredentials *creds; if (auth != NULL) { @@ -320,14 +376,31 @@ _dbus_auth_script_run (const DBusString *filename) /* test ref/unref */ _dbus_auth_ref (auth); _dbus_auth_unref (auth); + + creds = _dbus_credentials_new_from_current_process (); + if (creds == NULL) + { + _dbus_warn ("no memory for credentials\n"); + _dbus_auth_unref (auth); + auth = NULL; + goto out; + } + + if (!_dbus_auth_set_credentials (auth, creds)) + { + _dbus_warn ("no memory for setting credentials\n"); + _dbus_auth_unref (auth); + auth = NULL; + _dbus_credentials_unref (creds); + goto out; + } - _dbus_credentials_from_current_process (&creds); - _dbus_auth_set_credentials (auth, &creds); + _dbus_credentials_unref (creds); } else if (_dbus_string_starts_with_c_str (&line, "SERVER")) { - DBusCredentials creds; + DBusCredentials *creds; if (auth != NULL) { @@ -335,7 +408,7 @@ _dbus_auth_script_run (const DBusString *filename) goto out; } - auth = _dbus_auth_server_new (); + auth = _dbus_auth_server_new (&guid); if (auth == NULL) { _dbus_warn ("no memory to create DBusAuth\n"); @@ -345,9 +418,27 @@ _dbus_auth_script_run (const DBusString *filename) /* test ref/unref */ _dbus_auth_ref (auth); _dbus_auth_unref (auth); + + creds = _dbus_credentials_new_from_current_process (); + if (creds == NULL) + { + _dbus_warn ("no memory for credentials\n"); + _dbus_auth_unref (auth); + auth = NULL; + goto out; + } + + if (!_dbus_auth_set_credentials (auth, creds)) + { + _dbus_warn ("no memory for setting credentials\n"); + _dbus_auth_unref (auth); + auth = NULL; + _dbus_credentials_unref (creds); + goto out; + } - _dbus_credentials_from_current_process (&creds); - _dbus_auth_set_credentials (auth, &creds); + _dbus_credentials_unref (creds); + _dbus_auth_set_context (auth, &context); } else if (auth == NULL) @@ -359,20 +450,17 @@ _dbus_auth_script_run (const DBusString *filename) else if (_dbus_string_starts_with_c_str (&line, "NO_CREDENTIALS")) { - DBusCredentials creds = { -1, -1, -1 }; - _dbus_auth_set_credentials (auth, &creds); + auth_set_unix_credentials (auth, DBUS_UID_UNSET, DBUS_PID_UNSET); } else if (_dbus_string_starts_with_c_str (&line, "ROOT_CREDENTIALS")) { - DBusCredentials creds = { -1, 0, 0 }; - _dbus_auth_set_credentials (auth, &creds); + auth_set_unix_credentials (auth, 0, DBUS_PID_UNSET); } else if (_dbus_string_starts_with_c_str (&line, "SILLY_CREDENTIALS")) { - DBusCredentials creds = { -1, 4312, 1232 }; - _dbus_auth_set_credentials (auth, &creds); + auth_set_unix_credentials (auth, 4312, DBUS_PID_UNSET); } else if (_dbus_string_starts_with_c_str (&line, "ALLOWED_MECHS")) @@ -431,8 +519,7 @@ _dbus_auth_script_run (const DBusString *filename) goto out; } - if (!_dbus_string_append_uint (&username, - _dbus_getuid ())) + if (!_dbus_append_user_from_current_process (&username)) { _dbus_warn ("no memory for userid\n"); _dbus_string_free (&username); @@ -457,7 +544,6 @@ _dbus_auth_script_run (const DBusString *filename) "USERNAME_HEX", &where)) { DBusString username; - const DBusString *u; if (!_dbus_string_init (&username)) { @@ -466,9 +552,7 @@ _dbus_auth_script_run (const DBusString *filename) goto out; } - if (!_dbus_username_from_current_process (&u) || - !_dbus_string_copy (u, 0, &username, - _dbus_string_get_length (&username))) + if (!_dbus_append_user_from_current_process (&username)) { _dbus_warn ("no memory for username\n"); _dbus_string_free (&username); @@ -604,6 +688,30 @@ _dbus_auth_script_run (const DBusString *filename) } } else if (_dbus_string_starts_with_c_str (&line, + "EXPECT_HAVE_NO_CREDENTIALS")) + { + DBusCredentials *authorized_identity; + + authorized_identity = _dbus_auth_get_identity (auth); + if (!_dbus_credentials_are_anonymous (authorized_identity)) + { + _dbus_warn ("Expected anonymous login or failed login, but some credentials were authorized\n"); + goto out; + } + } + else if (_dbus_string_starts_with_c_str (&line, + "EXPECT_HAVE_SOME_CREDENTIALS")) + { + DBusCredentials *authorized_identity; + + authorized_identity = _dbus_auth_get_identity (auth); + if (_dbus_credentials_are_anonymous (authorized_identity)) + { + _dbus_warn ("Expected to have some credentials, but we don't\n"); + goto out; + } + } + else if (_dbus_string_starts_with_c_str (&line, "EXPECT")) { DBusString expected; @@ -653,8 +761,12 @@ _dbus_auth_script_run (const DBusString *filename) } } - if (auth != NULL && - state == DBUS_AUTH_STATE_AUTHENTICATED) + if (auth == NULL) + { + _dbus_warn ("Auth script is bogus, did not even have CLIENT or SERVER\n"); + goto out; + } + else if (state == DBUS_AUTH_STATE_AUTHENTICATED) { const DBusString *unused; @@ -688,4 +800,4 @@ _dbus_auth_script_run (const DBusString *filename) } /** @} */ -#endif /* DBUS_BUILD_TESTS */ +#endif /* DBUS_ENABLE_EMBEDDED_TESTS */