161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt/* 261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt * External password backend 361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt * Copyright (c) 2012, Jouni Malinen <j@w1.fi> 461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt * 561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt * This software may be distributed under the terms of the BSD license. 661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt * See README for more details. 761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt */ 861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt#include "includes.h" 1061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 1161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt#include "common.h" 1261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt#include "ext_password_i.h" 1361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 1461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 1561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidtstruct ext_password_test_data { 1661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt char *params; 1761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt}; 1861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 1961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 2061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidtstatic void * ext_password_test_init(const char *params) 2161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt{ 2261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt struct ext_password_test_data *data; 2361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 2461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt data = os_zalloc(sizeof(*data)); 2561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt if (data == NULL) 2661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt return NULL; 2761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 2861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt if (params) 2961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt data->params = os_strdup(params); 3061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 3161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt return data; 3261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt} 3361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 3461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 3561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidtstatic void ext_password_test_deinit(void *ctx) 3661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt{ 3761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt struct ext_password_test_data *data = ctx; 3861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 39c28170251eb54dbf64a9074a07fee377587425b2Dmitry Shmidt str_clear_free(data->params); 4061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt os_free(data); 4161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt} 4261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 4361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 4461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidtstatic struct wpabuf * ext_password_test_get(void *ctx, const char *name) 4561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt{ 4661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt struct ext_password_test_data *data = ctx; 4761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt char *pos, *pos2; 4861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt size_t nlen; 4961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 5061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt wpa_printf(MSG_DEBUG, "EXT PW TEST: get(%s)", name); 5161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 5261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt pos = data->params; 5361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt if (pos == NULL) 5461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt return NULL; 5561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt nlen = os_strlen(name); 5661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 5761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt while (pos && *pos) { 5861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt if (os_strncmp(pos, name, nlen) == 0 && pos[nlen] == '=') { 5961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt struct wpabuf *buf; 6061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt pos += nlen + 1; 6161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt pos2 = pos; 6261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt while (*pos2 != '|' && *pos2 != '\0') 6361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt pos2++; 6461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt buf = ext_password_alloc(pos2 - pos); 6561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt if (buf == NULL) 6661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt return NULL; 6761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt wpabuf_put_data(buf, pos, pos2 - pos); 6861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt wpa_hexdump_ascii_key(MSG_DEBUG, "EXT PW TEST: value", 6961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt wpabuf_head(buf), 7061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt wpabuf_len(buf)); 7161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt return buf; 7261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt } 7361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 7461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt pos = os_strchr(pos + 1, '|'); 7561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt if (pos) 7661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt pos++; 7761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt } 7861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 7961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt wpa_printf(MSG_DEBUG, "EXT PW TEST: get(%s) - not found", name); 8061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 8161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt return NULL; 8261d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt} 8361d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 8461d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt 8561d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidtconst struct ext_password_backend ext_password_test = { 8661d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt .name = "test", 8761d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt .init = ext_password_test_init, 8861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt .deinit = ext_password_test_deinit, 8961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt .get = ext_password_test_get, 9061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt}; 91