1 /* 2 * External password backend 3 * Copyright (c) 2012, Jouni Malinen <j@w1.fi> 4 * 5 * This software may be distributed under the terms of the BSD license. 6 * See README for more details. 7 */ 8 9 #include "includes.h" 10 11 #include "common.h" 12 #include "ext_password_i.h" 13 14 15 struct ext_password_test_data { 16 char *params; 17 }; 18 19 20 static void * ext_password_test_init(const char *params) 21 { 22 struct ext_password_test_data *data; 23 24 data = os_zalloc(sizeof(*data)); 25 if (data == NULL) 26 return NULL; 27 28 if (params) 29 data->params = os_strdup(params); 30 31 return data; 32 } 33 34 35 static void ext_password_test_deinit(void *ctx) 36 { 37 struct ext_password_test_data *data = ctx; 38 39 str_clear_free(data->params); 40 os_free(data); 41 } 42 43 44 static struct wpabuf * ext_password_test_get(void *ctx, const char *name) 45 { 46 struct ext_password_test_data *data = ctx; 47 char *pos, *pos2; 48 size_t nlen; 49 50 wpa_printf(MSG_DEBUG, "EXT PW TEST: get(%s)", name); 51 52 pos = data->params; 53 if (pos == NULL) 54 return NULL; 55 nlen = os_strlen(name); 56 57 while (pos && *pos) { 58 if (os_strncmp(pos, name, nlen) == 0 && pos[nlen] == '=') { 59 struct wpabuf *buf; 60 pos += nlen + 1; 61 pos2 = pos; 62 while (*pos2 != '|' && *pos2 != '\0') 63 pos2++; 64 buf = ext_password_alloc(pos2 - pos); 65 if (buf == NULL) 66 return NULL; 67 wpabuf_put_data(buf, pos, pos2 - pos); 68 wpa_hexdump_ascii_key(MSG_DEBUG, "EXT PW TEST: value", 69 wpabuf_head(buf), 70 wpabuf_len(buf)); 71 return buf; 72 } 73 74 pos = os_strchr(pos + 1, '|'); 75 if (pos) 76 pos++; 77 } 78 79 wpa_printf(MSG_DEBUG, "EXT PW TEST: get(%s) - not found", name); 80 81 return NULL; 82 } 83 84 85 const struct ext_password_backend ext_password_test = { 86 .name = "test", 87 .init = ext_password_test_init, 88 .deinit = ext_password_test_deinit, 89 .get = ext_password_test_get, 90 }; 91