public inbox for cygwin@cygwin.com
 help / color / mirror / Atom feed
* Re: Testers needed: New passwd/group handling in Cygwin
@ 2014-02-19 21:15 J.H. vd Water
  2014-02-20 11:24 ` Corinna Vinschen
  0 siblings, 1 reply; 161+ messages in thread
From: J.H. vd Water @ 2014-02-19 21:15 UTC (permalink / raw)
  To: cygwin

Hi Corinna,

>Can you please just test the today's snapshot which should show up
>soon on the http://cygwin.com/snapshots/ page.

Like Andrey I tested the 19/2 snapshot of today (x86).

For good measure, I again started afresh ...

getpwent (db_enum: local) no longer crashes. Splendid!

Henri



--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

^ permalink raw reply	[flat|nested] 161+ messages in thread
* Re: Testers needed: New passwd/group handling in Cygwin
@ 2014-02-21  7:41 J.H. vd Water
  0 siblings, 0 replies; 161+ messages in thread
From: J.H. vd Water @ 2014-02-21  7:41 UTC (permalink / raw)
  To: cygwin

Hi Corinna,

>> >If you only want to use the content of your passwd and group files,
>> >rather than the db (which is pretty much upside down from what this
>> >patch is trying to accomplish, but, anyway), simply change your
>> >/etc/nsswitch.conf file accordingly.  Just as on Linux.
>>
>> :-) My /etc/nsswitch.conf file ALREADY specifies 'db_enum: files'.
>>
>> However, as you probably aware of, the output of 'id' _still_ shows all
>> the (non-file ;-) supplementary groups I do not care about ...
>>
>> That is what I tried to make clear with my message. Nothing more.
>
>Try
>
>  passwd: files
>  group: files
>
>The output of `id' has nothing to do with the getpwent/getgrent
>functionality db_enum is about.

Sorry, sorry, sorry (yes, I tried). How stupid of me. Thank you, thank you!

Apparently, I must learn how to read ... (shame on me!).

Thanks again, Henri


--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

^ permalink raw reply	[flat|nested] 161+ messages in thread
* Re: Testers needed: New passwd/group handling in Cygwin
@ 2014-02-20 19:05 J.H. vd Water
  2014-02-20 19:23 ` Corinna Vinschen
  0 siblings, 1 reply; 161+ messages in thread
From: J.H. vd Water @ 2014-02-20 19:05 UTC (permalink / raw)
  To: cygwin

Hi Corinna,

>> However, as you know, the supplementary group to which I referred above do NOT show
>> up in my /etc/group file on Cygwin (they show up in SAM ... somewhere).
>>
>> ... and I do not care, as these groups are NOT relevant to me as a Cygwin-only user
>> of the Windows operating system (using passwd and group files).
>
>If you only want to use the content of your passwd and group files,
>rather than the db (which is pretty much upside down from what this
>patch is trying to accomplish, but, anyway), simply change your
>/etc/nsswitch.conf file accordingly.  Just as on Linux.

:-) My /etc/nsswitch.conf file ALREADY specifies 'db_enum: files'.

However, as you probably aware of, the output of 'id' _still_ shows all
the (non-file ;-) supplementary groups I do not care about ...

That is what I tried to make clear with my message. No more.

Henri



--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

^ permalink raw reply	[flat|nested] 161+ messages in thread
* Re: Testers needed: New passwd/group handling in Cygwin
@ 2014-02-20 13:34 J.H. vd Water
  2014-02-20 14:57 ` Corinna Vinschen
  0 siblings, 1 reply; 161+ messages in thread
From: J.H. vd Water @ 2014-02-20 13:34 UTC (permalink / raw)
  To: cygwin

Hi Corinna,

>> Now that the XP bug is out of the way ... I would like come back to the change in
>> the output of 'id'.
>>
>> Obviously, everything after '545(Users),' in the output of 'id' are "well-known"
>> concepts (Windows) to you (but, not to me) ...
>
>I explained that in my mail and I already wrote
>http://cygwin.com/cygwin-ug-net/ntsec.html at one point.
[snip]

Yes, yes, yes :-) I have read all that a long time ago ...

>The group concept in Windows isn't much different from the group concept in Unix,
> except that Windows applications don't really care for the owning group of objects,
> typically.

Agreed.
[snip]

>> But as an Unix adept, I do not really care about the stuff after '545(Users),' in
>> the output of 'id', especially in case of a passwd file and a group file.
>>
>> To me the stuff after '545(Users),' is ... well, superfluous (most certainly, most
>> of the time).

>I don't know about you, but on my Linux box I get something like this:
>
>  $ id
>  uid=500(corinna) gid=11125(vinschen) groups=11125(vinschen),33(tape),
>  100(users),107(qemu),486(wireshark),1000(cvs),11126(libvirt)
>
>Most of the time I don't care about the supplementary groups after my
>primary group either, but that doesn't mean I don't want id to print
>them, nor are they unimportant.

Agreed, the supplementary groups I observe on Unix are relevant to me ... I know
that out of experience.

The difference is, that all supplementary groups show up in the /etc/group file on
my Unix box ...

However, as you know, the supplementary group to which I referred above do NOT show
up in my /etc/group file on Cygwin (they show up in SAM ... somewhere).

... and I do not care, as these groups are NOT relevant to me as a Cygwin-only user
of the Windows operating system (using passwd and group files).

Sorry, for having a different opinion on the matter.

Henri


--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

