From 56f3b77f394aacf350a5021a2a9aadeead655f7a Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Tue, 27 Feb 2024 16:19:07 +0600 Subject: [PATCH] Fixed saving of parameter when old and new values are same, but target configuration is local, what means it never contains 6th section - password --- source/ubl-settings-usergroups.c | 56 ++++++++++++++++++++++++++++++-- 1 file changed, 54 insertions(+), 2 deletions(-) diff --git a/source/ubl-settings-usergroups.c b/source/ubl-settings-usergroups.c index 835c2fc..c52b4ce 100644 --- a/source/ubl-settings-usergroups.c +++ b/source/ubl-settings-usergroups.c @@ -309,8 +309,60 @@ void on_config_save(GtkWidget *self, main_window *widgets){ yon_samba_sync_proceed(); template_saving_window *window = yon_save_proceed(NULL,YON_CONFIG_BOTH,"users", "DEFAULTPASSWD DEFAULTROOTPASSWD DEFAULTUSER HASHPASSWD USERGROUPS ADDADM USERADD[*] USERSHADOW[*] GROUPADD[*]",NULL); if (window){ - yon_hide_passwords(window); - g_signal_connect(G_OBJECT(window->Window),"destroy",G_CALLBACK(on_save_window_close_update),widgets); + if (main_config.load_mode==0){ + GtkTreeIter iter; + int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(window->list),&iter); + for(;valid;valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(window->list),&iter)){ + char *parameter,*old_value, *new_value; + gtk_tree_model_get(GTK_TREE_MODEL(window->list),&iter,1,¶meter,2,&old_value,3,&new_value,-1); + int old_size, new_size; + config_str old_parsed = yon_char_parse(old_value,&old_size,":"); + config_str new_parsed = yon_char_parse(new_value,&new_size,":"); + if (old_parsed&&new_parsed){ + char *parameter_type = yon_char_divide_search(parameter,"[",-1); + if (!strcmp(parameter_type,"USERADD")){ + if (old_size>5){ + old_parsed = yon_char_parsed_rip(old_parsed,&old_size,5); + + } + if (new_size>5){ + new_parsed = yon_char_parsed_rip(new_parsed,&new_size,5); + } + char *old_final = yon_char_parsed_to_string(old_parsed,old_size,":"); + char *new_final = yon_char_parsed_to_string(new_parsed,new_size,":"); + if (!strcmp(old_final,new_final)){ + gtk_list_store_set(window->list,&iter,5,0,-1); + } + free(old_final); + free(new_final); + yon_char_parsed_free(old_parsed,old_size); + yon_char_parsed_free(new_parsed,new_size); + + } else if (!strcmp(parameter_type,"GROUPADD")){ + if (old_size>3){ + old_parsed = yon_char_parsed_rip(old_parsed,&old_size,3); + + } + if (new_size>3){ + new_parsed = yon_char_parsed_rip(new_parsed,&new_size,3); + } + char *old_final = yon_char_parsed_to_string(old_parsed,old_size,":"); + char *new_final = yon_char_parsed_to_string(new_parsed,new_size,":"); + if (!strcmp(old_final,new_final)){ + gtk_list_store_set(window->list,&iter,5,0,-1); + } + free(old_final); + free(new_final); + yon_char_parsed_free(old_parsed,old_size); + yon_char_parsed_free(new_parsed,new_size); + + } + } + } + } else { + yon_hide_passwords(window); + g_signal_connect(G_OBJECT(window->Window),"destroy",G_CALLBACK(on_save_window_close_update),widgets); + } } }