static void openKeyboard(void) { kb= kb_new(); kb_open(kb, vtSwitch, vtLock); kb_setCallback(kb, enqueueKeyboardEvent); }
/** * @brief Inits or loads the knowledge base for a single host. * * Fills the knowledge base with host-specific login information for local * checks if defined. * * @param globals Global preference arglist. * @param hostname Name of the host. * @param new_kb[out] TRUE if the kb is new and shall be saved. * * @return A knowledge base. * * @see fill_host_kb_ssh_credentials */ static kb_t init_host_kb (struct arglist *globals, char *hostname, struct arglist *hostinfos, gboolean * new_kb) { kb_t kb, network_kb; (*new_kb) = FALSE; gchar *vhosts; struct kb_item *host_network_results = NULL; struct kb_item *result_iter; gchar *network_scan_status = (gchar *) arg_get_value (globals, "network_scan_status"); if (network_scan_status != NULL) { if (g_ascii_strcasecmp (network_scan_status, "done") == 0) { gchar *hostname_pattern = g_strdup_printf ("%s/*", hostname); network_kb = save_kb_load_kb (globals, "network"); host_network_results = kb_item_get_pattern (network_kb, hostname_pattern); } if (g_ascii_strcasecmp (network_scan_status, "busy") == 0) { arg_add_value (globals, "CURRENTLY_TESTED_HOST", ARG_STRING, strlen ("network"), "network"); save_kb_new (globals, "network"); kb = kb_new (); (*new_kb) = TRUE; return kb; } } // Check if kb should be saved. if (save_kb (globals)) { // Check if a saved kb exists and we shall restore it. if (save_kb_exists (hostname) != 0) { save_kb_backup (hostname); kb = save_kb_load_kb (globals, hostname); } else { // We shall not or cannot restore. save_kb_new (globals, hostname); kb = kb_new (); (*new_kb) = TRUE; } arg_add_value (globals, "CURRENTLY_TESTED_HOST", ARG_STRING, strlen (hostname), hostname); } else /* save_kb(globals) */ { kb = kb_new (); } /* Add local check (SSH)- related knowledge base items. */ fill_host_kb_ssh_credentials (kb, globals, hostname); /* If vhosts is set, split it and put it in the KB. */ vhosts = (gchar *)arg_get_value (hostinfos, "VHOSTS"); if (vhosts) { gchar **vhosts_array = g_strsplit (vhosts, ",", 0); guint i = 0; while (vhosts_array[i] != NULL) { kb_item_add_str (kb, "hostinfos/vhosts", vhosts_array[i]); save_kb_write_str (globals, hostname, "hostinfos/vhosts", vhosts_array[i]); i++; } g_strfreev (vhosts_array); } result_iter = host_network_results; while (result_iter != NULL) { char *newname = strstr (result_iter->name, "/") + 1; if (result_iter->type == KB_TYPE_STR) { kb_item_add_str (kb, newname, result_iter->v.v_str); save_kb_write_str (globals, hostname, newname, result_iter->v.v_str); } else if (result_iter->type == KB_TYPE_INT) { kb_item_add_int (kb, newname, result_iter->v.v_int); save_kb_write_int (globals, hostname, newname, result_iter->v.v_int); } result_iter = result_iter->next; } return kb; }