^ permalink raw reply	[flat|nested] 161+ messages in thread
* Re: Testers needed: New passwd/group handling in Cygwin
@ 2014-02-20 12:04 J.H. vd Water
  2014-02-20 13:16 ` Corinna Vinschen
  0 siblings, 1 reply; 161+ messages in thread
From: J.H. vd Water @ 2014-02-20 12:04 UTC (permalink / raw)
  To: cygwin

Hi Corinna,

>> What I meant was:
>>
>> The output of 'id' in my "regular setup" shows:
>>
>> @@# id
>> uid=1003(Henri) gid=513(None) groups=513(None),0(root),544(Administrators),545(Users)
>>
>> The output of 'id' in the "test setup" shows:
>>
>> $ id
>> uid=1003(Henri) gid=513(None) groups=513(None),0(root),545(Users),4(+INTERACTIVE),\
>> 11(+AuthenticatedUsers),4095(CurrentSession),66048(+LOCAL)
>>
>> To me the second output is different - but perhaps it is not.
>
>It shows groups which are present in your user token, but which are
>not in your /etc/group file.

Now that the XP bug is out of the way ... I would like come back to the change in
the output of 'id'.

Obviously, everything after '545(Users),' in the output of 'id' are "well-known"
concepts (Windows) to you (but, not to me) ...

... and I know Cygwin is not Linux/Unix ...

But as an Unix adept, I do not really care about the stuff after '545(Users),' in
the output of 'id', especially in case of a passwd file and a group file.

To me the stuff after '545(Users),' is ... well, superfluous (most certainly, most
of the time).

Perhaps other users think likewise ...

Henri


--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

^ permalink raw reply	[flat|nested] 161+ messages in thread
* Re: Testers needed: New passwd/group handling in Cygwin
@ 2014-02-19 11:48 J.H. vd Water
  2014-02-19 15:47 ` Andrey Repin
  2014-02-19 19:20 ` Corinna Vinschen
  0 siblings, 2 replies; 161+ messages in thread
From: J.H. vd Water @ 2014-02-19 11:48 UTC (permalink / raw)
  To: cygwin

Hi Corinna,

(Sorry, have't found time to properly subscribe to the list, yet)

>> Both cases show the same output:
>>
>> $ ./lsa
>> pdom name: <WORKGROUP> dnsname: <(null)>, sid: 0x0
>> adom name: <XP> sid: 0x246058

I "lied" here :-) The non-admin case showed: ... sid: 0x246060
(So, almost the same)

>Huh.  This looks entirely normal and expected.  Which makes the
>SEGV even more weird.  I'm apparently missing something here.
>
>> Perhaps, it is best to stop here for the moment ... There must be more pressing
>> things on your list.
>
>No, there aren't.  This testing is very important.  I'd like to
>have such crashes like yours fixed before this new code gets
>released.

>> Moreover, I already decided to use 'db_enum: files' in /etc/nssswitch.conf (and
>> XP is a thing of the past, is it not?).

But who will still be using XP within a company after after april 2014?'. So, does
have XP priority? Your decision, of course ...

>I'm going to make some tests on XP, but if I can't track this down,
>would you mind if I send you a test Cygwin DLL with extended debug
>output to help tracking it down?

The best thing to do, I believe, if you want to fix 'XP' (my machine may turn out
to be a "misfit").

However, I have started afresh with the 18/2 snapshot ...

Same result: getpwent crashed (db_enum: local) ... getgrent is ok.

Send me a cygwin1.dll? Ok, if you tell me how to handle the thing (i.e. include
some pointers to documents that I must read in order to be able to get results).

Henri


--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

^ permalink raw reply	[flat|nested] 161+ messages in thread
* Re: Testers needed: New passwd/group handling in Cygwin
@ 2014-02-19  8:38 J.H. vd Water
  2014-02-19 11:02 ` Corinna Vinschen
  0 siblings, 1 reply; 161+ messages in thread
From: J.H. vd Water @ 2014-02-19  8:38 UTC (permalink / raw)
  To: cygwin

Hi Corinna,

>The crash looks weird.  It looks like your machine doesn't return
>the machine sid when it's requested.  Can you please run the following
>test application as non-admin and as admin and paster the output for
>both cases into your reply?  Hmm, maybe that's a windows XP thingy?
>I didn't test this stuff on anything prior to Vista.

Both cases show the same output:

$ ./lsa
pdom name: <WORKGROUP> dnsname: <(null)>, sid: 0x0
adom name: <XP> sid: 0x246058

Perhaps, it is best to stop here for the moment ... There must be more pressing
things on your list.

Moreover, I already decided to use 'db_enum: files' in /etc/nssswitch.conf (and
XP is a thing of the past, is it not?).

Anyhow, thank you for listening and for your effort.

Henri


--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

^ permalink raw reply	[flat|nested] 161+ messages in thread
* Testers needed: New passwd/group handling in Cygwin
@ 2014-02-18 19:25 Lavrentiev, Anton (NIH/NLM/NCBI) [C]
  2014-02-18 19:35 ` Corinna Vinschen
  0 siblings, 1 reply; 161+ messages in thread
From: Lavrentiev, Anton (NIH/NLM/NCBI) [C] @ 2014-02-18 19:25 UTC (permalink / raw)
  To: cygwin

This will not work (verified!) for code run from under an unmanaged
Windows service account (NT_Service\...), once the machine changes its
password per security policy (the access then becomes anonymous and will
result in only first 100 entries returned):

winsup\cygwin\passwd.cc:
	  else if (group)
	    ret = NetGroupEnum (NULL, 2, (PBYTE *) &buf, MAX_PREFERRED_LENGTH,
				&max, &total, &resume);
	  else
	    ret = NetUserEnum (NULL, 20, FILTER_NORMAL_ACCOUNT, (PBYTE *) &buf,
			       MAX_PREFERRED_LENGTH, &max, &total,
			       (PDWORD) &resume);

This is what I was trying to point out, in my earlier message...

Anton Lavrentiev
Contractor NIH/NLM/NCBI

P.S.  This behavior is obscurely documented in here:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa370610(v=vs.85).aspx
(by the virtue of that page is pointed to from NetUserEnum and NetGroupEnum:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa370652(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/aa370428(v=vs.85).aspx)

<quote>
The number of entries returned by this function depends on the security descriptor located on the root domain object. The API will return either the first 100 entries or the entire set of entries in the domain, depending on the access privileges of the user. The ACE used to control this behavior is "SAM-Enumerate-Entire-Domain", and is granted to Authenticated Users by default. Administrators can modify this setting to allow users to enumerate the entire domain.
</quote>

The bad thing is that there is error indication at reaching the 100,
so it just looks like your environment has suddenly reduced to exactly 100
users...


--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

^ permalink raw reply	[flat|nested] 161+ messages in thread
* Re: Testers needed: New passwd/group handling in Cygwin
@ 2014-02-18 19:08 J.H. vd Water
  2014-02-18 19:18 ` Corinna Vinschen
  0 siblings, 1 reply; 161+ messages in thread
From: J.H. vd Water @ 2014-02-18 19:08 UTC (permalink / raw)
  To: cygwin

Hi Corinna,

>> After I had set up /etc/nsswitch.conf as follows
>>
>> db_enum: files
>>
>> the output of getpwent and getgrent looked "familiar" to me. (though the
>> output of 'id' is not).
>
>In how far?  Did you read my text in terms of how user and group names
>are created?  The leading separator char for builtin groups is an SFU

Read and understand your text completely? No.

