Getting Wine to do NTLMSSP authentication and what is needed on the
Samba side
Kai Blin
kai.blin at gmail.com
Sun Jul 2 19:18:56 GMT 2006
Hello folks,
As you might know, I'm a Google SoC student implementing NTLMSSP
signing/sealing in Wine. I've worked on basic NTLM authentication for Wine
last year, using ntlm_auth. This road proved to be a dead end, though, as
ntlm_auth does not support signing or sealing packages.
Thus, after talking with Andrew Bartlett and Jelmer Vernooij on SambaXP 06, I
decided to give Samba4's GENSEC subsystem a try. (This is working pretty
well, and I have a set of patches[1] that make use of GENSEC to do client
side authentication and encryption.)
As it happens, the Wine project is using the LGPL license and Samba is using
the GPL license for this part of the code. The plan was to spin out GENSEC as
a seperate library under the LGPL. Unfortunately, it seems like this is not
as easy as we expected.
Today I was talking to Stefan Metzmacher in IRC and he asked me to give a list
of features I need from this GENSEC library on the mailing list, and here
goes:
* NTLM and, if possible Negotiate authentication client side and server side,
again if possible.
My use case would be Outlook 2003 talking to an MS Exchange 2003 server,
authenticating using NTLM. So the bare minimum I could work with would be
client side NTLM authentication. To have the server side would be a bonus in
the long run.
* Package signing/verifying for NTLM
* Package sealing/unsealing for NTLM
My use case here would be Outlook 2003 from the above scenario signing or
encrypting communication to the Exchange server.
* The chosen solution should ideally be working for Wine in the near future.
Looking at those requirements and talking to a couple of people in
#samba-technical, I see a couple of possible solutions and I depend on your
help for most of them.
1) Spin out the minimal functionality GENSEC library and find a method to
handle server side functionality later. This approach has the downside that I
will be deleting some of the functionality I currently have in Wine, as
ntlm_auth can do server side authentication. On the plus side, it seems that
ntlmssp_server is the part that would be tricky to LGPL, client side seems
easier. I could also keep the old ntlm_auth code around for server side
authentication, which would add bloat to the Wine source, though.
2) Scratch the current approach using GENSEC and add handling of NTLMSSP blobs
to winbind. This would possibly go into Samba 3, and thus be part of a
distribution's Samba package sooner. It would also mean that there is a nice
IPC border between the GPL and the LGPL code, so no problems there. I would
need to rewrite that part of Wine yet again, though.
3) Extend ntlm_auth to also handle signing/sealing and extend the current Wine
code to use ntlm_auth for that, too. This would also keep the GPL and LGPL
code seperate and force me to ditch my current work, but at least I can keep
the stuff I did last year. It would add bloat to ntlm_auth, of course.
4) I could drop using Samba at all and try to extend libntlm[2]. I don't
particularly fancy this idea, but there's a couple of people on the Wine side
who would prefer not to add another dependency to Wine, so it might be easier
to convince Alexandre Julliard to accept that code. I would again mean to
rewrite all the Wine code I wrote so far, plus it smells of reinventing (and
maintaining) the wheel.
Now as I'd like to have some results besides a GPL fork of Wine to show for
this summer of code, I would be willing to pick the solution that will get me
a result first. For solutions 1)-3) I would need the support of the Samba
team, of course.
I am willing to put some work into this on the Samba side, but only if I can
be sure that my patches will get accepted (after a reasonable amount of time
and bug fixes, of course).
So, what would be the preferred solution from the Samba side of things?
Thanks for reading this far, this email got longer than I expected.
Kai
[1] http://www.nowhere-productions.org/code/wine/patches/ (user and password
are "wine" without the quotes, to stop search engines from indexing the
patches, as they're not redistributable)
[2] http://josefsson.org/libntlm/
--
Kai Blin, <kai Dot blin At gmail Dot com>
WorldForge developer http://www.worldforge.org/
Wine developer http://wiki.winehq.org/KaiBlin/
--
Will code for cotton.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
Url : http://lists.samba.org/archive/samba-technical/attachments/20060702/2e377e85/attachment.bin
More information about the samba-technical
mailing list