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
ext_password_test_init(const char * params)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
ext_password_test_deinit(void * ctx)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
ext_password_test_get(void * ctx,const char * name)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 };
91