>thingy.  If it's too disturbing we can discuss changing that, but right
>now I'm still looking for some kind of similarity.

What I meant was:

The output of 'id' in my "regular setup" shows:

@@# id
uid=1003(Henri) gid=513(None) groups=513(None),0(root),544(Administrators),545(Users)

The output of 'id' in the "test setup" shows:

$ id
uid=1003(Henri) gid=513(None) groups=513(None),0(root),545(Users),4(+INTERACTIVE),\
11(+AuthenticatedUsers),4095CurrentSession),66048(+LOCAL)

To me the second output is different - but perhaps it is not.

Henri




--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

^ permalink raw reply	[flat|nested] 161+ messages in thread
* Re: Testers needed: New passwd/group handling in Cygwin
@ 2014-02-18 18:44 J.H. vd Water
  2014-02-18 19:13 ` Corinna Vinschen
  0 siblings, 1 reply; 161+ messages in thread
From: J.H. vd Water @ 2014-02-18 18:44 UTC (permalink / raw)
  To: cygwin

[-- Attachment #1: Type: text/plain, Size: 493 bytes --]

Hi Corinna,

To answer some of your questions ...

>> How did you build getpwent?  Did you stop your Cygwin shell and restart
>> it?  Can you please send the getpwent.exe.stackdump file?

I used my "regular" setup of Cygwin to compile the sourcefile. Perhaps it is
there where I went wrong.

gcc -o getpwent -Wall -std=c99 -fno-builtin -pedantic getpwent.c

And, yes, I restarted my Cygwin shell.

>And, is the machine a domain member machine or not?

No, not a member of any domain ...

Henri

[-- Attachment #2: getpwent.exe.stackdump --]
[-- Type: application/octet-stream, Size: 886 bytes --]

Exception: STATUS_ACCESS_VIOLATION at eip=610A2418
eax=00000001 ebx=0022AB94 ecx=7C809A0D edx=00000000 esi=61268128 edi=61268120
ebp=0022ABD8 esp=0022AB54 program=E:\Cygwin17\home\Henri\test\getpwent.exe, pid 448, thread main
cs=001B ds=0023 es=0023 fs=003B gs=0000 ss=0023
Stack trace:
Frame     Function  Args
0022ABD8  610A2418 (61268120, 00000000, 00000000, 00000000)
0022AC78  610A32D8 (00000001, 0022AC9C, 20010100, 61007FDA)
0022AD28  61008039 (00000000, 0022CDB4, 610071D0, 00000000)
0022CD88  61005E84 (0022CDB4, 00000000, 00000000, 00000000)
0022FF58  61005FF6 (610071D0, 00000000, 00000003, B7EEDC8C)
0022FF78  61006F54 (00401190, 00000000, 005C0000, E1300C00)
0022FF98  00401252 (00401190, 00000006, B7EEDD08, B7EEDD08)
0022FFC0  00401015 (00000000, 0000006D, 7FFDC000, 805512FA)
0022FFF0  7C81776F (00401000, 00000000, 78746341, 00000020)
End of stack trace

[-- Attachment #3: Type: text/plain, Size: 218 bytes --]

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

^ permalink raw reply	[flat|nested] 161+ messages in thread
* Re: Testers needed: New passwd/group handling in Cygwin
@ 2014-02-18 17:48 J.H. vd Water
  2014-02-18 17:54 ` Corinna Vinschen
  0 siblings, 1 reply; 161+ messages in thread
From: J.H. vd Water @ 2014-02-18 17:48 UTC (permalink / raw)
  To: cygwin

>> this week I applied the first incarnation of the new passwd/group
>> handling code to the Cygwin repository and after fixing a crash which
>> manifested in Denis Excoffier's network, I think we're at a point
>> which allows to push this forward.
>> [...]
>
>Ok guys, I just applied a patch implementing getpwent and getgrent,
>and the way to configure the output is probably more detailed than
>you ever wanted ...

Hi Corinna,

As I saw no response to your latest call for testers,  I decided to test it
myself ... (x86-XP, SP3).

 - setup "Cygwin" (base) in a different directory
 - applied tar ball (17/2 snapshot) as instructed at

   http://cygwin.com/faq-nochunks.html#faq.setup.snapshots

After I had set up /etc/nsswitch.conf as follows

db_enum: files

the output of getpwent and getgrent looked "familiar" to me. (though the
output of 'id' is not).

However, after I had modified /etc/nsswitch.conf as follows

db_enum: local

getpwent crashed (segment violation) ...

Henri


--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

^ permalink raw reply	[flat|nested] 161+ messages in thread
* Testers needed:  New passwd/group handling in Cygwin
@ 2014-02-13 14:44 Corinna Vinschen
  2014-02-13 16:05 ` Steven Penny
                   ` (7 more replies)
  0 siblings, 8 replies; 161+ messages in thread
From: Corinna Vinschen @ 2014-02-13 14:44 UTC (permalink / raw)
  To: cygwin

[-- Attachment #1: Type: text/plain, Size: 27960 bytes --]

Hi folks,


this week I applied the first incarnation of the new passwd/group
handling code to the Cygwin repository and after fixing a crash which
manifested in Denis Excoffier's network, I think we're at a point
which allows to push this forward.

This is a pretty intrusive change, in need of some serious testing, so
I'd like to ask for volunteers.  The latest 2014-02-13 snapshot from
http://cygwin.com/snapshots/ contains the changes, including the latest
bugfix.

If you're interested in helping, please read on.  It's a long text, but
I feel it's necessary to explain how this works, so you get a grasp of
what to look out for.  In the long run, this is the basis for the
documentation to go into the User's Guide.

----------------------------------------------------------------------
Please note:

If you have questions or comments, please do *NOT* full quote this mail!
Just quote the important text snippet and ask away.

Thanks for considering.
----------------------------------------------------------------------

Did I mention that this mail is *really* long?  Sorry about that, but I
don't see how to explain all the details otherwise.  Fetch yourself some
drink, preferredly some strong coffee or tea.

Oh, and there be footnotes[0].

===========================
So, what is this all about?
===========================

For as long as Cygwin has existed, it has stored user and group
information in /etc/passwd and /etc/group files.  Under the assumption
that these files would never be too large, the first process in a
process tree, as well as every execing process within the tree would
parse them into structures in memory.  Thus every Cygwin process would
contain an expanded copy of the full information from /etc/passwd and
/etc/group.

This approach has a few downsides.  One of them is that the idea to have
always small files is flawed.  Another one is that reading the entire
file is most of the time entirely useless, since most processes only
need information on their own user and the primary group.  Last but not
least, the passwd and group files have to be maintained separately from
the already existing Windows user databases, the local SAM and Active
Directory.

On the other hand, we have to have a mapping between Windows SIDs and
POSIX uid/gid values (for how this works in Cygwin so far, see [1]), so
we rely on some mechanism to convert SIDs to uid/gid values and vice
versa.

Microsoft's "Services for UNIX" (SFU) (which are deprecated since
Windows 8/Server 2012) never used passwd/group files.  Rather, SFU used
a fixed, computational mapping between SIDs and POSIX uid/gid.  It
allows to generate uid/gid values from SIDs and vice versa.  The
mechanism is documented, albeit in a confusing way and spread over
multiple MSDN articles.  For my changes, I took the liberty to clone the
mapping, with a tiny difference for backward compatibility with existing
Cygwin applications.

