#include "ubl-settings-usergroups.h" void on_additional_settings_changed(GtkWidget *self, ubl_settings_usergroups_additional_settings_window *window){ if (self == window->DefaultUserNameEntry){ window->default_user_name = gtk_entry_get_text(GTK_ENTRY(window->DefaultUserNameEntry)); } else if (self == window->DefaultPasswordEntry){ window->default_password = gtk_entry_get_text(GTK_ENTRY(window->DefaultPasswordEntry)); } else if (self == window->RootPasswordEntry){ window->default_root_password = gtk_entry_get_text(GTK_ENTRY(window->RootPasswordEntry)); } else if (self == window->PasswordHashCombo){ window->password_hash = ""; } else if (self == window->DefaultUserAdministratorCheck){ window->user_1000_admin = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->DefaultUserAdministratorCheck)); } else if (self == window->UsersBootCheck){ window->user_boot = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->UsersBootCheck)); // } else if (self == window->UsersShutdownCheck){ // window->user_shutdown = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->UsersShutdownCheck)); } } void on_additional_settings_save(GtkWidget *, ubl_settings_usergroups_additional_settings_window *window){ const char *default_user = (char*)gtk_entry_get_text(GTK_ENTRY(window->DefaultUserNameEntry)); if (!yon_char_is_empty(default_user)){ if (window->default_user_name) yon_config_register(DEFAULTUSER_parameter,DEFAULTUSER_parameter_command,yon_char_new((char*)default_user)); } else { if (window->default_user_name) yon_config_remove_by_key(DEFAULTUSER_parameter); } char *default_password = gtk_combo_box_get_active(GTK_COMBO_BOX(window->DefaultPasswordCombo))>1? (char*)gtk_entry_get_text(GTK_ENTRY(window->DefaultPasswordEntry)):NULL; if (!yon_char_is_empty(default_password)){ if (window->default_password) yon_config_register(DEFAULTPASSWD_parameter,DEFAULTPASSWD_parameter_command,default_password); } else { if (window->default_password) yon_config_remove_by_key(DEFAULTPASSWD_parameter); } char *root_password = gtk_combo_box_get_active(GTK_COMBO_BOX(window->RootPasswordCombo)) > 1 ? (char*)gtk_entry_get_text(GTK_ENTRY(window->RootPasswordEntry)) : NULL; if (!yon_char_is_empty(root_password)){ if (window->default_root_password) yon_config_register(DEFAULTROOTPASSWD_parameter,DEFAULTROOTPASSWD_parameter_command,root_password); } else { if (window->default_root_password) yon_config_remove_by_key(DEFAULTROOTPASSWD_parameter); } int user_k_admin = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->DefaultUserAdministratorCheck)); if (user_k_admin){ if (window->user_1000_admin) yon_config_register(ADDADM_parameter,ADDADM_parameter_command,"yes"); } else { if (window->user_1000_admin) yon_config_register(ADDADM_parameter,ADDADM_parameter_command,"no"); } if (gtk_combo_box_get_active(GTK_COMBO_BOX(window->PasswordHashCombo))!=0){ char *hash = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->PasswordHashCombo)); if (!yon_char_is_empty(hash)){ if (window->password_hash) yon_config_register(HASHPASSWD_parameter,HASHPASSWD_parameter_command,hash); } }else { if (window->password_hash) yon_config_remove_by_key(HASHPASSWD_parameter); } // char *sync = ""; // int boot_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->UsersBootCheck)); // int shutdown_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->UsersShutdownCheck)); // if (!boot_active&&!shutdown_active){ // if (window->user_boot>-1||window->user_boot>-1) // yon_config_remove_by_key(USERADD_SYNC_parameter); // } else { // if (boot_active){ // if (window->user_boot>-1) // sync = "boot"; // } // if (shutdown_active){ // if (window->user_shutdown>-1) // sync = yon_char_unite(sync,yon_char_is_empty(sync)?"":",","shutdown",NULL); // } // if (window->user_boot>-1||window->user_boot>-1) // yon_config_register(USERADD_SYNC_parameter,USERADD_SYNC_parameter_command,sync); // } on_useradd_sync_changed(window); } void on_additional_settings_user_sync_add(GtkWidget *self, ubl_settings_usergroups_additional_settings_window *window){ GtkTreeModel *model; GtkTreeIter iter; GtkWidget *tree; if (self == window->UserAddButton){ tree = window->UsersTree; } else { tree = window->GroupsTree; } if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(tree)),&model,&iter)){ char *name; char *parameter; int min_sensitive; int max_sensitive; gtk_tree_model_get(model,&iter,1,&name,7,&min_sensitive,8,&max_sensitive,9,¶meter,-1); gtk_list_store_append(GTK_LIST_STORE(model),&iter); gtk_list_store_set(GTK_LIST_STORE(model),&iter,0,1,1,name,5,1,6,1,7,min_sensitive,8,max_sensitive,9,parameter,10,1,11,1,-1); } } void on_additional_settings_user_sync_remove(GtkWidget *, ubl_settings_usergroups_additional_settings_window *window){ GtkTreeModel *model; GtkTreeIter iter; if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->UsersTree)),&model,&iter)){ gboolean is_indeletable; gtk_tree_model_get(model,&iter,4,&is_indeletable,-1); if (!is_indeletable){ gtk_list_store_remove(window->UsersShutdownList,&iter); } } } void on_additional_settings_group_sync_add(GtkWidget *, ubl_settings_usergroups_additional_settings_window *){ // on_useradd_sync_changed(window); } void on_additional_settings_group_sync_remove(GtkWidget *, ubl_settings_usergroups_additional_settings_window *window){ GtkTreeModel *model; GtkTreeIter iter; if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->GroupsTree)),&model,&iter)){ gboolean is_indeletable; gtk_tree_model_get(model,&iter,4,&is_indeletable,-1); if (!is_indeletable){ gtk_list_store_remove(window->GroupsShutdownList,&iter); } } // on_useradd_sync_changed(window); } void on_additional_settings_cell_toggled(GtkCellRenderer *self, char *path, ubl_settings_usergroups_additional_settings_window *window){ GtkTreeIter iter; GtkTreeModel *model = NULL; if (self == window->UserActiveCell){ model = GTK_TREE_MODEL(window->UsersShutdownList); } else { model = GTK_TREE_MODEL(window->GroupsShutdownList); } int status; gtk_tree_model_get_iter_from_string(model,&iter,path); gtk_tree_model_get(model,&iter,0,&status,-1); gtk_list_store_set(GTK_LIST_STORE(model),&iter,0,!status,6,!status,-1); if (path[0]=='0'&&!!status){ for_iter(model,&iter){ gtk_list_store_set(GTK_LIST_STORE(model),&iter,5,1,-1); } } else if (path[0] == '0'&&!status) { int i=0; for_iter(model,&iter){ if (i){ gtk_list_store_set(GTK_LIST_STORE(model),&iter,5,0,-1); } i++; } } // on_useradd_sync_changed(window); } void on_additional_settings_cell_edited(GtkCellRenderer *self, char *path, char *new_text, ubl_settings_usergroups_additional_settings_window *window){ for (size_t i=0;iUserMinCell){ model = GTK_TREE_MODEL(window->UsersShutdownList); place_to_set=2; } else if (self == window->UserMaxCell) { model = GTK_TREE_MODEL(window->UsersShutdownList); place_to_set=3; } else if (self == window->GroupMinCell) { model = GTK_TREE_MODEL(window->GroupsShutdownList); place_to_set=2; } else if (self == window->GroupMaxCell) { model = GTK_TREE_MODEL(window->GroupsShutdownList); place_to_set=3; } gtk_tree_model_get_iter_from_string(model,&iter,path); char *old_val; gtk_tree_model_get(model,&iter,place_to_set==2?3:2,&old_val,-1); if (yon_char_is_empty(old_val)) old_val = ""; if (!yon_char_is_empty(old_val)){ if (place_to_set==2){ if (atoi(new_text)>atoi(old_val)){ new_text=old_val; } } else { if (atoi(old_val)>atoi(new_text)){ new_text = old_val; } } } gtk_list_store_set(GTK_LIST_STORE(model),&iter,place_to_set,new_text,place_to_set==2?3:2,old_val,-1); // on_useradd_sync_changed(window); } void on_adiitional_settings_tree_selection_changed(GtkWidget *self, ubl_settings_usergroups_additional_settings_window *window){ GtkTreeModel *model; GtkTreeIter iter; GtkWidget *tree; GtkWidget *add_button; GtkWidget *remove_button; if (self == window->UsersTree){ tree = window->UsersTree; add_button = window->UserAddButton; remove_button = window->UserRemoveButton; } else { tree = window->GroupsTree; add_button = window->GroupAddButton; remove_button = window->GroupRemoveButton; } if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(tree)),&model,&iter)){ int deletable; int creatable; char *parameter; gtk_tree_model_get(model,&iter,9,¶meter,10,&creatable,11,&deletable,-1); if (creatable) gtk_widget_set_sensitive(add_button,1); else gtk_widget_set_sensitive(add_button,0); if (deletable) gtk_widget_set_sensitive(remove_button,1); else gtk_widget_set_sensitive(remove_button,0); } } void on_useradd_sync_changed(ubl_settings_usergroups_additional_settings_window *window){ char *useradd_sync = ""; if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->UsersBootCheck))){ useradd_sync = yon_char_new("boot"); } if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->UsersShutdownCheck))){ char *temp = yon_char_unite(useradd_sync,!yon_char_is_empty(useradd_sync)?",":"","shutdown",NULL); if(!yon_char_is_empty(useradd_sync)) free(useradd_sync); useradd_sync = temp; } GtkTreeIter iter; for_iter(window->UsersShutdownList,&iter){ int active; char *min_str, *max_str; int sensitive; char *parameter; gtk_tree_model_get(GTK_TREE_MODEL(window->UsersShutdownList),&iter,0,&active,2,&min_str,3,&max_str,6,&sensitive,9,¶meter,-1); if (active&&sensitive){ if (!strcmp(parameter,"shutdown@all")){ char *temp = yon_char_unite(useradd_sync,!yon_char_is_empty(useradd_sync)?",":"",parameter,NULL); if(!yon_char_is_empty(useradd_sync)) free(useradd_sync); useradd_sync = temp; } else if (!strcmp(parameter,"shutdown@users")){ char *temp = yon_char_unite(useradd_sync,!yon_char_is_empty(useradd_sync)?",":"",parameter,NULL); if(!yon_char_is_empty(useradd_sync)) free(useradd_sync); useradd_sync = temp; } else if (!strcmp(parameter,"shutdown@systems")){ char *temp = yon_char_unite(useradd_sync,!yon_char_is_empty(useradd_sync)?",":"",parameter,NULL); if(!yon_char_is_empty(useradd_sync)) free(useradd_sync); useradd_sync = temp; } else if (!strcmp(parameter,"shutdown@min-max")){ if (yon_char_is_empty(min_str)||yon_char_is_empty(max_str)){ yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); return; } char *temp = yon_char_unite(useradd_sync,!yon_char_is_empty(useradd_sync)?",":"","shutdown@",min_str,"-",max_str,NULL); if(!yon_char_is_empty(useradd_sync)) free(useradd_sync); useradd_sync = temp; } else if (!strcmp(parameter,"shutdown@uid")){ if (yon_char_is_empty(min_str)){ yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); return; } char *temp = yon_char_unite(useradd_sync,!yon_char_is_empty(useradd_sync)?",":"","shutdown@",min_str,NULL); if(!yon_char_is_empty(useradd_sync)) free(useradd_sync); useradd_sync = temp; } } } if (!yon_char_is_empty(useradd_sync)){ yon_config_register(USERADD_SYNC_parameter,USERADD_SYNC_get_command,useradd_sync); } else { yon_config_remove_by_key(USERADD_SYNC_parameter); } char *groupadd_sync = ""; if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->GroupsBootCheck))){ groupadd_sync = yon_char_new("boot"); } if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->GroupsShutdownCheck))){ char *temp = yon_char_unite(groupadd_sync,!yon_char_is_empty(groupadd_sync)?",":"","shutdown",NULL); if(!yon_char_is_empty(groupadd_sync)) free(groupadd_sync); groupadd_sync = temp; } for_iter(window->GroupsShutdownList,&iter){ int active; char *min_str, *max_str; int sensitive; char *parameter; gtk_tree_model_get(GTK_TREE_MODEL(window->GroupsShutdownList),&iter,0,&active,2,&min_str,3,&max_str,6,&sensitive,9,¶meter,-1); if (active&&sensitive){ if (!strcmp(parameter,"shutdown@all")){ char *temp = yon_char_unite(groupadd_sync,!yon_char_is_empty(groupadd_sync)?",":"",parameter,NULL); if(!yon_char_is_empty(groupadd_sync)) free(groupadd_sync); groupadd_sync = temp; } else if (!strcmp(parameter,"shutdown@users")){ char *temp = yon_char_unite(groupadd_sync,!yon_char_is_empty(groupadd_sync)?",":"",parameter,NULL); if(!yon_char_is_empty(groupadd_sync)) free(groupadd_sync); groupadd_sync = temp; } else if (!strcmp(parameter,"shutdown@systems")){ char *temp = yon_char_unite(groupadd_sync,!yon_char_is_empty(groupadd_sync)?",":"",parameter,NULL); if(!yon_char_is_empty(groupadd_sync)) free(groupadd_sync); groupadd_sync = temp; } else if (!strcmp(parameter,"shutdown@min-max")){ if (yon_char_is_empty(min_str)||yon_char_is_empty(max_str)){ yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); return; } char *temp = yon_char_unite(groupadd_sync,!yon_char_is_empty(groupadd_sync)?",":"","shutdown@",min_str,"-",max_str,NULL); if(!yon_char_is_empty(groupadd_sync)) free(groupadd_sync); groupadd_sync = temp; } else if (!strcmp(parameter,"shutdown@gid")){ if (yon_char_is_empty(min_str)){ yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); return; } char *temp = yon_char_unite(groupadd_sync,!yon_char_is_empty(groupadd_sync)?",":"","shutdown@",min_str,NULL); if(!yon_char_is_empty(groupadd_sync)) free(groupadd_sync); groupadd_sync = temp; } } } if (!yon_char_is_empty(groupadd_sync)){ yon_config_register(GROUPADD_SYNC_parameter,GROUPADD_SYNC_parameter_command,groupadd_sync); } else { yon_config_remove_by_key(GROUPADD_SYNC_parameter); } on_subwindow_close(window->Window); } ubl_settings_usergroups_additional_settings_window *yon_ubl_settings_usergroups_additional_settings_new(){ ubl_settings_usergroups_additional_settings_window *window = malloc(sizeof(ubl_settings_usergroups_additional_settings_window)); GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_ubl_settings_usergroups_additional_settings); window->Window=yon_gtk_builder_get_widget(builder,"Window"); window->StatusBox=yon_gtk_builder_get_widget(builder,"StatusBox"); window->DefaultUserNameEntry=yon_gtk_builder_get_widget(builder,"DefaultUserNameEntry"); window->DefaultUserAdministratorCheck=yon_gtk_builder_get_widget(builder,"DefaultUserAdministratorCheck"); window->DefaultPasswordCombo=yon_gtk_builder_get_widget(builder,"DefaultPasswordCombo"); window->DefaultPasswordEntry=yon_gtk_builder_get_widget(builder,"DefaultPasswordEntry"); window->DefaultPasswordButton=yon_gtk_builder_get_widget(builder,"DefaultPasswordButton"); window->RootPasswordCombo=yon_gtk_builder_get_widget(builder,"RootPasswordCombo"); window->RootPasswordEntry=yon_gtk_builder_get_widget(builder,"RootPasswordEntry"); window->RootPasswordButton=yon_gtk_builder_get_widget(builder,"RootPasswordButton"); window->PasswordHashCombo=yon_gtk_builder_get_widget(builder,"PasswordHashCombo"); window->EncryptAllPasswordsButton=yon_gtk_builder_get_widget(builder,"EncryptAllPasswordsButton"); window->CancelButton=yon_gtk_builder_get_widget(builder,"CancelButton"); window->AcceptButton=yon_gtk_builder_get_widget(builder,"AcceptButton"); window->UsersBootCheck=yon_gtk_builder_get_widget(builder,"UsersBootCheck"); window->UsersShutdownCheck=yon_gtk_builder_get_widget(builder,"UsersShutdownCheck"); window->UsersShutdownExpander=yon_gtk_builder_get_widget(builder,"UsersShutdownExpander"); window->UserShutdownRevealer=yon_gtk_builder_get_widget(builder,"UserShutdownRevealer"); window->UsersTree=yon_gtk_builder_get_widget(builder,"UsersTree"); window->UserAddButton=yon_gtk_builder_get_widget(builder,"UserAddButton"); window->UserRemoveButton=yon_gtk_builder_get_widget(builder,"UserRemoveButton"); window->GroupsBootCheck=yon_gtk_builder_get_widget(builder,"GroupsBootCheck"); window->GroupsShutdownCheck=yon_gtk_builder_get_widget(builder,"GroupsShutdownCheck"); window->GroupsShutdownExpander=yon_gtk_builder_get_widget(builder,"GroupShutdownExpander"); window->GroupShutdownRevealer=yon_gtk_builder_get_widget(builder,"GroupShutdownRevealer"); window->GroupsTree=yon_gtk_builder_get_widget(builder,"GroupsTree"); window->GroupAddButton=yon_gtk_builder_get_widget(builder,"GroupAddButton"); window->GroupRemoveButton=yon_gtk_builder_get_widget(builder,"GroupRemoveButton"); window->UsersShutdownList=GTK_LIST_STORE(gtk_builder_get_object(builder,"UsersShutdownList")); window->GroupsShutdownList=GTK_LIST_STORE(gtk_builder_get_object(builder,"GroupsShutdownList")); window->UserActiveCell=GTK_CELL_RENDERER(gtk_builder_get_object(builder,"UserActiveCell")); window->UserMinCell=GTK_CELL_RENDERER(gtk_builder_get_object(builder,"UserMinCell")); window->UserMaxCell=GTK_CELL_RENDERER(gtk_builder_get_object(builder,"UserMaxCell")); window->GroupActiveCell=GTK_CELL_RENDERER(gtk_builder_get_object(builder,"GroupActiveCell")); window->GroupMinCell=GTK_CELL_RENDERER(gtk_builder_get_object(builder,"GroupMinCell")); window->GroupMaxCell=GTK_CELL_RENDERER(gtk_builder_get_object(builder,"GroupMaxCell")); yon_gtk_revealer_set_from_expander(GTK_REVEALER(window->UserShutdownRevealer),GTK_EXPANDER(window->UsersShutdownExpander)); yon_gtk_revealer_set_from_expander(GTK_REVEALER(window->GroupShutdownRevealer),GTK_EXPANDER(window->GroupsShutdownExpander)); window->default_password=NULL; window->default_root_password=NULL; window->default_user_name=NULL; window->user_1000_admin=-1; window->user_shutdown=-1; window->user_boot=-1; window->password_hash=NULL; char *useradd_sync = yon_config_get_by_key(USERADD_SYNC_parameter); char *groupadd_sync = yon_config_get_by_key(GROUPADD_SYNC_parameter); if (!yon_char_is_empty(useradd_sync)){ GtkTreeModel *model = GTK_TREE_MODEL(window->UsersShutdownList); GtkTreeIter iter; int useradd_sync_size; config_str parsed = yon_char_parse(useradd_sync,&useradd_sync_size,","); if (yon_char_parsed_check_exist(parsed,useradd_sync_size,"shutdown@all")){ int a=0; for_iter(model,&iter){ if (!a){ gtk_list_store_set(window->UsersShutdownList,&iter,6,0,-1); a++; } else { gtk_list_store_set(window->UsersShutdownList,&iter,5,1,-1); } } } int uid_set=0, maxmin_set=0; for (int i=0;iUsersShutdownExpander),1); gtk_revealer_set_reveal_child(GTK_REVEALER(window->UserShutdownRevealer),1); if (!strcmp(parsed[i],"boot")){ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->UsersBootCheck),1); } else if (!strcmp(parsed[i],"shutdown@all")){ gtk_tree_model_get_iter_first(model,&iter); gtk_list_store_set(window->UsersShutdownList,&iter,0,1,7,0,8,0,-1); } else if (!strcmp(parsed[i],"shutdown@users")){ gtk_tree_model_get_iter_first(model,&iter); gtk_list_store_set(window->UsersShutdownList,&iter,0,0,5,0,6,0,-1); gtk_tree_model_get_iter_from_string(model,&iter,"1"); gtk_list_store_set(window->UsersShutdownList,&iter,0,1,5,1,6,1,7,0,8,0,-1); } else if (!strcmp(parsed[i],"shutdown@systems")){ gtk_tree_model_get_iter_first(model,&iter); gtk_list_store_set(window->UsersShutdownList,&iter,0,0,5,0,6,0,-1); gtk_tree_model_get_iter_from_string(model,&iter,"2"); gtk_list_store_set(window->UsersShutdownList,&iter,0,1,5,1,6,1,7,0,8,0,-1); } else if (strstr(parsed[i],"-")){ gtk_tree_model_get_iter_first(model,&iter); gtk_list_store_set(window->UsersShutdownList,&iter,0,0,5,0,6,0,-1); if (!maxmin_set){ gtk_tree_model_get_iter_from_string(model,&iter,"3"); maxmin_set++; } else { gtk_list_store_append(window->UsersShutdownList,&iter); gtk_list_store_set(window->UsersShutdownList,&iter,1,SHUTDOWN_UID_RANGE_LABEL,5,1,6,1,7,1,8,1,9,"shutdown@uid",10,1,11,1,-1); } char *temp = yon_char_new(parsed[i]); free(yon_char_divide_search(temp,"@",-1)); char *min = yon_char_divide_search(temp,"-",-1); gtk_list_store_set(window->UsersShutdownList,&iter,0,1,2,min,3,temp,6,1,7,1,8,1,-1); } else if (strstr(parsed[i],"shutdown@")) { gtk_tree_model_get_iter_first(model,&iter); gtk_list_store_set(window->UsersShutdownList,&iter,0,0,5,0,6,0,-1); if (!uid_set){ gtk_tree_model_get_iter_from_string(model,&iter,"4"); uid_set++; } else { gtk_list_store_append(window->UsersShutdownList,&iter); gtk_list_store_set(window->UsersShutdownList,&iter,1,SHUTDOWN_UID_LABEL,5,1,6,1,7,1,8,0,9,"shutdown@uid",10,1,11,1,-1); } char *temp = yon_char_new(parsed[i]); free(yon_char_divide_search(temp,"@",-1)); gtk_list_store_set(window->UsersShutdownList,&iter,0,1,2,temp,6,1,7,1,8,1,-1); } else if (!strcmp(parsed[i],"shutdown")){ gtk_tree_model_get_iter_first(model,&iter); gtk_list_store_set(window->UsersShutdownList,&iter,0,0,-1); gtk_tree_model_get_iter_from_string(model,&iter,"1"); gtk_list_store_set(window->UsersShutdownList,&iter,0,1,5,1,6,1,-1); gtk_tree_model_get_iter_from_string(model,&iter,"2"); gtk_list_store_set(window->UsersShutdownList,&iter,0,1,5,1,6,1,-1); } } } if (!yon_char_is_empty(groupadd_sync)){ GtkTreeModel *model = GTK_TREE_MODEL(window->GroupsShutdownList); GtkTreeIter iter; int useradd_sync_size; config_str parsed = yon_char_parse(groupadd_sync,&useradd_sync_size,","); if (yon_char_parsed_check_exist(parsed,useradd_sync_size,"shutdown@all")){ int a=0; for_iter(model,&iter){ if (!a){ gtk_list_store_set(window->GroupsShutdownList,&iter,6,0,-1); a++; } else { gtk_list_store_set(window->GroupsShutdownList,&iter,5,1,-1); } } } gtk_expander_set_expanded(GTK_EXPANDER(window->GroupsShutdownExpander),1); gtk_revealer_set_reveal_child(GTK_REVEALER(window->GroupShutdownRevealer),1); int uid_set=0, maxmin_set=0; for (int i=0;iGroupsBootCheck),1); } else if (!strcmp(parsed[i],"shutdown@all")){ gtk_tree_model_get_iter_first(model,&iter); gtk_list_store_set(window->GroupsShutdownList,&iter,0,1,-1); } else if (!strcmp(parsed[i],"shutdown@users")){ gtk_tree_model_get_iter_first(model,&iter); gtk_list_store_set(window->GroupsShutdownList,&iter,0,0,-1); gtk_tree_model_get_iter_from_string(model,&iter,"1"); gtk_list_store_set(window->GroupsShutdownList,&iter,0,1,5,1,6,1,-1); } else if (!strcmp(parsed[i],"shutdown@systems")){ gtk_tree_model_get_iter_first(model,&iter); gtk_list_store_set(window->GroupsShutdownList,&iter,0,0,-1); gtk_tree_model_get_iter_from_string(model,&iter,"2"); gtk_list_store_set(window->GroupsShutdownList,&iter,0,1,5,1,6,1,-1); } else if (strstr(parsed[i],"-")){ gtk_tree_model_get_iter_first(model,&iter); gtk_list_store_set(window->GroupsShutdownList,&iter,0,0,-1); if (!maxmin_set){ gtk_tree_model_get_iter_from_string(model,&iter,"3"); maxmin_set++; } else { gtk_list_store_append(window->GroupsShutdownList,&iter); gtk_list_store_set(window->GroupsShutdownList,&iter,1,SHUTDOWN_GID_RANGE_LABEL,5,1,6,1,9,"shutdown@uid",10,1,11,1,-1); } char *temp = yon_char_new(parsed[i]); free(yon_char_divide_search(temp,"@",-1)); char *min = yon_char_divide_search(temp,"-",-1); gtk_list_store_set(window->GroupsShutdownList,&iter,0,1,2,min,3,temp,6,1,7,1,8,1,-1); } else if (strstr(parsed[i],"shutdown@")){ gtk_tree_model_get_iter_first(model,&iter); gtk_list_store_set(window->GroupsShutdownList,&iter,0,0,-1); if (!uid_set){ gtk_tree_model_get_iter_from_string(model,&iter,"4"); uid_set++; } else { gtk_list_store_append(window->GroupsShutdownList,&iter); gtk_list_store_set(window->GroupsShutdownList,&iter,1,SHUTDOWN_GID_LABEL,5,1,6,1,7,1,8,1,9,"shutdown@uid",10,1,11,1,-1); } char *temp = yon_char_new(parsed[i]); free(yon_char_divide_search(temp,"@",-1)); gtk_list_store_set(window->GroupsShutdownList,&iter,0,1,2,temp,5,1,6,1,-1); } else if (!strcmp(parsed[i],"shutdown")){ gtk_tree_model_get_iter_first(model,&iter); gtk_list_store_set(window->GroupsShutdownList,&iter,0,0,-1); gtk_tree_model_get_iter_from_string(model,&iter,"1"); gtk_list_store_set(window->GroupsShutdownList,&iter,0,1,6,1,-1); gtk_tree_model_get_iter_from_string(model,&iter,"2"); gtk_list_store_set(window->GroupsShutdownList,&iter,0,1,6,1,-1); } } } g_signal_connect(G_OBJECT(window->UserAddButton),"clicked",G_CALLBACK(on_additional_settings_user_sync_add),window); g_signal_connect(G_OBJECT(window->UserRemoveButton),"clicked",G_CALLBACK(on_additional_settings_user_sync_remove),window); g_signal_connect(G_OBJECT(window->GroupAddButton),"clicked",G_CALLBACK(on_additional_settings_group_sync_add),window); g_signal_connect(G_OBJECT(window->GroupRemoveButton),"clicked",G_CALLBACK(on_additional_settings_group_sync_remove),window); g_signal_connect(G_OBJECT(window->UserActiveCell),"toggled",G_CALLBACK(on_additional_settings_cell_toggled),window); g_signal_connect(G_OBJECT(window->GroupActiveCell),"toggled",G_CALLBACK(on_additional_settings_cell_toggled),window); g_signal_connect(G_OBJECT(window->UserMinCell),"edited",G_CALLBACK(on_additional_settings_cell_edited),window); g_signal_connect(G_OBJECT(window->UserMaxCell),"edited",G_CALLBACK(on_additional_settings_cell_edited),window); g_signal_connect(G_OBJECT(window->GroupMinCell),"edited",G_CALLBACK(on_additional_settings_cell_edited),window); g_signal_connect(G_OBJECT(window->GroupMaxCell),"edited",G_CALLBACK(on_additional_settings_cell_edited),window); g_signal_connect(G_OBJECT(window->UsersShutdownExpander),"activate",G_CALLBACK(on_additional_settings_changed),window); g_signal_connect(G_OBJECT(window->GroupsShutdownExpander),"activate",G_CALLBACK(on_additional_settings_changed),window); g_signal_connect(G_OBJECT(window->UsersShutdownCheck),"toggled",G_CALLBACK(on_additional_settings_changed),window); g_signal_connect(G_OBJECT(window->GroupsShutdownCheck),"toggled",G_CALLBACK(on_additional_settings_changed),window); g_signal_connect(G_OBJECT(window->UsersTree),"cursor-changed",G_CALLBACK(on_adiitional_settings_tree_selection_changed),window); g_signal_connect(G_OBJECT(window->GroupsTree),"cursor-changed",G_CALLBACK(on_adiitional_settings_tree_selection_changed),window); yon_window_config_custom_window_setup(GTK_WINDOW(window->Window),"AdditionalSettingsWindow"); gtk_window_set_title(GTK_WINDOW(window->Window),ADDITIONAL_SETTINGS_TITLE_LABEL); { char *sync_parameters = yon_config_get_by_key(USERADD_SYNC_parameter); int size; config_str parsed = yon_char_parse(sync_parameters,&size,","); if (sync_parameters){ if (strstr(sync_parameters,"boot")){ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->UsersBootCheck),1); } if (yon_char_parsed_check_exist(parsed,size,"shutdown")!=-1){ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->UsersShutdownCheck),1); } } } { char *sync_parameters = yon_config_get_by_key(GROUPADD_SYNC_parameter); int size; config_str parsed = yon_char_parse(sync_parameters,&size,","); if (sync_parameters){ if (strstr(sync_parameters,"boot")){ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->GroupsBootCheck),1); } if (yon_char_parsed_check_exist(parsed,size,"shutdown")!=-1){ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->GroupsShutdownCheck),1); } } } int hash_size=0; config_str hash_algos = yon_file_open(hash_list_path,&hash_size); if (main_config.hash_default_id==-1){ int size; config_str ret = yon_config_load(get_default_hash_command,&size); if (size>0){ char *hash = ret[0]; if (hash[strlen(hash)-1]=='\n') hash[strlen(hash)-1]='\0'; for (int i=0;iPasswordHashCombo),yon_char_unite(DEFAULT_USER_LABEL," (",def,")",NULL)); } } } } } for (int i=1;iPasswordHashCombo),parsed[0],_(parsed[1])); gtk_widget_set_tooltip_text(window->PasswordHashCombo,parsed[1]); yon_char_parsed_free(parsed,parsed_size); } } yon_char_parsed_free(hash_algos,hash_size); gtk_combo_box_set_active(GTK_COMBO_BOX(window->PasswordHashCombo),0); char *default_user = yon_config_get_by_key(DEFAULTUSER_parameter); if (!yon_char_is_empty(default_user)) gtk_entry_set_text(GTK_ENTRY(window->DefaultUserNameEntry),default_user); g_signal_connect(G_OBJECT(window->RootPasswordCombo),"changed",G_CALLBACK(on_password_combo_changed),window->RootPasswordButton); g_signal_connect(G_OBJECT(window->DefaultPasswordCombo),"changed",G_CALLBACK(on_password_combo_changed),window->DefaultPasswordButton); char *default_password = yon_config_get_by_key(DEFAULTPASSWD_parameter); if (!yon_char_is_empty(default_password)){ gtk_entry_set_text(GTK_ENTRY(window->DefaultPasswordEntry),default_password); if(!yon_config_check_ignore(DEFAULTPASSWD_parameter)) gtk_combo_box_set_active(GTK_COMBO_BOX(window->DefaultPasswordCombo),2); } char *root_password = yon_config_get_by_key(DEFAULTROOTPASSWD_parameter); if (!yon_char_is_empty(root_password)){ gtk_entry_set_text(GTK_ENTRY(window->RootPasswordEntry),root_password); if(!yon_config_check_ignore(DEFAULTROOTPASSWD_parameter)) gtk_combo_box_set_active(GTK_COMBO_BOX(window->RootPasswordCombo),2); } char *is_k_admin = yon_config_get_by_key(ADDADM_parameter); if (!yon_char_is_empty(is_k_admin)) if (!strcmp(is_k_admin,"yes")) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->DefaultUserAdministratorCheck),1); char *hash = yon_config_get_by_key(HASHPASSWD_parameter); if (!yon_char_is_empty(hash)){ gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->PasswordHashCombo),hash); } // char *parameter = config(USERADD_SYNC_parameter); // { // int size; // config_str parsed = yon_char_parse(parameter,&size,","); // int sync_parameters_size; // config_str sync_parameters = yon_resource_open_file(sync_parameters_path,&sync_parameters_size); // for(int i=0;iUsersShutdownList,&iter); // gtk_list_store_set(window->UsersShutdownList,&iter,1,sync_parsed[0],2,cur[0],3,cur_size>1?cur[1]:"",-1); // }; // } // yon_char_parsed_free(sync_parsed,sync_parsed_size); // } // } // } g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_additional_settings_save),window); dictionary *default_dict=NULL; yon_dictionary_add_or_create_if_exists_with_data(default_dict,"combo",window->DefaultPasswordCombo); yon_dictionary_add_or_create_if_exists_with_data(default_dict,"entry",window->DefaultPasswordEntry); dictionary *root_dict=NULL; yon_dictionary_add_or_create_if_exists_with_data(root_dict,"combo",window->RootPasswordCombo); yon_dictionary_add_or_create_if_exists_with_data(root_dict,"entry",window->RootPasswordEntry); g_signal_connect(G_OBJECT(window->DefaultPasswordButton),"clicked",G_CALLBACK(on_password_change),default_dict); g_signal_connect(G_OBJECT(window->RootPasswordButton),"clicked",G_CALLBACK(on_password_change),root_dict); dialog_confirmation_data *data=malloc(sizeof(dialog_confirmation_data)); data->function=on_passwords_encrypt; data->action_text = ENCRYPT_SURE_LABEL; data->data=NULL; g_signal_connect(G_OBJECT(window->EncryptAllPasswordsButton),"clicked",G_CALLBACK(yon_confirmation_dialog_call),data); g_signal_connect(G_OBJECT(window->PasswordHashCombo),"changed",G_CALLBACK(on_hash_changed),window); g_signal_connect(G_OBJECT(window->DefaultUserNameEntry),"changed",G_CALLBACK(on_additional_settings_changed),window); g_signal_connect(G_OBJECT(window->DefaultPasswordEntry),"changed",G_CALLBACK(on_additional_settings_changed),window); g_signal_connect(G_OBJECT(window->RootPasswordEntry),"changed",G_CALLBACK(on_additional_settings_changed),window); g_signal_connect(G_OBJECT(window->PasswordHashCombo),"changed",G_CALLBACK(on_additional_settings_changed),window); g_signal_connect(G_OBJECT(window->DefaultUserAdministratorCheck),"toggled",G_CALLBACK(on_additional_settings_changed),window); g_signal_connect(G_OBJECT(window->UsersBootCheck),"toggled",G_CALLBACK(on_additional_settings_changed),window); g_signal_connect(G_OBJECT(window->GroupsBootCheck),"toggled",G_CALLBACK(on_additional_settings_changed),window); // g_signal_connect(G_OBJECT(window->UsersBootCheck),"toggled",G_CALLBACK(on_users_boot_toggled),NULL); // g_signal_connect(G_OBJECT(window->UsersShutdownCheck),"toggled",G_CALLBACK(on_users_shutdown_toggled),NULL); return window; } void on_ubl_settings_usergroups_additional_settings_open(GtkWidget *, main_window *widgets){ ubl_settings_usergroups_additional_settings_window *window = yon_ubl_settings_usergroups_additional_settings_new(); gtk_window_set_transient_for(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window)); gtk_widget_show(window->Window); } config_str yon_parameter_parse(char *parameter, int *size){ if (yon_char_is_empty(parameter)) return NULL; char *cur; (*size)=0; if ((cur = strstr(parameter,"<"))){ config_str parsed = yon_char_parse(parameter,size,">"); for (int i=0;i<(*size);i++){ char *tag = strstr(parsed[i],">"); int length = strlen(parsed[i])-strlen(tag+1); free(yon_char_divide(parsed[i],length)); } return parsed; } else { config_str parsed = yon_char_parsed_new(size,parameter,NULL); return parsed; } } int yon_parameter_check_tag(char *parameter, char *pattern){ char *tag_template = "[0-9]{1,}"; char *converted = ""; char *current = pattern; while (!yon_char_is_empty(current)){ if ((*current)=='<'){ char *end = strchr(current,'>'); if (end){ converted = yon_char_append(converted,tag_template); current = end+1; } else { // закрытие тэга не найдено } } else { char *temp = yon_char_append_c(converted,*current); if (!yon_char_is_empty(converted)) free(converted); converted = temp; current++; } } GRegex *regex = g_regex_new(converted,G_REGEX_EXTENDED,0,NULL); if (regex){ GMatchInfo *match; if (g_regex_match(regex,parameter,0,&match)){ char *value = g_match_info_fetch(match, 0); if (!strcmp(parameter,value)) return 1; } } return 0; } config_str yon_parameter_get_by_template(char *parameter, char *pattern, int *size){ config_str final = NULL; char *tag_template = "[0-9]{1,}"; char *converted = ""; char *current = pattern; while (!yon_char_is_empty(current)){ if ((*current)=='<'){ char *end = strchr(current,'>'); if (end){ converted = yon_char_append(converted,tag_template); current = end+1; } else { // закрытие тэга не найдено } } else { char *temp = yon_char_append_c(converted,*current); if (!yon_char_is_empty(converted)) free(converted); converted=temp; current++; } } GRegex *regex = g_regex_new("[0-9]{1,}",G_REGEX_EXTENDED,0,NULL); if (regex){ GMatchInfo *match; if (g_regex_match(regex, parameter, 0, &match)) { while (g_match_info_matches(match)) { char *value = g_match_info_fetch(match, 0); yon_char_parsed_add_or_create_if_exists(final, size, value); g_free(value); g_match_info_next(match, NULL); } } g_match_info_free(match); } g_regex_unref(regex); return final; }