38 #include <glib/gi18n.h> 50 #define GET_DIALOG_OBJECT(object_name) gtk_builder_get_object(bu, object_name) 94 if (haystack[0] == 0 || strstr(haystack, needle) == NULL){
105 TRACE_CALL(__func__);
116 store = GTK_LIST_STORE(mpcp->
store);
125 if (username == NULL)
134 if (gatewayusername == NULL)
135 gatewayusername =
"";
137 if (gatewaydomain == NULL)
152 gtk_list_store_append(store, &iter);
153 s = g_strdup_printf(
"%s\\%s", domain, username);
154 t = g_strdup_printf(
"%s\\%s", gatewaydomain, gatewayusername);
155 gtk_list_store_set(store, &iter,
156 COL_F, matchcount >= 5 ? TRUE : FALSE,
170 TRACE_CALL(__func__);
175 gboolean a = gtk_cell_renderer_toggle_get_active(cell);
176 path = gtk_tree_path_new_from_string(path_string);
177 gtk_tree_model_get_iter(GTK_TREE_MODEL(mpcp->
store), &iter, path);
178 gtk_tree_path_free(path);
179 gtk_list_store_set(mpcp->
store, &iter,
COL_F, !a, -1);
184 TRACE_CALL(__func__);
204 gtk_widget_set_sensitive(GTK_WIDGET(mpcp->
eGroup), ena);
205 gtk_widget_set_sensitive(GTK_WIDGET(mpcp->
eUsername), ena);
206 gtk_widget_set_sensitive(GTK_WIDGET(mpcp->
eDomain), ena);
207 gtk_widget_set_sensitive(GTK_WIDGET(mpcp->
ePassword1), ena);
208 gtk_widget_set_sensitive(GTK_WIDGET(mpcp->
ePassword2), ena);
213 gtk_widget_set_sensitive(GTK_WIDGET(mpcp->
btnDoChange), ena);
214 gtk_widget_set_sensitive(GTK_WIDGET(mpcp->
table), ena);
219 TRACE_CALL(__func__);
224 gtk_tree_model_get(GTK_TREE_MODEL(mpcp->
store), &mpcp->
iter,
COL_F, &sel, -1);
231 if (gtk_tree_model_iter_next(GTK_TREE_MODEL(mpcp->
store), &mpcp->
iter)) {
232 return G_SOURCE_CONTINUE;
234 gtk_dialog_response(mpcp->
dialog, 1);
236 return G_SOURCE_REMOVE;
242 TRACE_CALL(__func__);
244 const gchar *passwd1, *passwd2, *gatewaypasswd1, *gatewaypasswd2;
251 if (!gtk_tree_model_get_iter_first(GTK_TREE_MODEL(mpcp->
store), &mpcp->
iter))
254 passwd1 = gtk_entry_get_text(mpcp->
ePassword1);
255 passwd2 = gtk_entry_get_text(mpcp->
ePassword2);
257 if (g_strcmp0(passwd1, passwd2) != 0) {
258 GtkWidget *msgDialog;
259 msgDialog = gtk_message_dialog_new(GTK_WINDOW(mpcp->
dialog),
260 GTK_DIALOG_DESTROY_WITH_PARENT,
263 _(
"The passwords do not match"));
264 gtk_dialog_run(GTK_DIALOG(msgDialog));
265 gtk_widget_destroy(msgDialog);
270 if (g_strcmp0(gatewaypasswd1, gatewaypasswd2) != 0) {
271 GtkWidget *msgDialog;
272 msgDialog = gtk_message_dialog_new(GTK_WINDOW(mpcp->
dialog),
273 GTK_DIALOG_DESTROY_WITH_PARENT,
276 _(
"The Gateway passwords do not match"));
277 gtk_dialog_run(GTK_DIALOG(msgDialog));
278 gtk_widget_destroy(msgDialog);
290 gtk_label_set_text(mpcp->
statusLabel, _(
"Resetting passwords, please wait…"));
299 TRACE_CALL(__func__);
308 s = gtk_entry_get_text(mpcp->
eGroup);
310 mpcp->
group = g_strdup(s);
312 s = gtk_entry_get_text(mpcp->
eDomain);
314 mpcp->
domain = g_strdup(s);
328 if (mpcp->
store != NULL) {
329 gtk_tree_view_set_model(mpcp->
table, NULL);
331 mpcp->
store = gtk_list_store_new(
NUM_COLS, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
336 gtk_tree_view_set_model(mpcp->table, GTK_TREE_MODEL(mpcp->store));
338 return G_SOURCE_CONTINUE;
344 TRACE_CALL(__func__);
358 TRACE_CALL(__func__);
361 gtk_dialog_response(mpcp->
dialog, 1);
366 TRACE_CALL(__func__);
370 GtkWindow* mainwindow;
371 GtkCellRendererToggle *toggle;
380 if (secret_plugin == NULL) {
381 initerror = _(
"The multi password changer requires a secrecy plugin.\n");
384 initerror = _(
"The multi password changer requires a secrecy service.\n");
388 GtkWidget *msgDialog;
389 msgDialog = gtk_message_dialog_new(mainwindow, GTK_DIALOG_MODAL, GTK_MESSAGE_WARNING, GTK_BUTTONS_OK,
391 gtk_dialog_run(GTK_DIALOG(msgDialog));
392 gtk_widget_destroy(msgDialog);
399 REMMINA_DEBUG(
"Unable to load the multiple password changer Glade file interface\n");
403 dialog = GTK_DIALOG(gtk_builder_get_object(bu,
"MPCDialog"));
406 gtk_window_set_transient_for(GTK_WINDOW(dialog), mainwindow);
409 mpcp->
eGroup = GTK_ENTRY(GET_DIALOG_OBJECT(
"groupEntry"));
414 mpcp->eUsername = GTK_ENTRY(GET_DIALOG_OBJECT(
"usernameEntry"));
415 gtk_entry_set_text(mpcp->eUsername, mpcp->username);
418 mpcp->eGatewayUsername = GTK_ENTRY(GET_DIALOG_OBJECT(
"gatewayUsernameEntry"));
419 gtk_entry_set_text(mpcp->eGatewayUsername, mpcp->gatewayusername);
422 mpcp->eDomain = GTK_ENTRY(GET_DIALOG_OBJECT(
"domainEntry"));
423 gtk_entry_set_text(mpcp->eDomain, mpcp->domain);
426 mpcp->eGatewayDomain = GTK_ENTRY(GET_DIALOG_OBJECT(
"gatewayDomainEntry"));
427 gtk_entry_set_text(mpcp->eGatewayDomain, mpcp->gatewaydomain);
430 mpcp->ePassword1 = GTK_ENTRY(GET_DIALOG_OBJECT(
"password1Entry"));
431 gtk_entry_set_text(mpcp->ePassword1, mpcp->password);
433 mpcp->eGatewayPassword1 = GTK_ENTRY(GET_DIALOG_OBJECT(
"gatewayPassword1Entry"));
434 gtk_entry_set_text(mpcp->eGatewayPassword1, mpcp->gatewaypassword);
436 mpcp->ePassword2 = GTK_ENTRY(GET_DIALOG_OBJECT(
"password2Entry"));
437 gtk_entry_set_text(mpcp->ePassword2, mpcp->password);
439 mpcp->eGatewayPassword2 = GTK_ENTRY(GET_DIALOG_OBJECT(
"gatewayPassword2Entry"));
440 gtk_entry_set_text(mpcp->eGatewayPassword2, mpcp->gatewaypassword);
442 mpcp->statusLabel = GTK_LABEL(GET_DIALOG_OBJECT(
"statusLabel"));
449 mpcp->table = GTK_TREE_VIEW(GET_DIALOG_OBJECT(
"profchangelist"));
454 toggle = GTK_CELL_RENDERER_TOGGLE(GET_DIALOG_OBJECT(
"cellrenderertoggle1"));
457 mpcp->btnDoChange = GTK_BUTTON(GET_DIALOG_OBJECT(
"btnDoChange"));
460 gtk_dialog_run(dialog);
461 gtk_widget_destroy(GTK_WIDGET(dialog));
464 g_source_remove(mpcp->sid);
468 if (mpcp->searchentrychange_timeout_source_id) {
469 g_source_remove(mpcp->searchentrychange_timeout_source_id);
470 mpcp->searchentrychange_timeout_source_id = 0;
473 if (mpcp->changed_passwords_count) {
474 GtkWidget *msgDialog;
475 msgDialog = gtk_message_dialog_new(GTK_WINDOW(mpcp->dialog),
476 GTK_DIALOG_DESTROY_WITH_PARENT,
479 ngettext(
"%d password changed.",
"%d passwords changed.", mpcp->changed_passwords_count), mpcp->changed_passwords_count);
480 gtk_dialog_run(GTK_DIALOG(msgDialog));
481 gtk_widget_destroy(msgDialog);
485 g_free(mpcp->username);
486 g_free(mpcp->password);
487 g_free(mpcp->domain);
489 g_free(mpcp->gatewayusername);
490 g_free(mpcp->gatewaypassword);
491 g_free(mpcp->gatewaydomain);
505 TRACE_CALL(__func__);
509 mpcp->
username = g_strdup(username);
510 mpcp->
password = g_strdup(password);
511 mpcp->
domain = g_strdup(domain);
512 mpcp->
group = g_strdup(group);
RemminaFile * remmina_file_load(const gchar *filename)
void remmina_file_free(RemminaFile *remminafile)
const gchar * remmina_file_get_string(RemminaFile *remminafile, const gchar *setting)
guint searchentrychange_timeout_source_id
static void remmina_mpchange_stopsearch(GtkSearchEntry *entry, gpointer user_data)
GtkWindow * remmina_main_get_window()
GtkEntry * eGatewayPassword2
typedefG_BEGIN_DECLS struct _RemminaFile RemminaFile
RemminaSecretPlugin * remmina_plugin_manager_get_secret_plugin(void)
gboolean(* is_service_available)(struct _RemminaSecretPlugin *instance)
static gboolean remmina_mpchange_fieldcompare(const gchar *needle, const gchar *haystack, int *matchcount)
static void remmina_mpchange_file_list_callback(RemminaFile *remminafile, gpointer user_data)
static void remmina_mpchange_searchfield_changed(GtkSearchEntry *se, gpointer user_data)
static gboolean remmina_file_multipasswd_changer_mt(gpointer d)
GtkEntry * eGatewayDomain
static gboolean remmina_mpchange_searchfield_changed_to(gpointer user_data)
static void enable_inputs(struct mpchanger_params *mpcp, gboolean ena)
GtkBuilder * remmina_public_gtk_builder_new_from_resource(gchar *resource)
static void remmina_mpchange_dochange(gchar *fname, struct mpchanger_params *mpcp)
void remmina_file_store_secret_plugin_password(RemminaFile *remminafile, const gchar *key, const gchar *value)
static void remmina_mpchange_dochange_clicked(GtkButton *btn, gpointer user_data)
GtkEntry * eGatewayPassword1
GtkEntry * eGatewayUsername
int changed_passwords_count
static void remmina_mpchange_checkbox_toggle(GtkCellRendererToggle *cell, gchar *path_string, gpointer user_data)
void remmina_mpchange_schedule(gboolean has_domain, const gchar *group, const gchar *domain, const gchar *username, const gchar *password, const gchar *gatewayusername, const gchar *gatewaydomain, const gchar *gatewaypassword)
static gboolean changenext(gpointer user_data)
gint remmina_file_manager_iterate(GFunc func, gpointer user_data)