hi, > YAMAMOTO Takashi <y...@mwd.biglobe.ne.jp> wrote: > >> > The Linux-flavor API has option for test-and-set operation on attribute. >> > It cannot be done in libc, that really require to be done in the kernel. >> >> do you think the opposite, implementing freebsd-flavor in userland >> using linux-flavor, is possible? > > Yes it would be possible. The only problem woule be to map namespaces. > Linux API uses a dot-separated prefix in the attribute name (e.g.: > system.foo), while the FreeBSD API uses an int that can stand for system > or user. > > In order to keep the namespace information, you therefore would have to > rewrite attribute name on set/get/delete operations: > FreeBSD (system, "foo") should become Linux ("system.foo"), and same > thing for user namespace. > > But the problem then is listing, when applications using the Linux API > may have stored other namespaces: if you are requested system > attributes, you need to look for system.* attribute and strip the > leading "system.", but what happens if you encounter an odd namespace > savec through the Linux API? Something like that: > Linux ("system.foo") becomes FreeBSD (system, "foo") > Linux ("trusted.foo") becomes FreeBSD (system, "foo") > Linux ("security.foo") becomes FreeBSD (system, "foo") > Linux ("*.foo") becomes FreeBSD (user, "foo") > > But here you see a problem when listing user attributes with the FreeBSD > API when you have "user.foo" and "bar.foo": we will see two attributes > with the same name. > > A workaround or this would be to use add a special prefix on > set/get/delete operations: > FreeBSD (system, "foo") would become Linux ("netbsd_system.foo") > > That was, when listing attributes, you know you must strip netbsd_system > and netbsd_user namespaces and keep everything else. > Linux ("netbsd_system.foo") becomes FreeBSD (system, "foo") > Linux ("user_system.foo") becomes FreeBSD (user, "foo") > Linux ("system.foo") becomes FreeBSD (system, "system.foo") > Linux ("trusted.foo") becomes FreeBSD (system, "trusted.foo") > Linux ("security.foo") becomes FreeBSD (system, "security.foo") > Linux ("*.foo") becomes FreeBSD (user, "*.foo") > > But then when listing using the Linux API, it would see our weird > netbsd_user and netbsd_system namespaces. A possible fix is to have a > libc stub, unused by the FreeBSD API, that rewrite them to system and > user, e.g.: "netbsd_system.foo" becomes "system.foo" > > The answer to your question is therefore yes, but it may introduce > confusion.
thanks. the namespace mapping issue exists regardless where (kernel/userland) they are implemented, doesn't it? anyway most applications only care about the user namespace, i guess. i tend to think it's better to just kill the freebsd flavor of syscalls. YAMAMOTO Takashi > > -- > Emmanuel Dreyfus > http://hcpnet.free.fr/pubz > m...@netbsd.org