===================================
Yes, yes, but how does it work now?
===================================

You *are* comfortable with the concept of SIDs and RIDs, right?  If not,
please read [1] again.  I'll wait...  Finished?  Ok, let's start.

Cygwin's new mapping between SIDs and uid/gid values works in two ways.

- Read /etc/passwd and /etc/group files, like before, mainly for
  backward compatibility.

- If no files are present, or if an entry is missing in the files,
  ask Windows.

At least, that's the default behaviour now.  It will be configurable
using a file /etc/nsswitch.conf, but I'm getting ahead of myself.
Let's stick to the default for now.

If files are present, they will be scanned on demand as soon as a
mapping from SIDs to uid/gid or user names is required.  The new
mechanism will never read the entire file into memory, but only scan
for the requested entry and cache this one in memory[2].

If no entry is found, or no passwd or group file was present, Cygwin
will ask the OS.

  Note:  If the first process in a Cygwin process tree determines
         that no passwd or group file is present, no other process
	 in the entire process tree will try to read the files later
	 on.  This is done for self-preservation.  It's kind of bad
	 if the uid or gid of a user changes during the ride.

So if we've drawn a blank reading the files, we're going to ask the OS.
First thing, we ask the local machine for the SID or the user name. 
The OS functions (LookupAccountSid/LookupAccountName[3]) are kind of
intelligent.  They have all the stuff built in to ask for any account
of the local machine, the Active Directory domain of the machine,
the Global Catalog of the forest of the domain, as well as any
trusted domain of our forest for the information.  One OS call and we're
practically done.  Except...

...the calls only return the mapping between SID, account name and the
account's domain.  We don't have a mapping to POSIX uid/gid and we're
missing information on the user's home dir and login shell.  Let's
discuss the SID<=>uid/gid mapping first.

Here's how the SID<=>uid/gid mapping works.  If you're fuzzy on the
existing well-known SIDs, see [4].

- Well-known SIDs in the NT_AUTHORITY domain of the S-1-5-RID type,
  or aliases of the S-1-5-32-RID type are mapped to the uid/gid value
  RID[5].
  
  Examples:

    "SYSTEM" S-1-5-18     <=> uid/gid: 18
    "Users"  S-1-5-32-545 <=> uid/gid: 545

- Other well-known SIDs in the NT_AUTHORITY domain (S-1-5-X-RID):

    S-1-5-X-RID           <=> uid/gid: 0x1000 * X + RID

  Example:

    "NTLM Authentication"
    S-1-5-64-10           <=> uid/gid: 0x4000A == 262154

- Other well-known SIDs:

    S-1-X-Y               <=> uid/gid: 0x10000 + 0x100 * X + Y

  Example:

    "LOCAL" S-1-2-0       <=> uid/gid: 0x10200 == 66048
    "Creator Group"
    S-1-3-1               <=> uid/gid: 0x10301 == 66305

- Logon SIDs:

    The own LogonSid is converted to the fixed uid 0xfff == 4095 and
    named "CurrentSession".
    Any other LogonSid is converted to the fixed uid 0xffe == 4094
    and named "OtherSession".

- Mandatory Labels:

    S-1-16-RID            <=> uid/gid: 0x60000 + RID

  Example:

    "Medium Mandatory Level"
    S-1-16-8192           <=> uid/gid: 0x62000 == 401408

- Accounts from the local machine's user DB (SAM):

    S-1-5-21-X-Y-Z-RID    <=> 0x30000 + RID

  Example:

    "Administrator"
    S-1-5-X-Y-Z-500       <=> uid/gid: 0x301f4 == 197108

- Accounts from the machine's primary domain:
  
    S-1-5-21-X-Y-Z-RID    <=> 0x100000 + RID

  Example:

    "Domain Users"
    S-1-5-X-Y-Z-513       <=> 0x100201 == 1049089

- Accounts from a trusted domain of the machine's primary domain:

    S-1-5-21-X-Y-Z-RID    <=> trustPosixOffset(domain) + RID

  Hang on... "trustPosixOffset"?  Uh, yes.  This value exists in Windows
  domains already since before Active Directory days.  What happens is
  this.  If you create a domain trust between two domains, a
  trustedDomain entry will be added to both databases.  It describes
  how *this* domain trusts the *other* domain.  One attribute of a trust
  is a 32 bit value called "trustPosixOffset"  For each new trust,
  trustPosixOffset will get some automatic value.  In recent AD domain
  implementations, the first trusted domain will get trustPosixOffset
  set to 0x80000000.  Following domains will get lower values.  Also,
  the domain admins are allowed to set the trustPosixOffset value for
  each trusted domain to some arbitrary 32 bit value, thus allowing any
  kind of collisions between the trustPosixOffsets of domains.  Nice,
  isn't it?  Anyway, as the user of this value, we have to *trust*
  the domain admins to set trustPosixOffset to sensible values, or
  to leave it alone.

  So, for the first (or only) trusted domain of your domain, the
  automatic offset is 0x80000000.  An example for a user of that trusted
  domain is:

    S-1-5-X-Y-Z-1234         <=> uid/gid 0x800004d2 == 2147484882

  There's only one problem with this approach.  Assuming you're
  running in the context of a local user on a domain member machine.
  Local users don't have the right to fetch this kind of domain
  information from the DC, they'll get permission denied.  In this
  case Cygwin will fake a, mostly, sensible trustPosixOffset value
  for this session.

