Updated through tag hostap_2_5 from git://w1.fi/hostap.git
[mech_eap.git] / libeap / src / utils / ext_password_test.c
1 /*
2  * External password backend
3  * Copyright (c) 2012, Jouni Malinen <j@w1.fi>
4  *
5  * This software may be distributed under the terms of the BSD license.
6  * See README for more details.
7  */
8
9 #include "includes.h"
10
11 #include "common.h"
12 #include "ext_password_i.h"
13
14
15 struct ext_password_test_data {
16         char *params;
17 };
18
19
20 static void * ext_password_test_init(const char *params)
21 {
22         struct ext_password_test_data *data;
23
24         data = os_zalloc(sizeof(*data));
25         if (data == NULL)
26                 return NULL;
27
28         if (params)
29                 data->params = os_strdup(params);
30
31         return data;
32 }
33
34
35 static void ext_password_test_deinit(void *ctx)
36 {
37         struct ext_password_test_data *data = ctx;
38
39         str_clear_free(data->params);
40         os_free(data);
41 }
42
43
44 static struct wpabuf * ext_password_test_get(void *ctx, const char *name)
45 {
46         struct ext_password_test_data *data = ctx;
47         char *pos, *pos2;
48         size_t nlen;
49
50         wpa_printf(MSG_DEBUG, "EXT PW TEST: get(%s)", name);
51
52         pos = data->params;
53         if (pos == NULL)
54                 return NULL;
55         nlen = os_strlen(name);
56
57         while (pos && *pos) {
58                 if (os_strncmp(pos, name, nlen) == 0 && pos[nlen] == '=') {
59                         struct wpabuf *buf;
60                         pos += nlen + 1;
61                         pos2 = pos;
62                         while (*pos2 != '|' && *pos2 != '\0')
63                                 pos2++;
64                         buf = ext_password_alloc(pos2 - pos);
65                         if (buf == NULL)
66                                 return NULL;
67                         wpabuf_put_data(buf, pos, pos2 - pos);
68                         wpa_hexdump_ascii_key(MSG_DEBUG, "EXT PW TEST: value",
69                                               wpabuf_head(buf),
70                                               wpabuf_len(buf));
71                         return buf;
72                 }
73
74                 pos = os_strchr(pos + 1, '|');
75                 if (pos)
76                         pos++;
77         }
78
79         wpa_printf(MSG_DEBUG, "EXT PW TEST: get(%s) - not found", name);
80
81         return NULL;
82 }
83
84
85 const struct ext_password_backend ext_password_test = {
86         .name = "test",
87         .init = ext_password_test_init,
88         .deinit = ext_password_test_deinit,
89         .get = ext_password_test_get,
90 };