xref: /freebsd/contrib/wpa/src/utils/ext_password_test.c (revision 416ba5c74546f32a993436a99516d35008e9f384)
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