Add the ratelimit ACL condition. This is mostly reasonably self-contained
[exim.git] / src / src / auths / auth-spa.h
CommitLineData
8e669ac1 1/* $Cambridge: exim/src/src/auths/auth-spa.h,v 1.3 2005/02/17 11:58:27 ph10 Exp $ */
0756eb3c
PH
2
3/*************************************************
4* Exim - an Internet mail transport agent *
5*************************************************/
6
7/*
8 * This file provides the necessary methods for authenticating with
9 * Microsoft's Secure Password Authentication.
10
11 * All the code used here was torn by Marc Prud'hommeaux out of the
12 * Samba project (by Andrew Tridgell, Jeremy Allison, and others).
13 */
8e669ac1
PH
14
15/* December 2004: The spa_base64_to_bits() function has no length checking in
16it. I have added a check. PH */
0756eb3c
PH
17
18/* It seems that some systems have existing but different definitions of some
19of the following types. I received a complaint about "int16" causing
20compilation problems. So I (PH) have renamed them all, to be on the safe side.
21
22typedef signed short int16;
23typedef unsigned short uint16;
24typedef unsigned uint32;
25typedef unsigned char uint8;
26*/
27
28typedef signed short int16x;
29typedef unsigned short uint16x;
30typedef unsigned uint32x;
31typedef unsigned char uint8x;
32
33typedef struct
34{
35 uint16x len;
36 uint16x maxlen;
37 uint32x offset;
38} SPAStrHeader;
39
40typedef struct
41{
42 char ident[8];
43 uint32x msgType;
44 SPAStrHeader uDomain;
45 uint32x flags;
46 uint8x challengeData[8];
47 uint8x reserved[8];
48 SPAStrHeader emptyString;
49 uint8x buffer[1024];
50 uint32x bufIndex;
51} SPAAuthChallenge;
52
53
54typedef struct
55{
56 char ident[8];
57 uint32x msgType;
58 uint32x flags;
59 SPAStrHeader user;
60 SPAStrHeader domain;
61 uint8x buffer[1024];
62 uint32x bufIndex;
63} SPAAuthRequest;
64
65typedef struct
66{
67 char ident[8];
68 uint32x msgType;
69 SPAStrHeader lmResponse;
70 SPAStrHeader ntResponse;
71 SPAStrHeader uDomain;
72 SPAStrHeader uUser;
73 SPAStrHeader uWks;
74 SPAStrHeader sessionKey;
75 uint32x flags;
76 uint8x buffer[1024];
77 uint32x bufIndex;
78} SPAAuthResponse;
79
80#define spa_request_length(ptr) (((ptr)->buffer - (uint8x*)(ptr)) + (ptr)->bufIndex)
81
82void spa_bits_to_base64 (unsigned char *, const unsigned char *, int);
85b87bc2 83int spa_base64_to_bits(char *, int, const char *);
0756eb3c
PH
84void spa_build_auth_response (SPAAuthChallenge *challenge,
85 SPAAuthResponse *response, char *user, char *password);
86void spa_build_auth_request (SPAAuthRequest *request, char *user,
87 char *domain);
88extern void spa_smb_encrypt (unsigned char * passwd, unsigned char * c8,
89 unsigned char * p24);
90extern void spa_smb_nt_encrypt (unsigned char * passwd, unsigned char * c8,
91 unsigned char * p24);
92extern char *unicodeToString(char *p, size_t len);
93extern void spa_build_auth_challenge(SPAAuthRequest *, SPAAuthChallenge *);
94