1#ifndef HEADER_CURL_SASL_H
2#define HEADER_CURL_SASL_H
3/***************************************************************************
4 *                                  _   _ ____  _
5 *  Project                     ___| | | |  _ \| |
6 *                             / __| | | | |_) | |
7 *                            | (__| |_| |  _ <| |___
8 *                             \___|\___/|_| \_\_____|
9 *
10 * Copyright (C) 2012 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
11 *
12 * This software is licensed as described in the file COPYING, which
13 * you should have received as part of this distribution. The terms
14 * are also available at http://curl.haxx.se/docs/copyright.html.
15 *
16 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
17 * copies of the Software, and permit persons to whom the Software is
18 * furnished to do so, under the terms of the COPYING file.
19 *
20 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
21 * KIND, either express or implied.
22 *
23 ***************************************************************************/
24
25#include "pingpong.h"
26
27/* Authentication mechanism flags */
28#define SASL_MECH_LOGIN         0x0001
29#define SASL_MECH_PLAIN         0x0002
30#define SASL_MECH_CRAM_MD5      0x0004
31#define SASL_MECH_DIGEST_MD5    0x0008
32#define SASL_MECH_GSSAPI        0x0010
33#define SASL_MECH_EXTERNAL      0x0020
34#define SASL_MECH_NTLM          0x0040
35
36/* This is used to generate a base64 encoded PLAIN authentication message */
37CURLcode Curl_sasl_create_plain_message(struct SessionHandle *data,
38                                        const char *userp,
39                                        const char *passwdp,
40                                        char **outptr, size_t *outlen);
41
42/* This is used to generate a base64 encoded LOGIN authentication message
43   containing either the user name or password details */
44CURLcode Curl_sasl_create_login_message(struct SessionHandle *data,
45                                        const char *valuep, char **outptr,
46                                        size_t *outlen);
47
48#ifndef CURL_DISABLE_CRYPTO_AUTH
49/* This is used to generate a base64 encoded CRAM-MD5 response message */
50CURLcode Curl_sasl_create_cram_md5_message(struct SessionHandle *data,
51                                           const char *chlg64,
52                                           const char *user,
53                                           const char *passwdp,
54                                           char **outptr, size_t *outlen);
55
56/* This is used to generate a base64 encoded DIGEST-MD5 response message */
57CURLcode Curl_sasl_create_digest_md5_message(struct SessionHandle *data,
58                                             const char *chlg64,
59                                             const char *user,
60                                             const char *passwdp,
61                                             const char *service,
62                                             char **outptr, size_t *outlen);
63#endif
64
65#ifdef USE_NTLM
66/* This is used to generate a base64 encoded NTLM type-1 message */
67CURLcode Curl_sasl_create_ntlm_type1_message(const char *userp,
68                                             const char *passwdp,
69                                             struct ntlmdata *ntlm,
70                                             char **outptr,
71                                             size_t *outlen);
72
73/* This is used to decode an incoming NTLM type-2 message and generate a
74   base64 encoded type-3 response */
75CURLcode Curl_sasl_create_ntlm_type3_message(struct SessionHandle *data,
76                                             const char *header,
77                                             const char *userp,
78                                             const char *passwdp,
79                                             struct ntlmdata *ntlm,
80                                             char **outptr, size_t *outlen);
81
82#endif /* USE_NTLM */
83
84/* This is used to cleanup any libraries or curl modules used by the sasl
85   functions */
86void Curl_sasl_cleanup(struct connectdata *conn, unsigned int authused);
87
88#endif /* HEADER_CURL_SASL_H */
89