/*
 * External password backend
 * Copyright (c) 2012, Jouni Malinen <j@w1.fi>
 *
 * This software may be distributed under the terms of the BSD license.
 * See README for more details.
 */

#include "includes.h"

#include "common.h"
#include "ext_password_i.h"


struct ext_password_test_data {
	char *params;
};


static void * ext_password_test_init(const char *params)
{
	struct ext_password_test_data *data;

	data = os_zalloc(sizeof(*data));
	if (data == NULL)
		return NULL;

	if (params)
		data->params = os_strdup(params);

	return data;
}


static void ext_password_test_deinit(void *ctx)
{
	struct ext_password_test_data *data = ctx;

	os_free(data->params);
	os_free(data);
}


static struct wpabuf * ext_password_test_get(void *ctx, const char *name)
{
	struct ext_password_test_data *data = ctx;
	char *pos, *pos2;
	size_t nlen;

	wpa_printf(MSG_DEBUG, "EXT PW TEST: get(%s)", name);

	pos = data->params;
	if (pos == NULL)
		return NULL;
	nlen = os_strlen(name);

	while (pos && *pos) {
		if (os_strncmp(pos, name, nlen) == 0 && pos[nlen] == '=') {
			struct wpabuf *buf;
			pos += nlen + 1;
			pos2 = pos;
			while (*pos2 != '|' && *pos2 != '\0')
				pos2++;
			buf = ext_password_alloc(pos2 - pos);
			if (buf == NULL)
				return NULL;
			wpabuf_put_data(buf, pos, pos2 - pos);
			wpa_hexdump_ascii_key(MSG_DEBUG, "EXT PW TEST: value",
					      wpabuf_head(buf),
					      wpabuf_len(buf));
			return buf;
		}

		pos = os_strchr(pos + 1, '|');
		if (pos)
			pos++;
	}

	wpa_printf(MSG_DEBUG, "EXT PW TEST: get(%s) - not found", name);

	return NULL;
}


const struct ext_password_backend ext_password_test = {
	.name = "test",
	.init = ext_password_test_init,
	.deinit = ext_password_test_deinit,
	.get = ext_password_test_get,
};