- Local accounts from another machine in the network:

  There's no SID<=>uid/gid mapping implemented for this case.  The
  problem is, there's no way to generate a bijective mapping.  There's
  no central place which keeps an analogue value of the trustPosixOffset,
  and there's the additional problem that the LookupAccountSid and
  LookupAccountName functions cannnot resolve the SIDs, unless they know
  the name of the machine this SID comes from.  And even then it will
  probably suffer a "Permission denied" when trying to ask the machine
  for its local account.

  SFU just prints the account RID in this case, Cygwin maps the account
  to the fake accounts "Unknown+User"/"Unknown+Group" with uid/gid -1.

Ok, now we have a semi-bijective mapping between SIDs and POSIX
uid/gid values, but, given that we have potentially users and groups in
different domains having the same name, how do we uniquely differ
between them by name?  Well, we can do that by making their names
unique in a per-machine way.  Dependent on the domain membership of
the account, and dependent of the machine being a domain member or not,
the user and group names will be generated using a domain prefix and
a separator character between domain and account name.  The default
separator character is the plus sign, '+', as in SFU.

- Well-known SIDs will have the separator character prepended:

    "+SYSTEM", "+LOCAL", "+Medium Mandatory Level", ...

- If the machine is no domain member machine, only local accounts
  can be resolved into names, so for ease of use, just the account names
  are used as Cygwin user/group names:

    "corinna", "bigfoot", "None", ...

- If the machine is a domain member machine, all accounts from
  the primary domain of the machine are mapped to Cygwin names
  without domain prefix:

    "corinna", "bigfoot", "Domain Users", ...

  while accounts from other domains are prepended by their domain:

    "DOMAIN1+corinna", "DOMAIN2+bigfoot", "DOMAIN3+Domain Users", ...

- Local machine accounts of a domain member machine get a Cygwin user
  name the same way as accounts from another domain:  The local machine
  name gets prepended:

    "MYMACHINE+corinna", "MYMACHINE+bigfoot", "MYMACHINE+None", ...

- If LookupAccountSid fails, Cygwin checks the accounts against the
  known trusted domains.  If the account is from one of the trusted
  domains, an artificial account name is created.  It consists of
  the domain name, and a special name created from the account RID:

    "MY_DOM+User(1234)", "MY_DOM+Group(5678)"

  Otherwise we know nothing about this SID, so it will be mapped to
  the fake accounts "Unknown+User"/"Unknown+Group" with uid/gid -1.

Any questions?  No?  Ok, let's have a short break and then, next point.

[...5 minutes commercials...]

==========================================
Cygwin user names, home dirs, login shells
==========================================

"That's all very interesting" you think (if you're still awake, that
is), "but passwd entries consist of more than just uids.  What's up
with that?"

Obviously, if you don't maintain passwd and group files, you need
to have a way to maintain the other fields of a passwd entry as well.
Three things come to mind:

- You want to use a Cygwin user name different from your Windows
  user name.

- You want a home dir different from the default /home/$USER.

- You want to specify a different login shell than /bin/sh.

How this is done depends on your account being a domain account or a
local account.  Let's start with the default.  Assuming your Windows
account name is "bigfoot" and your domain is "MY_DOM".  Your default
passwd entry in absence of anything I'll describe below looks like this:

  bigfoot:*:<uid>:<gid>:U-MY_DOM\bigfoot,S-1-5-....:/home/bigfoot:/bin/sh

or, if your account is from a different domain than the primary domain of
the machine:

  MY_DOM+bigfoot:*:<uid>:<gid>:U-MY_DOM\bigfoot,S-1-5-....:/home/bigfoot:/bin/sh

Yes, the default homedir is still /home/bigfoot.

If your account is a domain account:

  Either create an /etc/passwd and/or /etc/group file with entries for
  your account and use that, just as before.

  Or, Cygwin will utilize the posixAccount/posixGroup attributes per RFC
  2307[6].  These attributes are by default available in Active Directory
  since Windows Server 2003 R2.  They are "not set", unless utilized by
  the (deprecated since Server 2012 R2) Active Directory "Server for
  NIS" feature.  The user attributes utilized by Cygwin are:

    uid                If set, will be used as Cygwin user name.
    uidNumber          See next section.
    gecos              Content will be added to the pw_gecos field.
    unixHomeDirectory  If set, will be used as Cygwin home directory.
    loginShell         If set, will be used as Cygwin login shell.

  The group attributes utilized by Cygwin are:

    cn                 If set, will be used as Cygwin group name.
    gidNumber          See next section.

  Apart from power shell scripting or inventing new CLI tools, these
  attributes can be changed using the "Attribute Editor" tab in the user
  properties dialog of the "Active Directory Users and Computers"
  MMC snap-in.  Alternatively, if the "Server for NIS" administration
  feature has been installed, ther will be a "UNIX Attributes" tab which
  contains the required fields, except for the gecos field, which isn't
  really important anyway.  Last resort is "ADSI Edit".

  The primary group of a user is always the Windows primary group set in
  Active Directory and can't be changed.

