static struct mi_root *mi_add_secret(struct mi_root *cmd, void *param) { str sval; struct mi_node *node = NULL; node = cmd->node.kids; if (node == NULL) { LM_WARN("no secret parameter\n"); return init_mi_tree(400, str_status_empty_param.s, str_status_empty_param.len); } if (node->value.s == NULL || node->value.len == 0) { LM_WARN("empty secret parameter\n"); return init_mi_tree(400, str_status_empty_param.s, str_status_empty_param.len); } if (node->next != NULL) { LM_WARN("too many parameters\n"); return init_mi_tree(400, str_status_too_many_params.s, str_status_too_many_params.len); } sval.len = node->value.len; sval.s = shm_malloc(sizeof(char) * sval.len); if (sval.s == NULL) { LM_ERR("Unable to allocate shared memory\n"); return init_mi_tree(400, str_status_no_memory.s, str_status_no_memory.len); } memcpy(sval.s, node->value.s, sval.len); if (add_secret(sval) == 0) { return init_mi_tree(200, MI_OK_S, MI_OK_LEN); } else { LM_ERR("Adding secret\n"); return init_mi_tree(400, str_status_adding_secret.s, str_status_adding_secret.len); } }
static int secret_param(modparam_t _type, void *_val) { str sval; if (_val == NULL) { LM_ERR("bad parameter\n"); return -1; } LM_INFO("adding %s to secret list\n", (char *) _val); sval.len = strlen((char *) _val); sval.s = (char *) shm_malloc(sizeof(char) * sval.len); if (sval.s == NULL) { LM_ERR("unable to allocate shared memory\n"); return -1; } memcpy(sval.s, (char *) _val, sval.len); return add_secret(sval); }
int main(int argc, char *argv[]) { int c; const char *read_file = NULL; const char *read_wired_file = NULL; const char *write_file = NULL; const char *ifname = NULL; const char *ifname_wired = NULL; struct wlantest wt; int ctrl_iface = 0; wpa_debug_level = MSG_INFO; wpa_debug_show_keys = 1; if (os_program_init()) return -1; wlantest_init(&wt); for (;;) { c = getopt(argc, argv, "cdf:hi:I:p:P:qr:R:w:W:"); if (c < 0) break; switch (c) { case 'c': ctrl_iface = 1; break; case 'd': if (wpa_debug_level > 0) wpa_debug_level--; break; case 'f': if (add_pmk_file(&wt, optarg) < 0) return -1; break; case 'h': usage(); return 0; case 'i': ifname = optarg; break; case 'I': ifname_wired = optarg; break; case 'p': add_passphrase(&wt, optarg); break; case 'P': add_secret(&wt, optarg); break; case 'q': wpa_debug_level++; break; case 'r': read_file = optarg; break; case 'R': read_wired_file = optarg; break; case 'w': write_file = optarg; break; case 'W': if (add_wep(&wt, optarg) < 0) return -1; break; default: usage(); return -1; } } if (ifname == NULL && ifname_wired == NULL && read_file == NULL && read_wired_file == NULL) { usage(); return 0; } if (eloop_init()) return -1; if (write_file && write_pcap_init(&wt, write_file) < 0) return -1; if (read_wired_file && read_wired_cap_file(&wt, read_wired_file) < 0) return -1; if (read_file && read_cap_file(&wt, read_file) < 0) return -1; if (ifname && monitor_init(&wt, ifname) < 0) return -1; if (ifname_wired && monitor_init_wired(&wt, ifname_wired) < 0) return -1; if (ctrl_iface && ctrl_init(&wt) < 0) return -1; eloop_register_signal_terminate(wlantest_terminate, &wt); eloop_run(); wpa_printf(MSG_INFO, "Processed: rx_mgmt=%u rx_ctrl=%u rx_data=%u " "fcs_error=%u", wt.rx_mgmt, wt.rx_ctrl, wt.rx_data, wt.fcs_error); wlantest_deinit(&wt); eloop_destroy(); os_program_deinit(); return 0; }