win32 dbus_connection_get_unix_user() problem
Havoc Pennington
hp at redhat.com
Sun Mar 11 09:59:53 PDT 2007
Peter Kümmel wrote:
> Havoc Pennington wrote:
>> Hi,
>>
>> Peter Kümmel wrote:
>>> To provide a platform independent API is not our
>>> job, especially because the code isn't understandable,
>>> when you are not a full time developer working on dbus.
>>> It is the job of the lib creator/designer, so back to
>>> the drawing board.
>> This is just bogus. We're talking about one function, not "the API", and
>> I'm not even asking you to create a cross-platform API; I'm saying, at
>> most, add dbus_connection_get_windows_user() that always fails on unix,
>> and then copy all the uses of get_unix_user(), doing the analogous thing
>> with the windows sid.
>
> Isn't you suggestion in principle something like this:
>
> void function()
> {
> do_unx_func();
> do_win_func();
> do_wce_func();
> do_mac_func();
> do_sym_func();
> do_palm_func();
> }
>
No, I don't think so, because there is no enclosing function(). What I'm
saying is, the config file already supports a number of unrelated
options for when a policy applies, such as unix user, unix group, bus
name owned, etc. Just add also windows sid as something the file
supports. So my suggestion is something like:
parse_policy() {
parse_unix_user_attribute()
parse_unix_group_attribute()
parse_windows_sid_attribute()
parse_name_owned_attribute()
return policy;
}
Some of the attributes will not make sense on some platforms. On unix
the windows sid attribute will always be empty as if it were not
specified, and on windows the unix attributes will always be empty as if
they were not specified.
In any case, if you think this is a bad way to do it (it might turn out
to be once you try it), then feel free to come up with another one. But
I've outlined the properties it has to have (no unix emulation on
windows in a way that leaks into public API/config, no process-specific
made-up integers sent over the wire, and no #ifdef hell that will be
unmaintainable)
Another way to think about it is that the cross-platform abstraction
should be *internal*, not leaking into the config file, and not leaking
into the API. Clients of the API do not want to see a "DBusFile" or
"DBusUser" or something; they will need to either map directly to
platform-specific types, or they will need to map to a different
non-dbus cross-platform abstraction such as Qt. Either way, they need
the actual platform-specific information, not a DBus abstraction.
When using QtDBus on Windows, *then* someone would be completely
protected from platform specific API, because Qt would offer the
abstractions for file and user and so forth. But those APIs don't belong
in the *public* API/config portions of DBus itself.
Havoc
More information about the dbus
mailing list