If your machine is not a domain member machine or your account is a
local account for some reason:

  Either create an /etc/passwd and/or /etc/group file with entries for
  your account and use that, just as before.

  Or enter the information into the "Comment" field of your local user
  entry.  In the "Local Users and Groups" MMC snap-in it's called
  "Description".

  You can utilze this field even if you're running a "home edition" of
  Windows, using the command line.  The "net user" command allows to set
  all values in the SAM, even if the GUI is crippled.

  A Cygwin SAM comment entry looks like this:

    <cygwin key="value" key="value" [...] />

  The supported keys are

    name="value"      Sets the Cygwin user name to value.

    home="value"      Sets the Cygwin home dir to value.

    shell="value"     Sets the Cygwin login shell to value.

    group="value"     Sets the Cygwin primary group of the account
                      to value, provided that the user *is* already
                      a member of that group.  This allows to
                      override the default "None" primary group for
                      local accounts.
		      One nice idea here is, for instance group="Users".
		      This is the *Windows* name of the group, not the
		      Cygwin name, assuming they differ.

    unix="value"      Sets the NFS/Samba uid of the user to the decimal
                      value.  See the next chapter.

  The <cygwin .../> string can start at any point in the comment, but
  you have to follow the rules:

  - It starts with "<cygwin " and ends with "/>".
  - The "cygwin" string and the key names have to be lowercase.
  - No spaces between key and "value", just the equal sign.
  - The value must be placed within double quotes and it must not
    contain a double quote itself.  The double quotes are required
    for the decimal values as well!

  CMD example:

    net use corinna /comment:"<cygwin home=\"/home/foo\"/>"

  Bash example (use single quotes):

    net use corinna /comment:'<cygwin home="/home/foo"/>'

  For changing group comments, use the `net localgroup' command.  The
  supported key/value pair for groups are

    name="value"      Sets the Cygwin group name to value.

    unix="value"      Sets the NFS/Samba gid of the group to the
                      decimal value.  See the next chapter.


=============================
NFS and Samba account mapping
=============================

If you're using Microsoft's NFS client to access UNIX shares, like me,
you might have been bothered by each file on the share seemingly being
yours.  The reason for this is that Microsoft's NFS client does not map
the uid/gid values on the NFS shares to SIDs.  There's no such thing as
a (fake) security descriptor returned to the application.  Rather, via
an undocumented API you can fetch RFC 1813 compatible NFSv3 stat
information from the share[7].  This is what Cygwin is using to show
stat information for files on NFS shares.

The problem is this.  While all other information in this stat record,
like timestamps, or file size etc., can be used by Cygwin, Cygwin had no
way to map the values of the st_uid and st_gid members to a Windows SID.
So it just faked the file owner info and claimed that it's you.

However, SFU has, over time, developed multiple methods to map UNIX
uid/gid values on NFS shares to Windows SIDs.  You'll find the full
documentation of the mapping methods in [8].

Cygwin now utilizes the RFC 2307 mapping for this purpose.  This is most
of the time provided by an AD domain, but it could also be a standalone
LDAP mapping server.  Per RFC 2307, the uid is in the attribute
uidNumber.  For groups, the gid is in the gidNumber attribute.

When Cygwin stat's files on an NFS share, it asks the mapping server via
LDAP in two different ways, depending on the role of the mapping server.

- If the server is an AD domain controller, it asks for an account with
  uidNumber attribute == st_uid field of the stat record returned by
  NFS.  If an account matches, AD returns the Windows SID, so we have an
  immediate mapping from UNIX uid to a Windows SID, if the user account
  has a valid uidNumber attribute.  For groups, the method is the same,
  just that Cygwin asks for a group with gidNumber attribute == st_gid
  field of the stat record.

- If the server is a standalone LDAP mapping server Cygwin asks for
  the same uidNumber/gidNumber attributes, but it can't expect that
  the LDAP server knows anything about Windows SIDs.  Rather, the
  mapping server returns the account name.  Cygwin then asks the DC for
  an account with this name, and if that succeeds, we have a mapping
  between UNIX uid/gid and Windows SIDs.
  
The mapping will be cached for the lifetime of the process, and inherited
by child processes.

And what about Samba?

A fully set up Samba with domain integration is running winbindd to
map Window SIDs to artificially created UNIX uids and gids, and this
mapping is transparent within the domain, so Cygwin doesn't have to do
anything special.

However, setting up winbindd isn't for everybody, and it fails to map
Windows accounts to already existing UNIX users or groups.  In contrast
to NFS, Samba returns security descriptors, but unmapped UNIX accounts
get special SIDs:

- A UNIX user account with uid X is mapped to the Windows SID S-1-22-1-X.

- A UNIX group account with gid X is mapped to SID S-1-22-2-X.

As you can see, even though we have SIDs, they just reflect the actual
uid/gid values on the UNIX box in the RID value.  It's only marginally
different from the NFS method, so... why not just do the same rote as
for NFS?

That's what Cygwin will do.  If it encounters a S-1-22-x-y SID, it
will perform the same RFC 2307 mapping as for NFS shares.

Hang on.  What about home users without any Windows domain or LDAP
server per RFC 2307, but with a Linux machine running Samba?

Not all is lost.  If you're a user on a standalone machine, you
can add this information to your SAM account.  Assuming the uid of
your Linux user account is 505 and the gid of your primary group is,
say, 100, just add the values to your SAM user and group accounts.

The following example assumes you didn't already add something else
to the comment field.

To your user's SAM comment (remember: called "Description" in the GUI),
add:

  <cygwin group="Users" unix="505"/>

To the user's group SAM comment add:

  <cygwin unix="100"/>

This should be sufficient to work on your Samba share and to see
all files owned by your Linux user account as your files.


======================================================================
The /etc/nsswitch.conf file
===========================

Last, but not least, let's talk about a way to configure how the
stuff works on your machine.  On Linux and some other UNIXy OSes,
we have a file called /etc/nsswitch.conf[9].  One part of it is to
specify how the passwd and group entries are generated.  That's
what Cygwin now provides as well.

The /etc/nsswitch.conf file is optional.  If you don't have one,
Cygwin uses sensible defaults.

  Note:  The /etc/nsswitch.conf file is read exactly once by the first
         process of a Cygwin process tree.  If there was no
         /etc/nsswitch.conf file when this first process started, then
         no other process in the running Cygwin process trees will try
         to read the file.  If you create or change /etc/nsswitch.conf,
         make sure to stop and restart all Cygwin processes to pick up
         the change.

So, what mischief can we perform with /etc/nsswitch.conf?  To explain,
lets have a look into an /etc/nsswitch.conf file set up to all default
values:

  # /etc/nsswitch.conf
  passwd: files db
  group:  files db

  db_prefix:    auto
  db_separator: +
  db_cache:     yes

The first line, starting with a hash '#' is a comment.  The hash
sign starts a comment, just as in shell scripts.  Everything up to
the end of the line is ignored.  So this:

  foo:  bar # baz

means, for the entry foo, do bar, ignore everything after the hash sign,
so baz is only a comment.

The other lines define the available settings.  The first word up to a
colon is a keyword.  Note that the colon *must* follow immediately after
the keyword.  This is a valid line:

  foo: bar

This is not valid:

  foo  :  bar

Apart from this restriction, the reminder of the line can have as
may spaces and TABs as you like.  This is a valid line:

        foo:                       bar                baz

Now let's have a look at the available keywords and settings.

The two lines starting with the keywords "passwd" and "group" define
where Cygwin gets its passwd and group information from.  "files" means,
fetch the information from the corresponding file in the /etc directory.
"db" means, fetch the information from the Windows account databases,
the SAM for local accounts, Active Directory for domain account.
Examples:

  passwd: files

Read passwd entries only from /etc/passwd.

  group: db

Read group entries only from SAM/AD.

  group: files # db

Read group entries only from /etc/group ("db" is ignored due to the
preceding hash sign).

  passwd: files db

Read passwd entries from /etc/passwd.  If a user account isn't found,
try to find it in SAM or AD.  This is the default for both, passwd
and group information.

  group: db files

This is a valid entry, but the order will be ignored by Cygwin.  If
both, files and db are specified, Cygwin will always try the files
first, then the db.

The remaining entries define certain aspects of the Windows account
database search.  "db_prefix" determines how the Cygwin user or group
name is created:

  db_prefix: auto

    This is the default.  If your account is from the primary domain of
    your machine, or if your machine is a standalone machine (not a domain
    member), your Cygwin account name is just the Windows account
    name.
    If your account is from another domain, or if you're logged in as
    local user on a domain machine, the Cygwin username will be the
    combination of Windows domainname and username, with the separator
    char in between:

      MY_DOM+username      (foreign domain)
      MACHINE+username     (local account)
    
    Builtin accounts have just the separator char prepended:

      +LOCAL
      +Users

    Unknown accounts on NFS or Samba shares (that is, accounts which
    cannot be mapped to Windows user accounts via RFC 2307) get a
    Cygwin account name consisting of the artificial domains "UNIX_User"
    or "UNIX_Group" and the uid/gid value, for instance:

      UNIX_User+0          (root)
      UNIX_Group+10        (wheel)

  db_prefx: primary

    Like "auto", but primary domain accounts will be prepended by
    the domainname as well.

  db_prefix: always

    All accounts, even the builtin accounts, will have the domain
    name prepended:

      BUILTIN+Users

    As a special case, if the Cygwin account name differs from the
    Windows account name, it will be prepended by the artificial domain
    name "Posix_User" or "Posix_Group" if db_prefix is set to "always":

      Posix_User+cygwin_user_name
      Posix_Group+cygwin_group_name

"db_separator" defines the spearator char used to prepend the domain
name to the user or group name.  The default is '+':

    MY_DOM+username

With "db_separator", you can define any ASCII char except space,
tab, carriage return, line feed, and the colon, as separator char.
Example:

  db_separator: \

    MY_DOM\username

"db_cache" allows to specify if user and group data should be cached in
the process at all or not.  Default is "yes".  "no" is an experimental
feature.  The idea is this.  Assuming you're working in a volatile
domain environment, and you have long-running processes like sshd.
You might want sshd to recognize changes in the existing user entries
as soon as they occur.  Caching user data in sshd *might* not be helpful
in such a scenario.  However, the user data which gets changed a lot
is typically *not* the data required for login purposes, except for
the password, and that doesn't matter in Cygwin's case.  So take this
feature with a grain of salt.

==========
Footnotes:
==========

[0] Not dragons.  Just a test.

[1] http://cygwin.com/cygwin-ug-net/ntsec.html

[2] This may change.  Right now the file is read in 32K chunks, but
    we could easily read the file in 64K chunks and, if we find the
    file is < 64K anyway, just cache the entire bunch, like before.
    Not implemented yet, but something to keep in mind.

[3] http://msdn.microsoft.com/en-us/library/windows/desktop/aa379166%28v=vs.85%29.aspx
    http://msdn.microsoft.com/en-us/library/windows/desktop/aa379159%28v=vs.85%29.aspx

[4] http://support.microsoft.com/kb/243330

[5] This is where Cygwin differs from SFU.  The reason is that we need
    the old uid/gid values for backward compatibility.  There are Cygwin
    packages (cron, for instance) who rely on the fact that the uid of
    SYSTEM is 18.  In SFU, these accounts get mapped like the other
    built in SIDs.

[6] https://tools.ietf.org/html/rfc2307

[7] https://tools.ietf.org/html/rfc1813

[8] http://msdn.microsoft.com/en-us/library/cc980032.aspx

[9] http://linux.die.net/man/5/nsswitch.conf

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Maintainer                 cygwin AT cygwin DOT com
Red Hat

[-- Attachment #2: Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 161+ messages in thread

end of thread, other threads:[~2014-05-06 20:08 UTC | newest]

Thread overview: 161+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-02-19 21:15 Testers needed: New passwd/group handling in Cygwin J.H. vd Water
2014-02-20 11:24 ` Corinna Vinschen
  -- strict thread matches above, loose matches on Subject: below --
