dbus/dbus dbus-sysdeps-win.c,1.6,1.7
Ralf Habacker
rhabacker at kemper.freedesktop.org
Tue Mar 13 09:56:34 PDT 2007
Update of /cvs/dbus/dbus/dbus
In directory kemper:/tmp/cvs-serv15349/dbus
Modified Files:
dbus-sysdeps-win.c
Log Message:
* dbus/dbus-sysdeps-win.c: added zero byte sending and receiving after connection start up
Index: dbus-sysdeps-win.c
===================================================================
RCS file: /cvs/dbus/dbus/dbus/dbus-sysdeps-win.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- dbus-sysdeps-win.c 12 Mar 2007 15:59:44 -0000 1.6
+++ dbus-sysdeps-win.c 13 Mar 2007 16:56:32 -0000 1.7
@@ -3657,30 +3657,61 @@
dbus_bool_t
-write_credentials_byte (int server_fd,
+write_credentials_byte (int handle,
DBusError *error)
{
- /* FIXME: for the session bus credentials shouldn't matter (?), but
- * for the system bus they are presumably essential. A rough outline
- * of a way to implement the credential transfer would be this:
- *
- * client waits to *read* a byte.
- *
- * server creates a named pipe with a random name, sends a byte
- * contining its length, and its name.
- *
- * client reads the name, connects to it (using Win32 API).
- *
- * server waits for connection to the named pipe, then calls
- * ImpersonateNamedPipeClient(), notes its now-current credentials,
- * calls RevertToSelf(), closes its handles to the named pipe, and
- * is done. (Maybe there is some other way to get the SID of a named
- * pipe client without having to use impersonation?)
- *
- * client closes its handles and is done.
- *
- */
+/* FIXME: for the session bus credentials shouldn't matter (?), but
+ * for the system bus they are presumably essential. A rough outline
+ * of a way to implement the credential transfer would be this:
+ *
+ * client waits to *read* a byte.
+ *
+ * server creates a named pipe with a random name, sends a byte
+ * contining its length, and its name.
+ *
+ * client reads the name, connects to it (using Win32 API).
+ *
+ * server waits for connection to the named pipe, then calls
+ * ImpersonateNamedPipeClient(), notes its now-current credentials,
+ * calls RevertToSelf(), closes its handles to the named pipe, and
+ * is done. (Maybe there is some other way to get the SID of a named
+ * pipe client without having to use impersonation?)
+ *
+ * client closes its handles and is done.
+ *
+ * Ralf: Why not sending credentials over the given this connection ?
+ * Using named pipes makes it impossible to be connected from a unix client.
+ *
+ */
+ int bytes_written;
+ DBusString buf;
+ _dbus_string_init_const_len (&buf, "\0", 1);
+again:
+ bytes_written = _dbus_write_socket (handle, &buf, 0, 1 );
+
+ if (bytes_written < 0 && errno == EINTR)
+ goto again;
+
+ if (bytes_written < 0)
+ {
+ dbus_set_error (error, _dbus_error_from_errno (errno),
+ "Failed to write credentials byte: %s",
+ _dbus_strerror (errno));
+ return FALSE;
+ }
+ else if (bytes_written == 0)
+ {
+ dbus_set_error (error, DBUS_ERROR_IO_ERROR,
+ "wrote zero bytes writing credentials byte");
+ return FALSE;
+ }
+ else
+ {
+ _dbus_assert (bytes_written == 1);
+ _dbus_verbose ("wrote 1 zero byte, credential sending isn't implemented yet\n");
+ return TRUE;
+ }
return TRUE;
}
@@ -3703,12 +3734,23 @@
* @returns #TRUE on success
*/
dbus_bool_t
-_dbus_read_credentials_unix_socket (int client_fd,
+_dbus_read_credentials_unix_socket (int handle,
DBusCredentials *credentials,
DBusError *error)
{
- /* FIXME bogus testing credentials */
+ int bytes_read;
+ DBusString buf;
+ _dbus_string_init(&buf);
+
+ bytes_read = _dbus_read_socket(handle, &buf, 1 );
+ if (bytes_read > 0)
+ {
+ _dbus_verbose("got one zero byte from server");
+ }
+
+ _dbus_string_free(&buf);
_dbus_credentials_from_current_process (credentials);
+ _dbus_verbose("FIXME: get faked credentials from current process");
return TRUE;
}
More information about the dbus-commit
mailing list