aboutsummaryrefslogtreecommitdiffstats
path: root/libntlm-0.21/README
diff options
context:
space:
mode:
Diffstat (limited to 'libntlm-0.21/README')
-rw-r--r--libntlm-0.21/README98
1 files changed, 98 insertions, 0 deletions
diff --git a/libntlm-0.21/README b/libntlm-0.21/README
new file mode 100644
index 00000000..2ce20c39
--- /dev/null
+++ b/libntlm-0.21/README
@@ -0,0 +1,98 @@
+
+This directory contains sources for a library which provides
+routines to manipulate the structures used for the client end
+of Microsoft NTLM authentication.
+
+This code was taken mostly from the Samba project and was
+initially intended for use with Microsoft Exchange Server when
+it is configured to require NTLM authentication for clients of
+it's IMAP server.
+
+BUILDING
+
+If you want the library installed in /usr/local/lib and
+the header in /usr/local/include, then
+
+ $ make
+ $ make install
+
+will probably work. Not much effort has been put into making
+this portable, and I only know for sure that it works on i386
+Linux glibc systems -- though there shouldn't be anything all
+that system-specific anywhere. System byte order differences
+should already be taken care of.
+
+TEST PROGRAM
+
+The test directory contains sources for a program named
+"dumper" that will dump out base64 NTLM auth messages in a
+readable format. It will also take a challenge and generate a
+response if provided with a username and password.
+
+USAGE
+
+The application program must convert these structures to/from
+base64 which is used to transfer data for IMAP authentication.
+For example usage see the sources for the mutt MUA or the
+fetchmail package.
+
+In general the usage is something like shown below (no, I don't
+know if this code even compiles, but you get the idea
+hopefully):
+
+
+#include <ntlm.h>
+
+extern char *seqTag; /* IMAP sequence number */
+
+int imap_auth_ntlm(char *user, char *domain, char *pass)
+{
+ tSmbNtlmAuthRequest request;
+ tSmbNtlmAuthChallenge challenge;
+ tSmbNtlmAuthResponse response;
+ char buffer[512];
+ char tmpstr[32];
+
+ writeToServer("%s AUTHENTICATE NTLM\r\n",seqTag);
+ readFromServer(buffer)
+
+ /* buffer should be "+", but we won't show code to check */
+
+ /*
+ * prepare the request, convert to base64, and send it to
+ * the the server. My server didn't care about domain, and NULL
+ * worked fine.
+ */
+
+ buildSmbNtlmAuthRequest(&request,user,domain);
+ convertToBase64(buffer, &request, SmbLength(&request));
+ writeToServer("%s\r\n",buffer);
+
+ /* read challange data from server, convert from base64 */
+
+ readFromServer(buffer);
+
+ /* buffer should contain the string "+ [base 64 data]" */
+
+ convertFromBase64(&challenge, buffer+2);
+
+ /* prepare response, convert to base64, send to server */
+
+ buildSmbNtlmAuthResponse(&challenge, &response, user, pass);
+ convertToBase64(buffer,&response,SmbLength(&response));
+ writeToServer("%s\r\n",buffer);
+
+ /* read line from server, it should be "[seq] OK blah blah blah" */
+
+ readFromServer(buffer);
+
+ sprintf(tmpstr,"%s OK",seqTag);
+
+ if (strncmp(buffer,tmpstr,strlen(tmpstr)))
+ {
+ /* login failed */
+ return -1;
+ }
+
+ return 0;
+}