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