2014-02-21  7:41 J.H. vd Water
2014-02-20 19:05 J.H. vd Water
2014-02-20 19:23 ` Corinna Vinschen
2014-02-20 13:34 J.H. vd Water
2014-02-20 14:57 ` Corinna Vinschen
2014-02-20 12:04 J.H. vd Water
2014-02-20 13:16 ` Corinna Vinschen
2014-02-19 11:48 J.H. vd Water
2014-02-19 15:47 ` Andrey Repin
2014-02-19 16:06   ` J.H. vd Water
2014-02-19 19:20 ` Corinna Vinschen
2014-02-19  8:38 J.H. vd Water
2014-02-19 11:02 ` Corinna Vinschen
2014-02-18 19:25 Lavrentiev, Anton (NIH/NLM/NCBI) [C]
2014-02-18 19:35 ` Corinna Vinschen
2014-02-18 20:02   ` Lavrentiev, Anton (NIH/NLM/NCBI) [C]
2014-02-18 19:08 J.H. vd Water
2014-02-18 19:18 ` Corinna Vinschen
2014-02-18 18:44 J.H. vd Water
2014-02-18 19:13 ` Corinna Vinschen
2014-02-18 17:48 J.H. vd Water
2014-02-18 17:54 ` Corinna Vinschen
2014-02-18 18:14   ` Corinna Vinschen
2014-02-13 14:44 Corinna Vinschen
2014-02-13 16:05 ` Steven Penny
2014-02-13 16:17   ` Corinna Vinschen
2014-02-13 16:20     ` Corinna Vinschen
2014-02-13 16:42   ` Andrey Repin
2014-02-13 18:41     ` Lord Laraby
2014-02-13 18:49       ` Larry Hall (Cygwin)
2014-02-13 19:05         ` Lord Laraby
2014-02-13 19:37         ` Corinna Vinschen
2014-02-13 19:52       ` Andrey Repin
2014-02-14  0:31     ` Warren Young
2014-02-14  7:36       ` Andrey Repin
2014-02-14  8:00       ` Warren Young
2014-02-14  9:47         ` Corinna Vinschen
2014-02-13 19:33 ` Andrey Repin
2014-02-13 19:50   ` Corinna Vinschen
2014-02-13 19:41 ` m0viefreak
2014-02-13 19:56   ` Corinna Vinschen
2014-02-13 22:20   ` David Stacey
2014-02-14  9:05     ` Dave Kilroy
2014-02-14 10:16       ` Corinna Vinschen
2014-02-14 11:00         ` Corinna Vinschen
2014-02-14 13:51           ` Kurt Franke
2014-02-14 14:05             ` Corinna Vinschen
2014-02-14  9:49     ` Corinna Vinschen
2014-02-14  6:40 ` Warren Young
2014-02-14 10:48   ` Corinna Vinschen
2014-02-14 12:56     ` Andrey Repin
2014-02-14 14:15       ` Corinna Vinschen
2014-02-14 20:18     ` Warren Young
2014-02-14 21:49       ` Warren Young
2014-02-15 12:52       ` Corinna Vinschen
2014-02-16 11:48         ` Warren Young
2014-02-16 12:00           ` Corinna Vinschen
2014-02-16 14:50             ` Corinna Vinschen
2014-02-16 17:15               ` Christopher Faylor
2014-02-16 18:30                 ` Corinna Vinschen
2014-02-16 16:35             ` Warren Young
2014-02-16 16:53               ` Andrey Repin
2014-02-14 10:20 ` Frank Fesevur
2014-02-14 10:50   ` Corinna Vinschen
2014-02-14 12:05     ` Corinna Vinschen
2014-02-14 14:04       ` Ken Brown
2014-02-14 14:22         ` Corinna Vinschen
2014-02-14 15:23           ` Ken Brown
2014-02-15  2:51     ` Frank Fesevur
2014-02-15 12:56       ` Corinna Vinschen
2014-02-19  9:32         ` Frank Fesevur
2014-02-17 17:25 ` Corinna Vinschen
2014-02-19 15:05   ` Andrey Repin
2014-02-19 18:50     ` Corinna Vinschen
2014-02-19 19:32       ` Andrey Repin
2014-02-19 19:56         ` Corinna Vinschen
2014-02-19 20:27           ` Andrey Repin
2014-02-20 16:02             ` Corinna Vinschen
2014-02-20 17:35               ` Andrey Repin
2014-02-21 15:33   ` Corinna Vinschen
2014-02-21 16:29     ` Ken Brown
2014-02-21 16:31       ` Corinna Vinschen
2014-02-25 18:25 ` Achim Gratz
2014-02-25 19:16   ` Andrey Repin
2014-02-25 20:04     ` Achim Gratz
2014-02-25 20:25   ` Corinna Vinschen
2014-02-25 20:28     ` Achim Gratz
2014-02-25 21:55       ` Corinna Vinschen
2014-02-25 22:59         ` Andrey Repin
2014-02-26  3:09         ` Andrey Repin
2014-02-26 10:02           ` Corinna Vinschen
2014-02-26  9:06         ` Achim Gratz
2014-02-26 10:07           ` Corinna Vinschen
2014-02-26 16:12             ` Corinna Vinschen
2014-02-26 19:14               ` Achim Gratz
2014-02-27  9:08               ` Achim Gratz
2014-02-27  9:49                 ` Achim Gratz
2014-02-27  9:58                   ` Corinna Vinschen
2014-02-27 13:25                     ` Achim Gratz
2014-02-27 15:09                       ` Corinna Vinschen
2014-02-27 23:20                         ` Andrey Repin
2014-02-28 12:09                           ` Corinna Vinschen
2014-02-28 20:10                             ` Achim Gratz
2014-02-28 20:29                               ` Corinna Vinschen
2014-02-28 21:08                                 ` Frank Fesevur
2014-02-28 21:13                                   ` Corinna Vinschen
2014-02-28 21:50                                     ` Corinna Vinschen
2014-03-02 13:21                                     ` Frank Fesevur
2014-03-03  9:21                                       ` Corinna Vinschen
2014-03-03 12:19                                         ` Frank Fesevur
2014-03-03 12:29                                           ` Henry S. Thompson
2014-03-03 13:19                                             ` Corinna Vinschen
2014-03-03 17:06                                         ` Andrey Repin
2014-03-04  8:07                                           ` Warren Young
2014-03-04  8:08                                             ` Andrey Repin
2014-03-04  8:10                                               ` Warren Young
2014-03-04  8:19                                                 ` Corinna Vinschen
2014-03-05 16:47                                                   ` Warren Young
2014-03-05 20:18                                                     ` Andrey Repin
2014-03-05 23:09                                                     ` Corinna Vinschen
2014-03-03 18:24                                         ` Andy Hall
2014-03-01  8:59                                 ` Achim Gratz
2014-02-28 22:35                             ` Andrey Repin
2014-02-28 23:03                               ` Andrey Repin
2014-03-03  9:23                               ` Corinna Vinschen
2014-03-03 14:50                                 ` Andrey Repin
2014-03-03 15:07                                   ` Corinna Vinschen
2014-03-03 15:35                                     ` Andrey Repin
2014-03-03 15:41                                       ` Andrey Repin
2014-03-03 20:50                                     ` Andrey Repin
2014-03-03 22:28                                       ` Andrey Repin
2014-03-03 23:09                                     ` Andrey Repin
2014-03-04  0:37                                       ` Andrey Repin
2014-03-04 11:35                                       ` Corinna Vinschen
2014-02-28 15:49                     ` Achim Gratz
2014-02-28 17:43                       ` Corinna Vinschen
2014-03-10 18:14     ` Achim Gratz
2014-03-10 18:29       ` Corinna Vinschen
2014-03-10 19:21         ` Achim Gratz
2014-03-10 20:11           ` Corinna Vinschen
2014-03-10 20:37             ` Achim Gratz
2014-03-11 11:56               ` Achim Gratz
2014-03-11 12:07                 ` Corinna Vinschen
2014-03-11 12:40                   ` Achim Gratz
2014-03-11 13:37                     ` Corinna Vinschen
2014-03-11 17:06                       ` Achim Gratz
2014-03-11 18:14                         ` Corinna Vinschen
2014-03-11 18:50                           ` Achim Gratz
2014-03-11 19:56                             ` Achim Gratz
2014-03-12  9:27                               ` Corinna Vinschen
2014-03-12 18:00                                 ` Achim Gratz
2014-05-06 20:08                               ` Achim Gratz
2014-03-12  9:23                             ` Corinna Vinschen
2014-02-27 19:08 ` Frank Fesevur
2014-02-27 19:38   ` Andrey Repin
2014-02-27 20:16     ` Corinna Vinschen
2014-02-27 23:36       ` Andrey Repin
2014-02-27 20:10   ` Corinna Vinschen
2014-02-28 14:10     ` Corinna Vinschen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).