xref: /dflybsd-src/contrib/wpa_supplicant/src/utils/ext_password_test.c (revision 3a84a4273475ed07d0ab1c2dfeffdfedef35d9cd)
13ff40c12SJohn Marino /*
23ff40c12SJohn Marino  * External password backend
33ff40c12SJohn Marino  * Copyright (c) 2012, Jouni Malinen <j@w1.fi>
43ff40c12SJohn Marino  *
53ff40c12SJohn Marino  * This software may be distributed under the terms of the BSD license.
63ff40c12SJohn Marino  * See README for more details.
73ff40c12SJohn Marino  */
83ff40c12SJohn Marino 
93ff40c12SJohn Marino #include "includes.h"
103ff40c12SJohn Marino 
113ff40c12SJohn Marino #include "common.h"
123ff40c12SJohn Marino #include "ext_password_i.h"
133ff40c12SJohn Marino 
143ff40c12SJohn Marino 
153ff40c12SJohn Marino struct ext_password_test_data {
163ff40c12SJohn Marino 	char *params;
173ff40c12SJohn Marino };
183ff40c12SJohn Marino 
193ff40c12SJohn Marino 
ext_password_test_init(const char * params)203ff40c12SJohn Marino static void * ext_password_test_init(const char *params)
213ff40c12SJohn Marino {
223ff40c12SJohn Marino 	struct ext_password_test_data *data;
233ff40c12SJohn Marino 
243ff40c12SJohn Marino 	data = os_zalloc(sizeof(*data));
253ff40c12SJohn Marino 	if (data == NULL)
263ff40c12SJohn Marino 		return NULL;
273ff40c12SJohn Marino 
283ff40c12SJohn Marino 	if (params)
293ff40c12SJohn Marino 		data->params = os_strdup(params);
303ff40c12SJohn Marino 
313ff40c12SJohn Marino 	return data;
323ff40c12SJohn Marino }
333ff40c12SJohn Marino 
343ff40c12SJohn Marino 
ext_password_test_deinit(void * ctx)353ff40c12SJohn Marino static void ext_password_test_deinit(void *ctx)
363ff40c12SJohn Marino {
373ff40c12SJohn Marino 	struct ext_password_test_data *data = ctx;
383ff40c12SJohn Marino 
39*a1157835SDaniel Fojt 	str_clear_free(data->params);
403ff40c12SJohn Marino 	os_free(data);
413ff40c12SJohn Marino }
423ff40c12SJohn Marino 
433ff40c12SJohn Marino 
ext_password_test_get(void * ctx,const char * name)443ff40c12SJohn Marino static struct wpabuf * ext_password_test_get(void *ctx, const char *name)
453ff40c12SJohn Marino {
463ff40c12SJohn Marino 	struct ext_password_test_data *data = ctx;
473ff40c12SJohn Marino 	char *pos, *pos2;
483ff40c12SJohn Marino 	size_t nlen;
493ff40c12SJohn Marino 
503ff40c12SJohn Marino 	wpa_printf(MSG_DEBUG, "EXT PW TEST: get(%s)", name);
513ff40c12SJohn Marino 
523ff40c12SJohn Marino 	pos = data->params;
533ff40c12SJohn Marino 	if (pos == NULL)
543ff40c12SJohn Marino 		return NULL;
553ff40c12SJohn Marino 	nlen = os_strlen(name);
563ff40c12SJohn Marino 
573ff40c12SJohn Marino 	while (pos && *pos) {
583ff40c12SJohn Marino 		if (os_strncmp(pos, name, nlen) == 0 && pos[nlen] == '=') {
593ff40c12SJohn Marino 			struct wpabuf *buf;
603ff40c12SJohn Marino 			pos += nlen + 1;
613ff40c12SJohn Marino 			pos2 = pos;
623ff40c12SJohn Marino 			while (*pos2 != '|' && *pos2 != '\0')
633ff40c12SJohn Marino 				pos2++;
643ff40c12SJohn Marino 			buf = ext_password_alloc(pos2 - pos);
653ff40c12SJohn Marino 			if (buf == NULL)
663ff40c12SJohn Marino 				return NULL;
673ff40c12SJohn Marino 			wpabuf_put_data(buf, pos, pos2 - pos);
683ff40c12SJohn Marino 			wpa_hexdump_ascii_key(MSG_DEBUG, "EXT PW TEST: value",
693ff40c12SJohn Marino 					      wpabuf_head(buf),
703ff40c12SJohn Marino 					      wpabuf_len(buf));
713ff40c12SJohn Marino 			return buf;
723ff40c12SJohn Marino 		}
733ff40c12SJohn Marino 
743ff40c12SJohn Marino 		pos = os_strchr(pos + 1, '|');
753ff40c12SJohn Marino 		if (pos)
763ff40c12SJohn Marino 			pos++;
773ff40c12SJohn Marino 	}
783ff40c12SJohn Marino 
793ff40c12SJohn Marino 	wpa_printf(MSG_DEBUG, "EXT PW TEST: get(%s) - not found", name);
803ff40c12SJohn Marino 
813ff40c12SJohn Marino 	return NULL;
823ff40c12SJohn Marino }
833ff40c12SJohn Marino 
843ff40c12SJohn Marino 
853ff40c12SJohn Marino const struct ext_password_backend ext_password_test = {
863ff40c12SJohn Marino 	.name = "test",
873ff40c12SJohn Marino 	.init = ext_password_test_init,
883ff40c12SJohn Marino 	.deinit = ext_password_test_deinit,
893ff40c12SJohn Marino 	.get = ext_password_test_get,
903ff40c12SJohn Marino };
91