/* * External password backend * Copyright (c) 2012, Jouni Malinen * * This software may be distributed under the terms of the BSD license. * See README for more details. */ #include "includes.h" #include "common.h" #include "ext_password_i.h" struct ext_password_test_data { char *params; }; static void * ext_password_test_init(const char *params) { struct ext_password_test_data *data; data = os_zalloc(sizeof(*data)); if (data == NULL) return NULL; if (params) data->params = os_strdup(params); return data; } static void ext_password_test_deinit(void *ctx) { struct ext_password_test_data *data = ctx; os_free(data->params); os_free(data); } static struct wpabuf * ext_password_test_get(void *ctx, const char *name) { struct ext_password_test_data *data = ctx; char *pos, *pos2; size_t nlen; wpa_printf(MSG_DEBUG, "EXT PW TEST: get(%s)", name); pos = data->params; if (pos == NULL) return NULL; nlen = os_strlen(name); while (pos && *pos) { if (os_strncmp(pos, name, nlen) == 0 && pos[nlen] == '=') { struct wpabuf *buf; pos += nlen + 1; pos2 = pos; while (*pos2 != '|' && *pos2 != '\0') pos2++; buf = ext_password_alloc(pos2 - pos); if (buf == NULL) return NULL; wpabuf_put_data(buf, pos, pos2 - pos); wpa_hexdump_ascii_key(MSG_DEBUG, "EXT PW TEST: value", wpabuf_head(buf), wpabuf_len(buf)); return buf; } pos = os_strchr(pos + 1, '|'); if (pos) pos++; } wpa_printf(MSG_DEBUG, "EXT PW TEST: get(%s) - not found", name); return NULL; } const struct ext_password_backend ext_password_test = { .name = "test", .init = ext_password_test_init, .deinit = ext_password_test_deinit, .get = ext_password_test_get, };