mirror of
https://gitlab.freedesktop.org/dbus/dbus.git
synced 2026-05-05 08:48:07 +02:00
2003-02-18 Joe Shaw <joe@assbarn.com>
* dbus/dbus-auth.c (handle_server_data_stupid_test_mech): Just get credentials from our currently running process. (get_word): Fix a buglet where we were copying the entire length instead of relative to our position. * dbus/dbus-hash.c (_dbus_hash_test): Don't try to allocate the keys on the stack... it's 640k of data. * dbus/dbus-sysdeps.c (_dbus_read_credentials_unix_socket): Always read the credentials byte off the socket, even if we don't have SO_PEERCRED. (_dbus_poll): Implement poll() using select() for systems which don't have it. * glib/test-dbus-glib.c (main): Print out an error if no parameters are given. * test/data/auth/fallback.auth-script: Added. Tests that a client can fallback to a secondary auth mechanism if the first fails.
This commit is contained in:
parent
9e1b2fe28e
commit
9ada6e2cad
7 changed files with 165 additions and 44 deletions
3
AUTHORS
3
AUTHORS
|
|
@ -2,4 +2,5 @@ Anders Carlsson <andersca@codefactory.se>
|
|||
Alex Larsson <alexl@redhat.com>
|
||||
Havoc Pennington <hp@redhat.com>
|
||||
Harri Porten <porten@kde.org>
|
||||
Zack Rusin <zack@kde.org>
|
||||
Zack Rusin <zack@kde.org>
|
||||
Joe Shaw <joe@assbarn.com>
|
||||
22
ChangeLog
22
ChangeLog
|
|
@ -1,3 +1,25 @@
|
|||
2003-02-18 Joe Shaw <joe@assbarn.com>
|
||||
|
||||
* dbus/dbus-auth.c (handle_server_data_stupid_test_mech): Just get
|
||||
credentials from our currently running process.
|
||||
(get_word): Fix a buglet where we were copying the entire length
|
||||
instead of relative to our position.
|
||||
|
||||
* dbus/dbus-hash.c (_dbus_hash_test): Don't try to allocate the
|
||||
keys on the stack... it's 640k of data.
|
||||
|
||||
* dbus/dbus-sysdeps.c (_dbus_read_credentials_unix_socket): Always
|
||||
read the credentials byte off the socket, even if we don't have
|
||||
SO_PEERCRED.
|
||||
(_dbus_poll): Implement poll() using select() for systems which
|
||||
don't have it.
|
||||
|
||||
* glib/test-dbus-glib.c (main): Print out an error if no
|
||||
parameters are given.
|
||||
|
||||
* test/data/auth/fallback.auth-script: Added. Tests that a client
|
||||
can fallback to a secondary auth mechanism if the first fails.
|
||||
|
||||
2003-02-18 Havoc Pennington <hp@pobox.com>
|
||||
|
||||
* AUTHORS: add Alex
|
||||
|
|
|
|||
|
|
@ -321,6 +321,8 @@ handle_server_data_stupid_test_mech (DBusAuth *auth,
|
|||
"OK\r\n"))
|
||||
return FALSE;
|
||||
|
||||
_dbus_credentials_from_current_process (&auth->authorized_identity);
|
||||
|
||||
auth->authenticated_pending_begin = TRUE;
|
||||
|
||||
return TRUE;
|
||||
|
|
@ -799,7 +801,7 @@ get_word (const DBusString *str,
|
|||
|
||||
if (i > *start)
|
||||
{
|
||||
if (!_dbus_string_copy_len (str, *start, i, word, 0))
|
||||
if (!_dbus_string_copy_len (str, *start, i - *start, word, 0))
|
||||
return FALSE;
|
||||
|
||||
*start = i;
|
||||
|
|
|
|||
|
|
@ -1318,7 +1318,20 @@ _dbus_hash_test (void)
|
|||
DBusHashTable *table2;
|
||||
DBusHashIter iter;
|
||||
#define N_HASH_KEYS 5000
|
||||
char keys[N_HASH_KEYS][128];
|
||||
char **keys;
|
||||
dbus_bool_t ret = FALSE;
|
||||
|
||||
keys = dbus_new (char *, N_HASH_KEYS);
|
||||
if (keys == NULL)
|
||||
_dbus_assert_not_reached ("no memory");
|
||||
|
||||
for (i = 0; i < N_HASH_KEYS; i++)
|
||||
{
|
||||
keys[i] = dbus_malloc (128);
|
||||
|
||||
if (keys[i] == NULL)
|
||||
_dbus_assert_not_reached ("no memory");
|
||||
}
|
||||
|
||||
printf ("Computing test hash keys...\n");
|
||||
i = 0;
|
||||
|
|
@ -1332,12 +1345,12 @@ _dbus_hash_test (void)
|
|||
table1 = _dbus_hash_table_new (DBUS_HASH_STRING,
|
||||
dbus_free, dbus_free);
|
||||
if (table1 == NULL)
|
||||
return FALSE;
|
||||
goto out;
|
||||
|
||||
table2 = _dbus_hash_table_new (DBUS_HASH_INT,
|
||||
NULL, dbus_free);
|
||||
if (table2 == NULL)
|
||||
return FALSE;
|
||||
goto out;
|
||||
|
||||
/* Insert and remove a bunch of stuff, counting the table in between
|
||||
* to be sure it's not broken and that iteration works
|
||||
|
|
@ -1350,22 +1363,22 @@ _dbus_hash_test (void)
|
|||
|
||||
key = _dbus_strdup (keys[i]);
|
||||
if (key == NULL)
|
||||
return FALSE;
|
||||
goto out;
|
||||
value = _dbus_strdup ("Value!");
|
||||
if (value == NULL)
|
||||
return FALSE;
|
||||
goto out;
|
||||
|
||||
if (!_dbus_hash_table_insert_string (table1,
|
||||
key, value))
|
||||
return FALSE;
|
||||
goto out;
|
||||
|
||||
value = _dbus_strdup (keys[i]);
|
||||
if (value == NULL)
|
||||
return FALSE;
|
||||
goto out;
|
||||
|
||||
if (!_dbus_hash_table_insert_int (table2,
|
||||
i, value))
|
||||
return FALSE;
|
||||
goto out;
|
||||
|
||||
_dbus_assert (count_entries (table1) == i + 1);
|
||||
_dbus_assert (count_entries (table2) == i + 1);
|
||||
|
|
@ -1410,12 +1423,12 @@ _dbus_hash_test (void)
|
|||
table1 = _dbus_hash_table_new (DBUS_HASH_STRING,
|
||||
dbus_free, dbus_free);
|
||||
if (table1 == NULL)
|
||||
return FALSE;
|
||||
goto out;
|
||||
|
||||
table2 = _dbus_hash_table_new (DBUS_HASH_INT,
|
||||
NULL, dbus_free);
|
||||
if (table2 == NULL)
|
||||
return FALSE;
|
||||
goto out;
|
||||
|
||||
i = 0;
|
||||
while (i < 5000)
|
||||
|
|
@ -1425,22 +1438,22 @@ _dbus_hash_test (void)
|
|||
|
||||
key = _dbus_strdup (keys[i]);
|
||||
if (key == NULL)
|
||||
return FALSE;
|
||||
goto out;
|
||||
value = _dbus_strdup ("Value!");
|
||||
if (value == NULL)
|
||||
return FALSE;
|
||||
goto out;
|
||||
|
||||
if (!_dbus_hash_table_insert_string (table1,
|
||||
key, value))
|
||||
return FALSE;
|
||||
goto out;
|
||||
|
||||
value = _dbus_strdup (keys[i]);
|
||||
if (value == NULL)
|
||||
return FALSE;
|
||||
goto out;
|
||||
|
||||
if (!_dbus_hash_table_insert_int (table2,
|
||||
i, value))
|
||||
return FALSE;
|
||||
goto out;
|
||||
|
||||
_dbus_assert (count_entries (table1) == i + 1);
|
||||
_dbus_assert (count_entries (table2) == i + 1);
|
||||
|
|
@ -1461,7 +1474,7 @@ _dbus_hash_test (void)
|
|||
|
||||
value = _dbus_strdup ("Different value!");
|
||||
if (value == NULL)
|
||||
return FALSE;
|
||||
goto out;
|
||||
|
||||
_dbus_hash_iter_set_value (&iter, value);
|
||||
|
||||
|
|
@ -1489,7 +1502,7 @@ _dbus_hash_test (void)
|
|||
|
||||
value = _dbus_strdup ("Different value!");
|
||||
if (value == NULL)
|
||||
return FALSE;
|
||||
goto out;
|
||||
|
||||
_dbus_hash_iter_set_value (&iter, value);
|
||||
|
||||
|
|
@ -1516,15 +1529,15 @@ _dbus_hash_test (void)
|
|||
|
||||
key = _dbus_strdup (keys[i]);
|
||||
if (key == NULL)
|
||||
return FALSE;
|
||||
goto out;
|
||||
|
||||
value = _dbus_strdup ("Value!");
|
||||
if (value == NULL)
|
||||
return FALSE;
|
||||
goto out;
|
||||
|
||||
if (!_dbus_hash_table_insert_string (table1,
|
||||
key, value))
|
||||
return FALSE;
|
||||
goto out;
|
||||
|
||||
++i;
|
||||
}
|
||||
|
|
@ -1537,20 +1550,20 @@ _dbus_hash_test (void)
|
|||
|
||||
key = _dbus_strdup (keys[i]);
|
||||
if (key == NULL)
|
||||
return FALSE;
|
||||
goto out;
|
||||
value = _dbus_strdup ("Value!");
|
||||
if (value == NULL)
|
||||
return FALSE;
|
||||
goto out;
|
||||
|
||||
if (!_dbus_hash_table_remove_string (table1, keys[i]))
|
||||
return FALSE;
|
||||
goto out;
|
||||
|
||||
if (!_dbus_hash_table_insert_string (table1,
|
||||
key, value))
|
||||
return FALSE;
|
||||
goto out;
|
||||
|
||||
if (!_dbus_hash_table_remove_string (table1, keys[i]))
|
||||
return FALSE;
|
||||
goto out;
|
||||
|
||||
_dbus_assert (_dbus_hash_table_get_n_entries (table1) == i);
|
||||
|
||||
|
|
@ -1568,12 +1581,12 @@ _dbus_hash_test (void)
|
|||
table1 = _dbus_hash_table_new (DBUS_HASH_STRING,
|
||||
dbus_free, dbus_free);
|
||||
if (table1 == NULL)
|
||||
return FALSE;
|
||||
goto out;
|
||||
|
||||
table2 = _dbus_hash_table_new (DBUS_HASH_INT,
|
||||
NULL, dbus_free);
|
||||
if (table2 == NULL)
|
||||
return FALSE;
|
||||
goto out;
|
||||
|
||||
i = 0;
|
||||
while (i < 3000)
|
||||
|
|
@ -1583,24 +1596,24 @@ _dbus_hash_test (void)
|
|||
|
||||
key = _dbus_strdup (keys[i]);
|
||||
if (key == NULL)
|
||||
return FALSE;
|
||||
goto out;
|
||||
value = _dbus_strdup ("Value!");
|
||||
if (value == NULL)
|
||||
return FALSE;
|
||||
goto out;
|
||||
|
||||
if (!_dbus_hash_iter_lookup (table1,
|
||||
key, TRUE, &iter))
|
||||
return FALSE;
|
||||
goto out;
|
||||
_dbus_assert (_dbus_hash_iter_get_value (&iter) == NULL);
|
||||
_dbus_hash_iter_set_value (&iter, value);
|
||||
|
||||
value = _dbus_strdup (keys[i]);
|
||||
if (value == NULL)
|
||||
return FALSE;
|
||||
goto out;
|
||||
|
||||
if (!_dbus_hash_iter_lookup (table2,
|
||||
_DBUS_INT_TO_POINTER (i), TRUE, &iter))
|
||||
return FALSE;
|
||||
goto out;
|
||||
_dbus_assert (_dbus_hash_iter_get_value (&iter) == NULL);
|
||||
_dbus_hash_iter_set_value (&iter, value);
|
||||
|
||||
|
|
@ -1608,7 +1621,7 @@ _dbus_hash_test (void)
|
|||
_dbus_assert (count_entries (table2) == i + 1);
|
||||
|
||||
if (!_dbus_hash_iter_lookup (table1, keys[i], FALSE, &iter))
|
||||
return FALSE;
|
||||
goto out;
|
||||
|
||||
value = _dbus_hash_iter_get_value (&iter);
|
||||
_dbus_assert (value != NULL);
|
||||
|
|
@ -1621,7 +1634,7 @@ _dbus_hash_test (void)
|
|||
;
|
||||
|
||||
if (!_dbus_hash_iter_lookup (table2, _DBUS_INT_TO_POINTER (i), FALSE, &iter))
|
||||
return FALSE;
|
||||
goto out;
|
||||
|
||||
value = _dbus_hash_iter_get_value (&iter);
|
||||
_dbus_assert (value != NULL);
|
||||
|
|
@ -1656,8 +1669,15 @@ _dbus_hash_test (void)
|
|||
_dbus_hash_table_unref (table1);
|
||||
_dbus_hash_table_unref (table2);
|
||||
|
||||
ret = TRUE;
|
||||
|
||||
out:
|
||||
for (i = 0; i < N_HASH_KEYS; i++)
|
||||
dbus_free (keys[i]);
|
||||
|
||||
dbus_free (keys);
|
||||
|
||||
return TRUE;
|
||||
return ret;
|
||||
}
|
||||
|
||||
#endif /* DBUS_BUILD_TESTS */
|
||||
|
|
|
|||
|
|
@ -503,9 +503,9 @@ _dbus_read_credentials_unix_socket (int client_fd,
|
|||
credentials->uid = -1;
|
||||
credentials->gid = -1;
|
||||
|
||||
#ifdef SO_PEERCRED
|
||||
if (read_credentials_byte (client_fd, result))
|
||||
{
|
||||
#ifdef SO_PEERCRED
|
||||
struct ucred cr;
|
||||
int cr_len = sizeof (cr);
|
||||
|
||||
|
|
@ -525,15 +525,14 @@ _dbus_read_credentials_unix_socket (int client_fd,
|
|||
_dbus_verbose ("Failed to getsockopt() credentials, returned len %d/%d: %s\n",
|
||||
cr_len, (int) sizeof (cr), _dbus_strerror (errno));
|
||||
}
|
||||
#else /* !SO_PEERCRED */
|
||||
_dbus_verbose ("Socket credentials not supported on this OS\n");
|
||||
#endif
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
return FALSE;
|
||||
#else /* !SO_PEERCRED */
|
||||
_dbus_verbose ("Socket credentials not supported on this OS\n");
|
||||
return TRUE;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -1052,8 +1051,57 @@ _dbus_poll (DBusPollFD *fds,
|
|||
return -1;
|
||||
}
|
||||
#else /* ! HAVE_POLL */
|
||||
_dbus_warn ("need to implement select() fallback for systems with no poll()\n");
|
||||
return -1;
|
||||
|
||||
fd_set read_set, write_set, err_set;
|
||||
int max_fd;
|
||||
int i;
|
||||
struct timeval tv;
|
||||
int ready;
|
||||
|
||||
FD_ZERO (&read_set);
|
||||
FD_ZERO (&write_set);
|
||||
FD_ZERO (&err_set);
|
||||
|
||||
for (i = 0; i < n_fds; i++)
|
||||
{
|
||||
DBusPollFD f = fds[i];
|
||||
|
||||
if (f.events & _DBUS_POLLIN)
|
||||
FD_SET (f.fd, &read_set);
|
||||
|
||||
if (f.events & _DBUS_POLLOUT)
|
||||
FD_SET (f.fd, &write_set);
|
||||
|
||||
FD_SET (f.fd, &err_set);
|
||||
|
||||
max_fd = MAX (max_fd, f.fd);
|
||||
}
|
||||
|
||||
tv.tv_sec = timeout_milliseconds / 1000;
|
||||
tv.tv_usec = (timeout_milliseconds % 1000) * 1000;
|
||||
|
||||
ready = select (max_fd + 1, &read_set, &write_set, &err_set, &tv);
|
||||
|
||||
if (ready > 0)
|
||||
{
|
||||
for (i = 0; i < n_fds; i++)
|
||||
{
|
||||
DBusPollFD f = fds[i];
|
||||
|
||||
f.revents = 0;
|
||||
|
||||
if (FD_ISSET (f.fd, &read_set))
|
||||
f.revents |= _DBUS_POLLIN;
|
||||
|
||||
if (FD_ISSET (f.fd, &write_set))
|
||||
f.revents |= _DBUS_POLLOUT;
|
||||
|
||||
if (FD_ISSET (f.fd, &err_set))
|
||||
f.revents |= _DBUS_POLLERR;
|
||||
}
|
||||
}
|
||||
|
||||
return ready;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
/* -*- mode: C; c-file-style: "gnu" -*- */
|
||||
#include "dbus-glib.h"
|
||||
#include <stdio.h>
|
||||
|
||||
|
|
@ -10,6 +11,12 @@ main (int argc, char **argv)
|
|||
|
||||
GMainLoop *loop;
|
||||
|
||||
if (argc < 2)
|
||||
{
|
||||
fprintf (stderr, "Give the server address as an argument\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
loop = g_main_loop_new (NULL, FALSE);
|
||||
|
||||
connection = dbus_connection_open (argv[1], &result);
|
||||
|
|
|
|||
21
test/data/auth/fallback.auth-script
Normal file
21
test/data/auth/fallback.auth-script
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
## this tests that a client can fallback to a secondary auth mech
|
||||
|
||||
CLIENT
|
||||
|
||||
## Will try EXTERNAL by default first without first calling AUTH alone.
|
||||
|
||||
EXPECT_COMMAND AUTH
|
||||
SEND 'REJECTED EXTERNAL DBUS_STUPID_TEST_MECH'
|
||||
|
||||
## Will try EXTERNAL again.
|
||||
|
||||
EXPECT_COMMAND AUTH
|
||||
SEND 'REJECTED EXTERNAL DBUS_STUPID_TEST_MECH'
|
||||
|
||||
## And this time we get DBUS_STUPID_TEST_MECH.
|
||||
|
||||
EXPECT_COMMAND AUTH
|
||||
SEND 'OK'
|
||||
|
||||
EXPECT_COMMAND BEGIN
|
||||
EXPECT_STATE AUTHENTICATED
|
||||
Loading…
Add table
Reference in a new issue