#include "ubl-settings-bootloader.h" void yon_password_change(GtkWidget *, GtkEntry *entry){ GtkEntry *output_target = entry; yon_bootloader_password_window *window = yon_ubl_settings_usergroups_password_new(); dictionary *dict = NULL; char *password = (char*)gtk_entry_get_text(output_target); if (!yon_char_is_empty(password)){ if (main_config.load_mode==YON_CONFIG_LOCAL){ password = yon_char_new(password); if (!check_is_password_hash(password)){ gtk_entry_set_text(GTK_ENTRY(window->PasswordHashEntry),password); } else { if (password[0]=='%'&&password[1]=='%'){ free(yon_char_divide(password,1)); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->NoEncriptionCheck),1); } gtk_entry_set_text(GTK_ENTRY(window->PasswordEntry),password); } } } yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); yon_dictionary_add_or_create_if_exists_with_data(dict,"target",output_target); g_signal_connect(G_OBJECT(window->UserOkButton),"clicked",G_CALLBACK(on_password_accept),dict); g_signal_connect(G_OBJECT(window->UserCancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); gtk_window_set_transient_for(GTK_WINDOW(window->Window),GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(output_target)))); gtk_widget_show(window->Window); } void on_password_accept(GtkWidget *self, dictionary *dict){ yon_bootloader_password_window *window = yon_dictionary_get_data(dict->first,yon_bootloader_password_window*); GtkEntry *entry = yon_dictionary_get_data(dict->first->next,GtkEntry*); char *password = (char*)gtk_entry_get_text(GTK_ENTRY(window->PasswordEntry)); if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->NoEncriptionCheck))){ char *pasted_hash = (char*)gtk_entry_get_text(GTK_ENTRY(window->PasswordHashEntry)); if (yon_char_is_empty(pasted_hash)){ yon_ubl_status_highlight_incorrect(window->PasswordEntry); yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),PASSWORD_SHORT_LABEL(yon_char_from_int(main_config.password_min_length)),5,BACKGROUND_IMAGE_FAIL_TYPE); return; } gtk_entry_set_text(entry,pasted_hash); } else { char *password_check = (char*)gtk_entry_get_text(GTK_ENTRY(window->RepeatPasswordEntry)); if (yon_char_is_empty(password)){ yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); yon_ubl_status_highlight_incorrect(window->PasswordEntry); return; } for (size_t i=0;iStatusBox),RESTRICTED_SYMBOLS_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); return; } } if ((glong)strlen(password)StatusBox),PASSWORD_SHORT_LABEL(yon_char_from_int(main_config.password_min_length)),5,BACKGROUND_IMAGE_FAIL_TYPE); yon_ubl_status_highlight_incorrect(window->PasswordEntry); return; } if (strcmp(password,password_check)){ yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),PASSWORD_MISMATCH_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); yon_ubl_status_highlight_incorrect(window->PasswordEntry); yon_ubl_status_highlight_incorrect(window->RepeatPasswordEntry); return; } gtk_entry_set_text(GTK_ENTRY(entry),password); } on_subwindow_close(self); } yon_bootloader_password_window *yon_ubl_settings_usergroups_password_new(){ yon_bootloader_password_window *window = malloc(sizeof(yon_bootloader_password_window)); GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_password); window->Window=yon_gtk_builder_get_widget(builder,"MainWindow"); window->StatusBox=yon_gtk_builder_get_widget(builder,"StatusBox"); window->TitleLabel=yon_gtk_builder_get_widget(builder,"userTitleNameLabel"); window->PasswordEntry=yon_gtk_builder_get_widget(builder,"PasswordEntry"); window->RepeatPasswordEntry=yon_gtk_builder_get_widget(builder,"RepeatPasswordEntry"); window->PasswordHashEntry=yon_gtk_builder_get_widget(builder,"PasswordHashEntry"); window->HashBox=yon_gtk_builder_get_widget(builder,"HashBox"); window->PasswordBox=yon_gtk_builder_get_widget(builder,"PasswordBox"); window->NoEncriptionCheck=yon_gtk_builder_get_widget(builder,"NoEncriptionCheck"); window->UserCancelButton=yon_gtk_builder_get_widget(builder,"UserCancelButton"); window->UserOkButton=yon_gtk_builder_get_widget(builder,"UserOkButton"); yon_window_config_custom_window_setup(GTK_WINDOW(window->Window),"PasswordWindow"); g_signal_connect(G_OBJECT(window->UserCancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); g_signal_connect(G_OBJECT(window->NoEncriptionCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->PasswordHashEntry); g_signal_connect(G_OBJECT(window->NoEncriptionCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->PasswordBox); yon_gtk_entry_set_password_visibility_icon(GTK_ENTRY(window->PasswordEntry)); yon_gtk_entry_set_password_visibility_icon(GTK_ENTRY(window->RepeatPasswordEntry)); yon_gtk_entry_set_password_visibility_icon(GTK_ENTRY(window->PasswordHashEntry)); gtk_window_set_title(GTK_WINDOW(window->Window),PASSWORD_TITLE_LABEL); return window; } int yon_check_password_blocked(char *password){ if (!yon_char_is_empty(password)){ if (!strcmp(password,"!*")){ memset(password,0,strlen(password)); return 1; } else if (password[0]=='!'&&password[1]=='*'){ char *copy = yon_char_new(password); memcpy(copy,password+2,strlen(password+2)); memset(password,0,strlen(password)); memcpy(password,copy,strlen(copy)); free(copy); return 1; } else if (password[0]=='!'||password[0]=='*'){ free(yon_char_divide(password,0)); return 1; } } return 0; }