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