1252190Srpaulo/*
2252190Srpaulo * External password backend
3252190Srpaulo * Copyright (c) 2012, Jouni Malinen <j@w1.fi>
4252190Srpaulo *
5252190Srpaulo * This software may be distributed under the terms of the BSD license.
6252190Srpaulo * See README for more details.
7252190Srpaulo */
8252190Srpaulo
9252190Srpaulo#include "includes.h"
10252190Srpaulo
11252190Srpaulo#include "common.h"
12252190Srpaulo#include "ext_password_i.h"
13252190Srpaulo
14252190Srpaulo
15252190Srpaulostruct ext_password_test_data {
16252190Srpaulo	char *params;
17252190Srpaulo};
18252190Srpaulo
19252190Srpaulo
20252190Srpaulostatic void * ext_password_test_init(const char *params)
21252190Srpaulo{
22252190Srpaulo	struct ext_password_test_data *data;
23252190Srpaulo
24252190Srpaulo	data = os_zalloc(sizeof(*data));
25252190Srpaulo	if (data == NULL)
26252190Srpaulo		return NULL;
27252190Srpaulo
28252190Srpaulo	if (params)
29252190Srpaulo		data->params = os_strdup(params);
30252190Srpaulo
31252190Srpaulo	return data;
32252190Srpaulo}
33252190Srpaulo
34252190Srpaulo
35252190Srpaulostatic void ext_password_test_deinit(void *ctx)
36252190Srpaulo{
37252190Srpaulo	struct ext_password_test_data *data = ctx;
38252190Srpaulo
39252190Srpaulo	os_free(data->params);
40252190Srpaulo	os_free(data);
41252190Srpaulo}
42252190Srpaulo
43252190Srpaulo
44252190Srpaulostatic struct wpabuf * ext_password_test_get(void *ctx, const char *name)
45252190Srpaulo{
46252190Srpaulo	struct ext_password_test_data *data = ctx;
47252190Srpaulo	char *pos, *pos2;
48252190Srpaulo	size_t nlen;
49252190Srpaulo
50252190Srpaulo	wpa_printf(MSG_DEBUG, "EXT PW TEST: get(%s)", name);
51252190Srpaulo
52252190Srpaulo	pos = data->params;
53252190Srpaulo	if (pos == NULL)
54252190Srpaulo		return NULL;
55252190Srpaulo	nlen = os_strlen(name);
56252190Srpaulo
57252190Srpaulo	while (pos && *pos) {
58252190Srpaulo		if (os_strncmp(pos, name, nlen) == 0 && pos[nlen] == '=') {
59252190Srpaulo			struct wpabuf *buf;
60252190Srpaulo			pos += nlen + 1;
61252190Srpaulo			pos2 = pos;
62252190Srpaulo			while (*pos2 != '|' && *pos2 != '\0')
63252190Srpaulo				pos2++;
64252190Srpaulo			buf = ext_password_alloc(pos2 - pos);
65252190Srpaulo			if (buf == NULL)
66252190Srpaulo				return NULL;
67252190Srpaulo			wpabuf_put_data(buf, pos, pos2 - pos);
68252190Srpaulo			wpa_hexdump_ascii_key(MSG_DEBUG, "EXT PW TEST: value",
69252190Srpaulo					      wpabuf_head(buf),
70252190Srpaulo					      wpabuf_len(buf));
71252190Srpaulo			return buf;
72252190Srpaulo		}
73252190Srpaulo
74252190Srpaulo		pos = os_strchr(pos + 1, '|');
75252190Srpaulo		if (pos)
76252190Srpaulo			pos++;
77252190Srpaulo	}
78252190Srpaulo
79252190Srpaulo	wpa_printf(MSG_DEBUG, "EXT PW TEST: get(%s) - not found", name);
80252190Srpaulo
81252190Srpaulo	return NULL;
82252190Srpaulo}
83252190Srpaulo
84252190Srpaulo
85252190Srpauloconst struct ext_password_backend ext_password_test = {
86252190Srpaulo	.name = "test",
87252190Srpaulo	.init = ext_password_test_init,
88252190Srpaulo	.deinit = ext_password_test_deinit,
89252190Srpaulo	.get = ext_password_test_get,
90252190Srpaulo};
91