#include "ubl-settings-usergroups.h" config main_config; //functions int yon_load_proceed(YON_CONFIG_TYPE type){ if (yon_config_load_register(type,"users","DEFAULTPASSWD DEFAULTROOTPASSWD DEFAULTUSER HASHPASSWD USERGROUPS ADDADM USERADD[*] USERSHADOW[*] GROUPADD[*]",NULL)){ return 1; } return 0; } void yon_interface_update(main_window *widgets){ gtk_list_store_clear(widgets->UsersList); gtk_list_store_clear(widgets->GroupsList); int size; GtkTreeIter iter; config_str users = yon_config_get_all_by_key("USERADD",&size); if (users){ for (int i=0;iUsersList,&iter); int parameters_size; config_str parameters = yon_char_parse(users[i],¶meters_size,":"); free(yon_char_divide(parameters[0],7)); char *login = NULL; if (strstr(parameters[0],"\"")){ login = yon_char_divide_search(parameters[0],"\"",-1); login[strlen(login)-2]='\0'; } else { login = yon_char_divide_search(parameters[0],"=",-1); login[strlen(login)-1]='\0'; } gtk_list_store_set(widgets->UsersList,&iter, 2,login, 3,parameters_size>0?parameters[0]:"", 1,parameters_size>1?parameters[1]:"", 4,parameters_size>2?parameters[2]:"", 5,parameters_size>3?parameters[3]:"", 6,parameters_size>4?parameters[4]:"", 7,parameters_size>5?ENDRYPTED_LABEL:DEFAULT_USER_LABEL, -1); if(parameters) free(parameters); } free(users); } config_str groups = yon_config_get_all_by_key("GROUPADD",&size); if (groups){ for (int i=0;iGroupsList,&iter); int parameters_size; config_str parameters = yon_char_parse(groups[i],¶meters_size,":"); free(yon_char_divide(parameters[0],8)); char *login = yon_char_divide_search(parameters[i],"\"",-1); login[strlen(login)-2]='\0'; gtk_list_store_set(widgets->GroupsList,&iter, 1,login, 0,parameters_size>1?parameters[1]:"", 2,parameters_size>0?parameters[0]:"", 3,parameters_size>2?parameters[2]:"", 4,parameters_size>3?ENDRYPTED_LABEL:DEFAULT_USER_LABEL, -1); if(parameters) free(parameters); } } } void on_config_local_load(GtkWidget *self, main_window *widgets){ yon_load_proceed(YON_CONFIG_LOCAL); main_config.load_mode=1; yon_interface_update(widgets); } void on_config_global_load(GtkWidget *self, main_window *widgets){ yon_load_proceed(YON_CONFIG_GLOBAL); main_config.load_mode=0; yon_interface_update(widgets); } void on_config_save(){ yon_save_proceed(NULL,YON_CONFIG_BOTH,"users", "DEFAULTPASSWD DEFAULTROOTPASSWD DEFAULTUSER HASHPASSWD USERGROUPS ADDADM USERADD[*] USERSHADOW[*] GROUPADD[*]",NULL); } void on_config_global_save(){ yon_save_proceed("global",YON_CONFIG_GLOBAL,"users", "DEFAULTPASSWD DEFAULTROOTPASSWD DEFAULTUSER HASHPASSWD USERGROUPS ADDADM USERADD[*] USERSHADOW[*] GROUPADD[*]",NULL); } void on_config_local_save(){ yon_save_proceed("system",YON_CONFIG_LOCAL,"users", "DEFAULTPASSWD DEFAULTROOTPASSWD DEFAULTUSER HASHPASSWD USERGROUPS ADDADM USERADD[*] USERSHADOW[*] GROUPADD[*]",NULL); } void on_password_combo_changed(GtkComboBox *self, GtkWidget *target){ gtk_widget_set_sensitive(target,gtk_combo_box_get_active(self)>1); } void on_filechooser_open(GtkWidget *self, GtkEntry *output_target){ GtkWidget *dialog = gtk_file_chooser_dialog_new(TITLE_LABEL,NULL,GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,CANCEL_LABEL,GTK_RESPONSE_CANCEL,ACCEPT_LABEL,GTK_RESPONSE_ACCEPT,NULL); int responce = gtk_dialog_run(GTK_DIALOG(dialog)); if (responce==GTK_RESPONSE_ACCEPT){ char *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); gtk_entry_set_text(output_target,filename); } on_subwindow_close(dialog); // ubl_settings_usergroups_additional_settings_window *window = yon_ubl_settings_usergroups_additional_settings_new(); // g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); // gtk_widget_show(window->Window); } void on_groups_save(GtkWidget *self, dictionary *dict){ ubl_settings_usergroups_group_window *window = yon_dictionary_get_data(dict->first,ubl_settings_usergroups_group_window*); GtkEntry *output = yon_dictionary_get_data(dict->first->next,GtkEntry*); GtkTreeIter iter; GtkTreeModel *model = GTK_TREE_MODEL(window->list); if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->GroupsTree)),&model,&iter)){ char *name; gtk_tree_model_get(model,&iter,1,&name,-1); gtk_entry_set_text(output,name); free(name); } on_subwindow_close(self); } void on_groups_clicked(GtkWidget *self, GtkEntry *output_target){ ubl_settings_usergroups_group_window *window = yon_ubl_settings_usergroups_group_new(); GtkTreeIter iter, itar; int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(main_config.groups_list),&iter); for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(main_config.groups_list),&iter)){ char *groupname; gtk_tree_model_get(GTK_TREE_MODEL(main_config.groups_list),&iter,1,&groupname,-1); gtk_list_store_append(window->list,&itar); gtk_list_store_set(window->list,&itar,1,groupname,-1); free(groupname); } gtk_tree_view_column_set_visible(gtk_tree_view_get_column(GTK_TREE_VIEW(window->GroupsTree),0),0); gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->GroupsTree)),GTK_SELECTION_SINGLE); dictionary *dict = NULL; yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); yon_dictionary_add_or_create_if_exists_with_data(dict,"output",output_target); g_signal_connect(G_OBJECT(window->GroupsOkButton),"clicked",G_CALLBACK(on_groups_save),dict); gtk_widget_show(window->GroupsWindow); } void on_groups_multiple_save(GtkWidget *self, dictionary *dict){ ubl_settings_usergroups_group_window *window = yon_dictionary_get_data(dict->first,ubl_settings_usergroups_group_window*); GtkEntry *output = yon_dictionary_get_data(dict->first->next,GtkEntry*); GtkTreeIter iter; int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(window->list),&iter); char *full_groups=""; for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(window->list),&iter)){ char *name; int status; gtk_tree_model_get(GTK_TREE_MODEL(window->list),&iter,0,&status,1,&name,-1); if (status){ char *extend_groups = yon_char_unite(full_groups,!yon_char_is_empty(full_groups)?",":"",name,NULL); if (!yon_char_is_empty(full_groups)) free(full_groups); full_groups=extend_groups; } } gtk_entry_set_text(output,full_groups); on_subwindow_close(self); } void on_groups_multiple_clicked(GtkWidget *self, GtkEntry *output_target){ ubl_settings_usergroups_group_window *window = yon_ubl_settings_usergroups_group_new(); GtkTreeIter iter, itar; int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(main_config.groups_list),&iter); for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(main_config.groups_list),&iter)){ char *groupname; gtk_tree_model_get(GTK_TREE_MODEL(main_config.groups_list),&iter,1,&groupname,-1); gtk_list_store_append(window->list,&itar); gtk_list_store_set(window->list,&itar,1,groupname,-1); free(groupname); } dictionary *dict = NULL; yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); yon_dictionary_add_or_create_if_exists_with_data(dict,"output",output_target); g_signal_connect(G_OBJECT(window->GroupsOkButton),"clicked",G_CALLBACK(on_groups_multiple_save),dict); gtk_widget_show(window->GroupsWindow); } void on_password_change(GtkWidget *self, dictionary *entry_dict){ GtkComboBox *combo = yon_dictionary_get_data(entry_dict->first,GtkComboBox*); GtkEntry *output_target = yon_dictionary_get_data(entry_dict->first->next,GtkEntry*); ubl_settings_usergroups_password_window *window = yon_ubl_settings_usergroups_password_new(); int active = gtk_combo_box_get_active(combo); if (active == 2) gtk_widget_hide(window->HashBox); else if (active==3) gtk_widget_hide(window->PasswordBox); dictionary *dict = NULL; 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->CreateGroupWindow),GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(output_target)))); gtk_widget_show(window->CreateGroupWindow); } void on_additional_settings_clicked(GtkWidget *self, GtkEntry *output_target){ ubl_settings_usergroups_additional_settings_window *window = yon_ubl_settings_usergroups_additional_settings_new(); g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); gtk_widget_show(window->Window); } void on_expiration_clicked(GtkWidget *self, ubl_settings_usergroups_user_window *window){ gtk_popover_popup(GTK_POPOVER(window->CalendarPopup)); } // standard functions void on_additional_settings_save(GtkWidget *self, 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)){ yon_config_register("DEFAULTUSER","users",yon_char_new((char*)default_user)); } else { yon_config_remove_by_key("DEFAULTUSER"); } char *default_password = (char*)gtk_entry_get_text(GTK_ENTRY(window->DefaultPasswordEntry)); if (!yon_char_is_empty(default_password)){ yon_config_register("DEFAULTPASSWD","users",default_password); } else { yon_config_remove_by_key("DEFAULTPASSWD"); } char *root_password = (char*)gtk_entry_get_text(GTK_ENTRY(window->RootPasswordEntry)); if (!yon_char_is_empty(root_password)){ yon_config_register("DEFAULTROOTPASSWD","users",root_password); } else { yon_config_remove_by_key("DEFAULTROOTPASSWD"); } int user_k_admin = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->DefaultUserAdministratorCheck)); if (user_k_admin){ yon_config_register("ADDADM","users","yes"); } else { yon_config_register("ADDADM","users","no"); } char *hash = (char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->PasswordHashCombo)); if (!yon_char_is_empty(hash)){ yon_config_register("HASHPASSWD","users",hash); } } 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->CancelButton=yon_gtk_builder_get_widget(builder,"CancelButton"); window->AcceptButton=yon_gtk_builder_get_widget(builder,"AcceptButton"); gtk_window_set_title(GTK_WINDOW(window->Window),ADDITIONAL_SETTINGS_TITLE_LABEL); int hash_size=0; config_str hash_algos = yon_file_open(hash_list_path,&hash_size); for (int i=1;iPasswordHashCombo),parsed[0]); 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"); if (!yon_char_is_empty(default_user)) gtk_entry_set_text(GTK_ENTRY(window->DefaultUserNameEntry),default_user); char *default_password = yon_config_get_by_key("DEFAULTPASSWD"); if (!yon_char_is_empty(default_password)) gtk_entry_set_text(GTK_ENTRY(window->DefaultPasswordEntry),default_password); char *root_password = yon_config_get_by_key("DEFAULTROOTPASSWD"); if (!yon_char_is_empty(root_password)) gtk_entry_set_text(GTK_ENTRY(window->RootPasswordEntry),root_password); char *is_k_admin = yon_config_get_by_key("ADDADM"); 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"); if (!yon_char_is_empty(hash)){ gtk_combo_box_set_active(GTK_COMBO_BOX(window->PasswordHashCombo),yon_gtk_combo_box_text_find(window->PasswordHashCombo,hash)); } 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); 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); return window; } void on_ubl_settings_usergroups_additional_settings_open(GtkWidget *self, main_window *widgets){ ubl_settings_usergroups_additional_settings_window *window = yon_ubl_settings_usergroups_additional_settings_new(); g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); gtk_window_set_transient_for(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window)); gtk_widget_show(window->Window); } void on_user_choose(GtkWidget *self, GtkEntry *target){ ubl_settings_usergroups_group_window *window = yon_ubl_settings_usergroups_group_new(); GtkTreeIter iter, itar; int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(main_config.users_list),&iter); for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(main_config.users_list),&iter)){ char *groupname; gtk_tree_model_get(GTK_TREE_MODEL(main_config.users_list),&iter,2,&groupname,-1); gtk_list_store_append(window->list,&itar); gtk_list_store_set(window->list,&itar,1,groupname,-1); free(groupname); } gtk_list_store_new(2,G_TYPE_BOOLEAN,G_TYPE_STRING); dictionary *dict = NULL; yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); yon_dictionary_add_or_create_if_exists_with_data(dict,"output",target); g_signal_connect(G_OBJECT(window->GroupsOkButton),"clicked",G_CALLBACK(on_groups_multiple_save),dict); gtk_widget_show(window->GroupsWindow); } void on_group_save(GtkWidget *self, dictionary *dict){ main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); ubl_settings_usergroups_group_creation_window *window = yon_dictionary_get_data(dict->first->next,ubl_settings_usergroups_group_creation_window*); char *final_string = NULL; char *group_name = NULL; char *group_users = NULL; char *gid = NULL; char *non_unique = NULL; char *gsystem = NULL; char *password = NULL; int gid_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userUIDAutoCheck)); if (gid_active){ gid="x"; } else { gid = (char*)gtk_entry_get_text(GTK_ENTRY(window->userUIDEntry)); if (yon_char_is_empty(gid)){ yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); yon_ubl_status_highlight_incorrect(window->userUIDEntry); } } group_name = (char*)gtk_entry_get_text(GTK_ENTRY(window->userLoginEntry)); if (yon_char_is_empty(group_name)){ yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); yon_ubl_status_highlight_incorrect(window->userLoginEntry); } group_users = (char*)gtk_entry_get_text(GTK_ENTRY(window->userGroupsEntry)); if (yon_char_is_empty(group_users)){ yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); yon_ubl_status_highlight_incorrect(window->userGroupsEntry); } int non_unique_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->UnuniqueGIDCheck)); if(non_unique_active){ non_unique=" --non-unique"; } else non_unique=""; int gsystem_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->SystemGroupCheck)); if(gsystem_active){ gsystem=" --system"; } else gsystem=""; password = (char*)gtk_entry_get_text(GTK_ENTRY(window->PasswordEntry)); 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); } final_string = yon_char_unite(yon_char_return_if_exist(group_users,"x"), ":",yon_char_return_if_exist(gid,"x"), ":",yon_char_return_if_exist(non_unique,""), yon_char_return_if_exist(gsystem,""), ":",yon_char_return_if_exist(password,"x"), NULL); yon_config_register(GROUPADD(group_name),"users",final_string); GtkTreeIter iter; GtkTreeModel *model = GTK_TREE_MODEL(widgets->GroupsList); if (!gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->GroupsList)),&model,&iter)) gtk_list_store_append(widgets->GroupsList,&iter); gtk_list_store_set(widgets->GroupsList,&iter,0,gid,1,group_name,2,group_users,3,yon_char_append(non_unique,gsystem),4,gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->PasswordCombo)),-1); on_subwindow_close(self); } ubl_settings_usergroups_group_creation_window *yon_ubl_settings_usergroups_group_creation_new(){ ubl_settings_usergroups_group_creation_window *window = malloc(sizeof(ubl_settings_usergroups_group_creation_window)); GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_ubl_settings_usergroups_group_creation); window->CreateGroupWindow=yon_gtk_builder_get_widget(builder,"CreateGroupWindow"); window->StatusBox=yon_gtk_builder_get_widget(builder,"StatusBox"); window->userUIDAutoCheck=yon_gtk_builder_get_widget(builder,"GIDAutoCheck"); window->userUIDEntry=yon_gtk_builder_get_widget(builder,"userUIDEntry"); window->userLoginEntry=yon_gtk_builder_get_widget(builder,"userLoginEntry"); window->userGroupsEntry=yon_gtk_builder_get_widget(builder,"userGroupsEntry"); window->UserAdditionalGroupsButton=yon_gtk_builder_get_widget(builder,"AdditionalGroupsButton"); window->UserCancelButton=yon_gtk_builder_get_widget(builder,"UserCancelButton"); window->UserOkButton=yon_gtk_builder_get_widget(builder,"UserOkButton"); window->AdditionalGroupsButton=yon_gtk_builder_get_widget(builder,"AdditionalGroupsButton"); window->UnuniqueGIDCheck=yon_gtk_builder_get_widget(builder,"UnuniqueGIDCheck"); window->SystemGroupCheck=yon_gtk_builder_get_widget(builder,"SystemGroupCheck"); window->PasswordCombo=yon_gtk_builder_get_widget(builder,"PasswordCombo"); window->PasswordEntry=yon_gtk_builder_get_widget(builder,"PasswordEntry"); window->ChangePasswordButton=yon_gtk_builder_get_widget(builder,"ChangePasswordButton"); gtk_window_set_title(GTK_WINDOW(window->CreateGroupWindow),GROUP_TITLE_LABEL); dictionary *entry_dict=NULL; yon_dictionary_add_or_create_if_exists_with_data(entry_dict,"combo",window->PasswordCombo); yon_dictionary_add_or_create_if_exists_with_data(entry_dict,"entry",window->PasswordEntry); g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"clicked",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->userUIDEntry); g_signal_connect(G_OBJECT(window->ChangePasswordButton),"clicked",G_CALLBACK(on_password_change),entry_dict); g_signal_connect(G_OBJECT(window->PasswordCombo),"changed",G_CALLBACK(on_password_combo_changed),window->ChangePasswordButton); g_signal_connect(G_OBJECT(window->UserCancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); g_signal_connect(G_OBJECT(window->UserAdditionalGroupsButton),"clicked",G_CALLBACK(on_user_choose),window->userGroupsEntry); return window; } void on_group_clicked(GtkCellRenderer *self, char *path, ubl_settings_usergroups_group_window *window){ GtkTreeIter iter; gboolean status; gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->list),&iter,path); gtk_tree_model_get(GTK_TREE_MODEL(window->list),&iter,0,&status,-1); gtk_list_store_set(window->list,&iter,0,!status,-1); } ubl_settings_usergroups_group_window *yon_ubl_settings_usergroups_group_new(){ ubl_settings_usergroups_group_window *window = malloc(sizeof(ubl_settings_usergroups_group_window)); GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_ubl_settings_usergroups_group); window->GroupsWindow=yon_gtk_builder_get_widget(builder,"GroupsWindow"); window->GroupsTree=yon_gtk_builder_get_widget(builder,"GroupsTree"); window->GroupsCancelButton=yon_gtk_builder_get_widget(builder,"GroupsCancelButton"); window->GroupsOkButton=yon_gtk_builder_get_widget(builder,"GroupsOkButton"); window->StatusCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"StatusCell")); window->list = gtk_list_store_new(2,G_TYPE_BOOLEAN,G_TYPE_STRING); gtk_window_set_title(GTK_WINDOW(window->GroupsWindow),GROUPS_TITLE_LABEL); g_signal_connect(G_OBJECT(window->StatusCell),"toggled",G_CALLBACK(on_group_clicked),window); GtkTreeIter iter; gtk_tree_view_set_model(GTK_TREE_VIEW(window->GroupsTree),GTK_TREE_MODEL(window->list)); for (int i=0;ilist,&iter); gtk_list_store_set(window->list,&iter,0,0,1,group_name,-1); } g_signal_connect(G_OBJECT(window->GroupsCancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); return window; } void on_standard_groups_accept(GtkWidget *self, ubl_settings_usergroups_group_window *window){ GtkTreeIter iter; GtkTreeModel *model = GTK_TREE_MODEL(window->list); int valid = gtk_tree_model_get_iter_first(model,&iter); char *standard_groups=""; for (;valid;valid=gtk_tree_model_iter_next(model,&iter)){ int status; char *group; gtk_tree_model_get(model,&iter,0,&status,1,&group,-1); if (status){ char *extend_groups = yon_char_unite(standard_groups,!yon_char_is_empty(standard_groups)?",":"",group,NULL); if (!yon_char_is_empty(standard_groups)) free(standard_groups); standard_groups=extend_groups; } } yon_config_register("USERGROUPS","users",standard_groups); on_subwindow_close(self); } void on_standard_groups_open(GtkWidget *self, main_window *widgets){ ubl_settings_usergroups_group_window *window = yon_ubl_settings_usergroups_group_new(); GtkTreeIter iter, itar; int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(main_config.groups_list),&iter); for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(main_config.groups_list),&iter)){ char *groupname; gtk_tree_model_get(GTK_TREE_MODEL(main_config.groups_list),&iter,1,&groupname,-1); gtk_list_store_append(window->list,&itar); gtk_list_store_set(window->list,&itar,1,groupname,-1); free(groupname); } g_signal_connect(G_OBJECT(window->GroupsOkButton),"clicked",G_CALLBACK(on_standard_groups_accept),window); gtk_window_set_transient_for(GTK_WINDOW(window->GroupsWindow),GTK_WINDOW(widgets->Window)); char *groups = yon_config_get_by_key("USERGROUPS"); if (!yon_char_is_empty(groups)){ GtkTreeIter iter; int size; config_str standard_groups = yon_char_parse(groups,&size,","); 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 *cur_name; gtk_tree_model_get(GTK_TREE_MODEL(window->list),&iter,1,&cur_name,-1); for (int i=0;ilist,&iter,0,1,-1); } } free(cur_name); } } gtk_widget_show(window->GroupsWindow); } void on_password_show_hide(GtkEntry *self, GtkEntryIconPosition icon_pos, GdkEvent* event){ if (icon_pos == GTK_ENTRY_ICON_SECONDARY){ int visible = gtk_entry_get_visibility(self); if (!visible){ gtk_entry_set_visibility(self,1); } else { gtk_entry_set_visibility(self,0); gtk_entry_set_invisible_char(self,'*'); } } } void on_password_changed(GtkEntry *self, ubl_settings_usergroups_password_window *window){ char *self_text = (char*)gtk_entry_get_text(GTK_ENTRY(window->PasswordEntry)); char *pair_text = (char*)gtk_entry_get_text(GTK_ENTRY(window->RepeatPasswordEntry)); if ((!yon_char_is_empty(self_text)&&!yon_char_is_empty(pair_text))&&strcmp(self_text,pair_text)){ yon_ubl_status_box_spawn_infinite(GTK_CONTAINER(window->StatusBox),PASSWORD_MISMATCH_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); } else { yon_ubl_status_box_despawn_infinite(GTK_CONTAINER(window->StatusBox)); } } void on_password_accept(GtkWidget *self, dictionary *dict){ ubl_settings_usergroups_password_window *window = yon_dictionary_get_data(dict->first,ubl_settings_usergroups_password_window*); GtkEntry *entry = yon_dictionary_get_data(dict->first->next,GtkEntry*); if (gtk_widget_get_visible(window->HashBox)){ char *pasted_hash = (char*)gtk_entry_get_text(GTK_ENTRY(window->PasswordHashEntry)); if (yon_char_is_empty(pasted_hash)){ yon_ubl_status_box_spawn_infinite(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); return; } else { gtk_entry_set_text(entry,pasted_hash); } } else { char *password = yon_char_new((char*)gtk_entry_get_text(GTK_ENTRY(window->PasswordEntry))); if (yon_char_is_empty(password)){ yon_ubl_status_box_spawn_infinite(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); return; } if (strlen(password)StatusBox),PASSWORD_SHORT_LABEL(yon_char_from_int(main_config.password_min_length)),5,BACKGROUND_IMAGE_FAIL_TYPE); return; } char *password_check = (char*)gtk_entry_get_text(GTK_ENTRY(window->RepeatPasswordEntry)); if (!strcmp(password,password_check)){ char *passwd_hash = g_malloc0(101); FILE *fl = popen(password_hash_get_command(password),"r"); fgets(passwd_hash,100,fl); if (passwd_hash[strlen(passwd_hash)-1]=='\n') passwd_hash[strlen(passwd_hash)-1]='\0'; gtk_entry_set_text(entry,passwd_hash); } else { yon_ubl_status_box_spawn_infinite(GTK_CONTAINER(window->StatusBox),PASSWORD_MISMATCH_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); return; } } on_subwindow_close(self); } ubl_settings_usergroups_password_window *yon_ubl_settings_usergroups_password_new(){ ubl_settings_usergroups_password_window *window = malloc(sizeof(ubl_settings_usergroups_password_window)); GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_ubl_settings_usergroups_password); window->CreateGroupWindow=yon_gtk_builder_get_widget(builder,"CreateGroupWindow"); window->StatusBox=yon_gtk_builder_get_widget(builder,"StatusBox"); 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->UserCancelButton=yon_gtk_builder_get_widget(builder,"UserCancelButton"); window->UserOkButton=yon_gtk_builder_get_widget(builder,"UserOkButton"); g_signal_connect(G_OBJECT(window->UserCancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); g_signal_connect(G_OBJECT(window->PasswordEntry),"icon-press",G_CALLBACK(on_password_show_hide),NULL); g_signal_connect(G_OBJECT(window->RepeatPasswordEntry),"icon-press",G_CALLBACK(on_password_show_hide),NULL); g_signal_connect(G_OBJECT(window->PasswordHashEntry),"icon-press",G_CALLBACK(on_password_show_hide),NULL); g_signal_connect(G_OBJECT(window->PasswordEntry),"changed",G_CALLBACK(on_password_changed),window); g_signal_connect(G_OBJECT(window->RepeatPasswordEntry),"changed",G_CALLBACK(on_password_changed),window); gtk_window_set_title(GTK_WINDOW(window->CreateGroupWindow),GROUPS_TITLE_LABEL); return window; } void yon_system_load(ubl_settings_usergroups_system_window *window){ gtk_list_store_clear(window->liststore1); gtk_list_store_clear(window->liststore2); GtkTreeIter iter; for (int i=0;i=main_config.MINGID&&atoi(parsed[2])<=main_config.MAXGID){ gtk_list_store_append(window->liststore2,&iter); gtk_list_store_set(window->liststore2,&iter,0,atol(parsed[2]),1,parsed[0],2,parsed[3],-1); } } for (int i=0;i=main_config.MINUID&&atoi(parsed[2])<=main_config.MAXUID)||window->show_all==1){ char *groups_string=""; char *main_group_name=""; for (int j=0;jliststore1,&iter); gtk_list_store_set(window->liststore1,&iter,1,atol(parsed[2]),2,parsed[0],3,parsed[0],4,main_group_name,5,groups_string,6,parsed[5],-1); } yon_char_parsed_free(parsed,parsed_size); } int shadow_size; config_str shadow = yon_file_open(shadow_path,&shadow_size); for (int i=0;iliststore1,&iter,3,parsed[0])){ GDateTime *date = g_date_time_new_from_unix_local(atol(parsed[2])); char *date_string; date_string = g_date_time_format(date,"%c"); gtk_list_store_set(window->liststore1,&iter,8,parsed_size>2?date_string:"",9,parsed_size>7?parsed[7]:"",10,parsed_size>3?parsed[3]:"",11,parsed_size>4?parsed[4]:"",12,parsed_size>5?parsed[5]:"",13,parsed_size>2?parsed[6]:"",-1); } } } void on_mode_changed(GtkWidget *self, ubl_settings_usergroups_system_window *window){ if (window->show_all==0){ window->show_all=1; } else { window->show_all=0; } yon_system_load(window); } void on_system_update(GtkWidget *self, ubl_settings_usergroups_system_window *window){ main_config.groups = yon_file_open(groups_path,&main_config.groups_size); main_config.users = yon_file_open(users_path,&main_config.users_size); int login_size; config_str login_defs = yon_file_open(uid_path,&login_size); for (int i=0;iliststore1=GTK_LIST_STORE(gtk_builder_get_object(builder,"liststore1")); window->liststore2=GTK_LIST_STORE(gtk_builder_get_object(builder,"liststore2")); window->MonitorWindow=yon_gtk_builder_get_widget(builder,"MonitorWindow"); window->ToggleAllButton=yon_gtk_builder_get_widget(builder,"ToggleAllButton"); window->UpdateButton=yon_gtk_builder_get_widget(builder,"UpdateButton"); window->show_all=0; gtk_window_set_title(GTK_WINDOW(window->MonitorWindow),INSPECTOR_TITLE_LABEL); g_signal_connect(G_OBJECT(window->ToggleAllButton),"clicked",G_CALLBACK(on_mode_changed),window); g_signal_connect(G_OBJECT(window->UpdateButton),"clicked",G_CALLBACK(on_system_update),window); yon_system_load(window); return window; } void on_settings_usergroups_system_open(GtkWidget *self, main_window *widgets){ ubl_settings_usergroups_system_window *window = yon_ubl_settings_usergroups_system_new(); gtk_window_set_transient_for(GTK_WINDOW(window->MonitorWindow),GTK_WINDOW(widgets->Window)); gtk_widget_show(window->MonitorWindow); } void on_user_shell_changed(GtkWidget *self, ubl_settings_usergroups_user_window *window){ if (!strcmp(gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->userShellCombo)),SET_LABEL)){ if(gtk_combo_box_get_active(GTK_COMBO_BOX(window->userShellCombo))>1){ gtk_widget_set_sensitive(window->userShellEntry,1); } else { gtk_widget_set_sensitive(window->userShellEntry,0); } } else { gtk_widget_set_sensitive(window->userShellEntry,0); } } void on_user_save(GtkWidget *self, dictionary *dict){ main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); ubl_settings_usergroups_user_window *window = yon_dictionary_get_data(dict->first->next,ubl_settings_usergroups_user_window*); char *final_user=""; char *uid_string = NULL; char *password = NULL; char *login = NULL; char *username = NULL; char *main_group = NULL; char *additional_groups = NULL; char *password_changed_date = NULL; char *password_expiration_date = NULL; char *password_change_interval_minimum = NULL; char *password_change_interval_maximum = NULL; char *warning_days = NULL; char *no_activity_days = NULL; char *force_at_next_login = NULL; char *user_shell = NULL; char *user_home = NULL; char *create_system_user = NULL; char *create_ununique = NULL; char *do_not_check = NULL; char *samba_sync = NULL; char *deactivate = NULL; char *extra_options = NULL; char *useradd_boot = ""; char *useradd_shutdown = ""; char *usershadow_boot = ""; char *usershadow_shutdown = ""; int uid_auto_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userUIDAutoCheck)); if (uid_auto_active){ uid_string="x"; } else { uid_string = (char*)gtk_entry_get_text(GTK_ENTRY(window->userUIDEntry)); if (yon_char_is_empty(uid_string)){ yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); yon_ubl_status_highlight_incorrect(window->userUIDEntry); return; } } login = (char*)gtk_entry_get_text(GTK_ENTRY(window->userLoginEntry)); if (yon_char_is_empty(login)){ yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); yon_ubl_status_highlight_incorrect(window->userLoginEntry); return; } int password_active = gtk_combo_box_get_active(GTK_COMBO_BOX(window->userPasswordCombo)); if (password_active > 1){ password = (char*)gtk_entry_get_text(GTK_ENTRY(window->userPasswordEntry)); 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->userPasswordEntry); return; } } else { password="x"; } username = (char*)gtk_entry_get_text(GTK_ENTRY(window->userUserNameEntry)); if (yon_char_is_empty(username)){ yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); yon_ubl_status_highlight_incorrect(window->userUserNameEntry); return; } int main_group_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userGroupsCheck)); if (!main_group_active){ main_group = (char*)gtk_entry_get_text(GTK_ENTRY(window->userGroupsEntry)); if (yon_char_is_empty(main_group)){ yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); yon_ubl_status_highlight_incorrect(window->userGroupsEntry); return; } } else { main_group = "x"; } additional_groups = (char*)gtk_entry_get_text(GTK_ENTRY(window->userAdditionalGroupsEntry)); long password_change_interval_minimum_active = gtk_spin_button_get_value(GTK_SPIN_BUTTON(window->userPasswordChangeDelayMinimumSpin)); if (password_change_interval_minimum_active>0){ password_change_interval_minimum = yon_char_from_long(password_change_interval_minimum_active); } else password_change_interval_minimum = 0; long password_change_interval_maximum_active = gtk_spin_button_get_value(GTK_SPIN_BUTTON(window->userPasswordChangeDelayMaximumSpin)); if (password_change_interval_minimum_active>0){ password_change_interval_maximum = yon_char_from_long(password_change_interval_maximum_active); } else password_change_interval_maximum = 0; long password_interval_maximum = gtk_spin_button_get_value(GTK_SPIN_BUTTON(window->userPasswordChangeDelayMaximumSpin)); password_expiration_date = (char*)gtk_entry_get_text(GTK_ENTRY(window->userPasswordExpirationEntry)); if (!yon_char_is_empty(password_expiration_date)){ password_expiration_date = yon_char_from_long(window->expiration_unix); } warning_days = yon_char_from_long(gtk_spin_button_get_value(GTK_SPIN_BUTTON(window->userWarningSpin))); int no_activity_days_active = gtk_spin_button_get_value(GTK_SPIN_BUTTON(window->userActivitySpin)); if (no_activity_days_active>0){ no_activity_days = yon_char_from_long(no_activity_days_active); } int force_at_next_login_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userForceChangeCheck)); if (force_at_next_login_active){ } int user_shell_active = gtk_combo_box_get_active(GTK_COMBO_BOX(window->userShellCombo)); if (user_shell_active>0){ user_shell = yon_char_unite(" --shell ",(char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->userShellCombo)),NULL); if (!strcmp(user_shell,SET_LABEL)){ user_shell = yon_char_unite(" --shell ",(char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->userShellCombo)),NULL); } } else user_shell=""; int user_home_active = gtk_combo_box_get_active(GTK_COMBO_BOX(window->userHomeCombo)); if (user_home_active==2){ user_home=yon_char_unite(" --home-dir ",(char*)gtk_entry_get_text(GTK_ENTRY(window->userHomeEntry)),NULL); } else user_home = ""; int system_user_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userCreateSystemCheck)); if (system_user_active) create_system_user = " --system"; int create_ununique_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userCreateUnuniqueCheck)); if (create_ununique_active) create_ununique = " --non-unique"; int do_not_check_actve = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userDontCheckCheck)); if (do_not_check_actve) do_not_check = " --badnames"; int samba_sync_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userSyncSAMBACheck)); if (samba_sync_active); int deactivate_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userDeactivatedCheck)); if (deactivate_active); extra_options=(char*)gtk_entry_get_text(GTK_ENTRY(window->userExtraOptionsEntry)); if (window->old_password&&strcmp(window->old_password,password)){ time_t t = time(NULL); struct tm tm = *localtime(&t); password_changed_date = yon_char_unite(yon_char_from_int(tm.tm_mday),".",yon_char_from_int(tm.tm_mon+1),".",yon_char_from_int(1900+tm.tm_year),NULL); } int useradd_boot_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->UseraddBootCheck)); if (useradd_boot_active){ useradd_boot = "boot"; } int useradd_shutdown_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->UseraddShutdownCheck)); if (useradd_shutdown_active){ useradd_shutdown = "shutdown"; } int usershadow_boot_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->UsershadowBootCheck)); if (usershadow_boot_active){ usershadow_boot = "boot"; } int usershadow_shutdown_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->UsershadowShutdownCheck)); if (usershadow_shutdown_active){ usershadow_shutdown = "shutdown"; } char *useradd_sync_string = NULL; useradd_sync_string = yon_char_unite(useradd_boot,!yon_char_is_empty(useradd_boot)?",":"",useradd_shutdown,NULL); char *usershadow_sync_string = NULL; usershadow_sync_string = yon_char_unite(usershadow_boot,!yon_char_is_empty(usershadow_boot)?",":"",usershadow_shutdown,NULL); char *shadow_string = NULL; shadow_string = yon_char_unite(yon_char_return_if_exist(password_changed_date,""), ":",yon_char_return_if_exist(password_change_interval_minimum,""), ":",yon_char_return_if_exist(password_change_interval_maximum,""), ":",yon_char_return_if_exist(warning_days,""), ":",yon_char_return_if_exist(no_activity_days,""), ":",yon_char_return_if_exist(password_expiration_date,""), NULL); final_user = yon_char_unite(yon_char_return_if_exist(username,"x"), ":",yon_char_return_if_exist(uid_string,"x"), ":",yon_char_return_if_exist(main_group,"x"), ":",yon_char_return_if_exist(additional_groups,"x"), ":",yon_char_return_if_exist(user_home,""), yon_char_return_if_exist(user_shell,""), yon_char_return_if_exist(create_system_user,""), yon_char_return_if_exist(create_ununique,""), yon_char_return_if_exist(do_not_check,""), ":",yon_char_return_if_exist(password,"x"), ":",yon_char_return_if_exist(extra_options,""), NULL); yon_config_register(USERADD(login),"users",final_user); yon_config_register(USERSHADOW(login),"users",shadow_string); if (!yon_char_is_empty(useradd_sync_string)) yon_config_register(USERADD_SYNC(login),"users",useradd_sync_string); if (!yon_char_is_empty(usershadow_sync_string)) yon_config_register(USERSHADOW_SYNC(login),"users",usershadow_sync_string); GtkTreeIter iter; GtkTreeModel *model = GTK_TREE_MODEL(widgets->UsersList); if (!gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->UsersTree)),&model,&iter)) gtk_list_store_append(widgets->UsersList,&iter); gtk_list_store_set(widgets->UsersList,&iter,1,yon_char_return_if_exist(uid_string,""),2,yon_char_return_if_exist(login,""),3,yon_char_return_if_exist(username,""),4,yon_char_return_if_exist(main_group,""),5,yon_char_return_if_exist(additional_groups,""),6,yon_char_unite(yon_char_return_if_exist(user_home,""),yon_char_return_if_exist(user_shell,""),yon_char_return_if_exist(create_system_user,""),yon_char_return_if_exist(create_ununique,""),yon_char_return_if_exist(do_not_check,""),NULL),7,yon_char_return_if_exist(gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->userPasswordCombo)),""),-1); on_subwindow_close(self); } void on_date_selected(GtkWidget *self, ubl_settings_usergroups_user_window *window){ int year=0, month=0, day=0; gtk_calendar_get_date(GTK_CALENDAR(window->ExpirationCalendar),&year,&month,&day); GDateTime *date = g_date_time_new_local(year,month,day,23,59,59); gtk_entry_set_text(GTK_ENTRY(window->userPasswordExpirationEntry), g_date_time_format(date,"%c")); window->expiration_unix=g_date_time_to_unix(date); } ubl_settings_usergroups_user_window *yon_ubl_settings_usergroups_user_new(){ ubl_settings_usergroups_user_window *window = malloc(sizeof(ubl_settings_usergroups_user_window)); GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_ubl_settings_usergroups_user); window->CreateUserWindow=yon_gtk_builder_get_widget(builder,"CreateUserWindow"); window->StatusBox=yon_gtk_builder_get_widget(builder,"StatusBox"); window->userUIDAutoCheck=yon_gtk_builder_get_widget(builder,"userUIDAutoCheck"); window->userUIDEntry=yon_gtk_builder_get_widget(builder,"userUIDEntry"); window->userLoginEntry=yon_gtk_builder_get_widget(builder,"userLoginEntry"); window->userPasswordCombo=yon_gtk_builder_get_widget(builder,"userPasswordCombo"); window->userPasswordEntry=yon_gtk_builder_get_widget(builder,"userPasswordEntry"); window->userPasswordButton=yon_gtk_builder_get_widget(builder,"userPasswordButton"); window->userUserNameEntry=yon_gtk_builder_get_widget(builder,"userUserNameEntry"); window->userGroupsCheck=yon_gtk_builder_get_widget(builder,"userGroupsCheck"); window->userGroupsEntry=yon_gtk_builder_get_widget(builder,"userGroupsEntry"); window->UserGroupsButton=yon_gtk_builder_get_widget(builder,"UserGroupsButton"); window->userAdditionalGroupsEntry=yon_gtk_builder_get_widget(builder,"userAdditionalGroupsEntry"); window->userAdditionalGroupsButton=yon_gtk_builder_get_widget(builder,"userAdditionalGroupsButton"); window->userPasswordChangedEntry=yon_gtk_builder_get_widget(builder,"userPasswordChangedEntry"); window->userPasswordExpirationEntry=yon_gtk_builder_get_widget(builder,"userPasswordExpirationEntry"); window->userPasswordExpirationButton=yon_gtk_builder_get_widget(builder,"userPasswordExpirationButton"); window->userPasswordChangeDelayMinimumSpin=yon_gtk_builder_get_widget(builder,"userPasswordChangeDelayMinimumSpin"); window->userPasswordChangeDelayMaximumSpin=yon_gtk_builder_get_widget(builder,"userPasswordChangeDelayMaximumSpin"); window->userWarningSpin=yon_gtk_builder_get_widget(builder,"userWarningSpin"); window->userActivitySpin=yon_gtk_builder_get_widget(builder,"userActivitySpin"); window->userForceChangeCheck=yon_gtk_builder_get_widget(builder,"userForceChangeCheck"); window->userShellCombo=yon_gtk_builder_get_widget(builder,"userShellCombo"); window->userShellEntry=yon_gtk_builder_get_widget(builder,"userShellEntry"); window->userHomeCombo=yon_gtk_builder_get_widget(builder,"userHomeCombo"); window->userHomeEntry=yon_gtk_builder_get_widget(builder,"userHomeEntry"); window->userHomeButton=yon_gtk_builder_get_widget(builder,"userHomeButton"); window->userCreateSystemCheck=yon_gtk_builder_get_widget(builder,"userCreateSystemCheck"); window->userCreateUnuniqueCheck=yon_gtk_builder_get_widget(builder,"userCreateUnuniqueCheck"); window->userDontCheckCheck=yon_gtk_builder_get_widget(builder,"userDontCheckCheck"); window->userSyncSAMBACheck=yon_gtk_builder_get_widget(builder,"userSyncSAMBACheck"); window->userDeactivatedCheck=yon_gtk_builder_get_widget(builder,"userDeactivatedCheck"); window->userExtraOptionsEntry=yon_gtk_builder_get_widget(builder,"userExtraOptionsEntry"); window->UserCancelButton=yon_gtk_builder_get_widget(builder,"UserCancelButton"); window->UserOkButton=yon_gtk_builder_get_widget(builder,"UserOkButton"); window->CalendarPopup=yon_gtk_builder_get_widget(builder,"CalendarPopover"); window->UseraddBootCheck=yon_gtk_builder_get_widget(builder,"UseraddBootCheck"); window->ExpirationCalendar=yon_gtk_builder_get_widget(builder,"ExpirationCalendar"); window->UseraddShutdownCheck=yon_gtk_builder_get_widget(builder,"UseraddShutdownCheck"); window->UsershadowBootCheck=yon_gtk_builder_get_widget(builder,"UsershadowBootCheck"); window->UsershadowShutdownCheck=yon_gtk_builder_get_widget(builder,"UsershadowShutdownCheck"); gtk_window_set_title(GTK_WINDOW(window->CreateUserWindow),USER_TITLE_LABEL); int shell_size=0; config_str shells = yon_file_open(shell_list_path,&shell_size); for (int i=1;iuserShellCombo),parsed[0]); yon_char_parsed_free(parsed,parsed_size); } } gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(window->userShellCombo),SET_LABEL); yon_char_parsed_free(shells,shell_size); gtk_combo_box_set_active(GTK_COMBO_BOX(window->userShellCombo),0); window->old_password=NULL; dictionary *entry_dict = NULL; yon_dictionary_add_or_create_if_exists_with_data(entry_dict,"combo",window->userPasswordCombo); yon_dictionary_add_or_create_if_exists_with_data(entry_dict,"entry",window->userPasswordEntry); g_signal_connect(G_OBJECT(window->UserCancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->userUIDEntry); g_signal_connect(G_OBJECT(window->userHomeButton),"clicked",G_CALLBACK(on_filechooser_open),window->userHomeEntry); g_signal_connect(G_OBJECT(window->UserGroupsButton),"clicked",G_CALLBACK(on_groups_clicked),window->userGroupsEntry); g_signal_connect(G_OBJECT(window->userPasswordButton),"clicked",G_CALLBACK(on_password_change),entry_dict); g_signal_connect(G_OBJECT(window->userAdditionalGroupsButton),"clicked",G_CALLBACK(on_groups_multiple_clicked),window->userAdditionalGroupsEntry); g_signal_connect(G_OBJECT(window->userPasswordExpirationButton),"clicked",G_CALLBACK(on_expiration_clicked),window); g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->userUIDEntry); g_signal_connect(G_OBJECT(window->userHomeCombo),"changed",G_CALLBACK(on_password_combo_changed),window->userHomeEntry); g_signal_connect(G_OBJECT(window->userHomeCombo),"changed",G_CALLBACK(on_password_combo_changed),window->userHomeButton); g_signal_connect(G_OBJECT(window->userPasswordCombo),"changed",G_CALLBACK(on_password_combo_changed),window->userPasswordButton); g_signal_connect(G_OBJECT(window->userGroupsCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->userGroupsEntry); g_signal_connect(G_OBJECT(window->userGroupsCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->UserGroupsButton); g_signal_connect(G_OBJECT(window->userShellCombo),"changed",G_CALLBACK(on_user_shell_changed),window); g_signal_connect(G_OBJECT(window->ExpirationCalendar),"day-selected",G_CALLBACK(on_date_selected),window); return window; } void on_main_add(GtkWidget *self, main_window *widgets){ GtkTreeModel *model; GtkWidget *cur_tree; GtkTreeIter iter; if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ model = GTK_TREE_MODEL(widgets->UsersList); gtk_tree_selection_unselect_all(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->UsersTree))); ubl_settings_usergroups_user_window *window = yon_ubl_settings_usergroups_user_new(); dictionary *dict = NULL; yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); g_signal_connect(G_OBJECT(window->UserOkButton),"clicked",G_CALLBACK(on_user_save),dict); gtk_window_set_transient_for(GTK_WINDOW(window->CreateUserWindow),GTK_WINDOW(widgets->Window)); gtk_widget_show(window->CreateUserWindow); } else { model = GTK_TREE_MODEL(widgets->GroupsList); gtk_tree_selection_unselect_all(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->GroupsTree))); ubl_settings_usergroups_group_creation_window *window = yon_ubl_settings_usergroups_group_creation_new(); dictionary *dict = NULL; yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); g_signal_connect(G_OBJECT(window->UserOkButton),"clicked",G_CALLBACK(on_group_save),dict); gtk_window_set_transient_for(GTK_WINDOW(window->CreateGroupWindow),GTK_WINDOW(widgets->Window)); gtk_widget_show(window->CreateGroupWindow); } } void on_main_edit(GtkWidget *self, main_window *widgets){ GtkTreeModel *model; GtkWidget *cur_tree; GtkTreeIter iter; if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ model = GTK_TREE_MODEL(widgets->UsersList); if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->UsersTree)),&model,&iter)){ ubl_settings_usergroups_user_window *window = yon_ubl_settings_usergroups_user_new(); dictionary *dict = NULL; yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); g_signal_connect(G_OBJECT(window->UserOkButton),"clicked",G_CALLBACK(on_user_save),dict); char *name; gtk_tree_model_get(GTK_TREE_MODEL(widgets->UsersList),&iter,2,&name,-1); char *parameter_string = yon_config_get_by_key(USERADD(name)); int parsed_size=0; if (parameter_string[0]=='\"') yon_char_divide(parameter_string,0); if (parameter_string[strlen(parameter_string)-1]=='\"') parameter_string[strlen(parameter_string)-1]='\0'; config_str parameters = yon_char_parse(parameter_string,&parsed_size,":"); gtk_entry_set_text(GTK_ENTRY(window->userLoginEntry), name); gtk_entry_set_text(GTK_ENTRY(window->userUserNameEntry), parsed_size>0?parameters[0]:""); if (parsed_size>1){ if (!strcmp(parameters[1],"x")) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->userUIDAutoCheck),1); else gtk_entry_set_text(GTK_ENTRY(window->userUIDEntry), parsed_size>1?parameters[1]:""); } if (parsed_size>2){ if (!strcmp(parameters[2],"x")) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->userGroupsCheck),1); else gtk_entry_set_text(GTK_ENTRY(window->userGroupsEntry), parsed_size>2?parameters[2]:""); } gtk_entry_set_text(GTK_ENTRY(window->userAdditionalGroupsEntry), parsed_size>3?parameters[3]:""); if (parsed_size>4&&!yon_char_is_empty(parameters[4])){ int params_size; config_str parameters_substring = yon_char_parse(parameters[4],¶ms_size," "); for (int i=0;iuserHomeEntry),parameters_substring[i+1]); gtk_combo_box_set_active(GTK_COMBO_BOX(window->userHomeCombo),2); i++; } else if (!strcmp(parameters_substring[i],"--shell")||!strcmp(parameters_substring[i],"-s")){ int active = yon_gtk_combo_box_text_find(window->userShellCombo,parameters_substring[i+1]); if (!active){ gtk_entry_set_text(GTK_ENTRY(window->userShellEntry),parameters_substring[i+1]); gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->userShellCombo),"Set"); } i++; }else if (!strcmp(parameters_substring[i],"--system")||!strcmp(parameters_substring[i],"-r")){ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->userCreateSystemCheck),1); }else if (!strcmp(parameters_substring[i],"--no-create-home")||!strcmp(parameters_substring[i],"-M")){ gtk_combo_box_set_active(GTK_COMBO_BOX(window->userHomeCombo),2); }else if (!strcmp(parameters_substring[i],"--no-user-group")||!strcmp(parameters_substring[i],"-N")){ // gtk gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->userGroupsCheck),0); gtk_entry_set_text(GTK_ENTRY(window->userGroupsEntry),""); }else if (!strcmp(parameters_substring[i],"--non-unique")||!strcmp(parameters_substring[i],"-o")){ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->userCreateUnuniqueCheck),1); }else if (!strcmp(parameters_substring[i],"--badnames")){ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->userDontCheckCheck),1); } } // gtk_entry_set_text(GTK_ENTRY(window->), parsed_size>4?parameters[4]:""); } window->old_password=parameters[5]; gtk_entry_set_text(GTK_ENTRY(window->userPasswordEntry), parsed_size>5?parameters[5]:""); free(parameters); parameters=yon_char_parse(yon_config_get_by_key(USERSHADOW(name)),&parsed_size,":"); gtk_entry_set_text(GTK_ENTRY(window->userPasswordChangedEntry),parsed_size>0?parameters[0]:""); gtk_spin_button_set_value(GTK_SPIN_BUTTON(window->userPasswordChangeDelayMinimumSpin),atol(parsed_size>1?parameters[1]:"0")); gtk_spin_button_set_value(GTK_SPIN_BUTTON(window->userPasswordChangeDelayMaximumSpin),atol(parsed_size>2?parameters[2]:"0")); gtk_spin_button_set_value(GTK_SPIN_BUTTON(window->userWarningSpin),atol(parsed_size>3?parameters[3]:"0")); gtk_spin_button_set_value(GTK_SPIN_BUTTON(window->userActivitySpin),atol(parsed_size>4?parameters[4]:"0")); if (parsed_size>5&&!yon_char_is_empty(parameters[5])){ GDateTime *date = g_date_time_new_from_unix_local(atol(parameters[5])); gtk_entry_set_text(GTK_ENTRY(window->userPasswordExpirationEntry),g_date_time_format(date,"%c")); } gtk_window_set_transient_for(GTK_WINDOW(window->CreateUserWindow),GTK_WINDOW(widgets->Window)); gtk_widget_show(window->CreateUserWindow); char *useradd_sync = NULL; useradd_sync = yon_config_get_by_key(USERADD_SYNC(name)); if (useradd_sync){ if (strstr(useradd_sync,"boot")){ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->UseraddBootCheck),1); } if (strstr(useradd_sync,"shutdown")){ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->UseraddShutdownCheck),1); } free(useradd_sync); } char *usershadow_sync =yon_config_get_by_key(USERSHADOW_SYNC(name)); if (usershadow_sync){ if (strstr(usershadow_sync,"boot")){ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->UsershadowBootCheck),1); } if (strstr(usershadow_sync,"shutdown")){ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->UsershadowShutdownCheck),1); } free(usershadow_sync); } } } else { model = GTK_TREE_MODEL(widgets->GroupsList); if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->GroupsTree)),&model,&iter)){ ubl_settings_usergroups_group_creation_window *window = yon_ubl_settings_usergroups_group_creation_new(); dictionary *dict = NULL; yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); g_signal_connect(G_OBJECT(window->UserOkButton),"clicked",G_CALLBACK(on_group_save),dict); char *name; gtk_tree_model_get(model,&iter,1,&name,-1); char *config_string = yon_config_get_by_key(GROUPADD(name)); if (!yon_char_is_empty(config_string)){ if (config_string[0]=='\"') yon_char_divide(config_string,0); if (config_string[strlen(config_string)-1]=='\"') config_string[strlen(config_string)-1]='\0'; int size; config_str parsed = yon_char_parse(config_string,&size,":"); gtk_entry_set_text(GTK_ENTRY(window->userLoginEntry),name); gtk_entry_set_text(GTK_ENTRY(window->userGroupsEntry),size>1?parsed[0]:""); if (size>1){ if (!strcmp(parsed[1],"")||!strcmp(parsed[1],"x")) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->userUIDAutoCheck),1); else gtk_entry_set_text(GTK_ENTRY(window->userUIDEntry),parsed[1]); } if (size>2&&!yon_char_is_empty(parsed[2])){ int parsed_size=0; config_str substring = yon_char_parse(parsed[2],&parsed_size," "); for (int i=0;iUnuniqueGIDCheck),1); } else if (!strcmp(substring[i],"--system")||!strcmp(substring[i],"-r")){ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->SystemGroupCheck),1); } } } free(substring); } if (size>3){ if (strcmp(parsed[3],"")&&strcmp(parsed[3],"x")){ gtk_entry_set_text(GTK_ENTRY(window->PasswordEntry),parsed[3]); gtk_combo_box_set_active(GTK_COMBO_BOX(window->PasswordCombo),3); } else { gtk_combo_box_set_active(GTK_COMBO_BOX(window->PasswordCombo),1); } } } else { yon_ubl_status_box_render(LOADING_FAILED_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); } gtk_window_set_transient_for(GTK_WINDOW(window->CreateGroupWindow),GTK_WINDOW(widgets->Window)); gtk_widget_show(window->CreateGroupWindow); } } } void on_main_delete(GtkWidget *self, main_window *widgets){ GtkTreeModel *model; GtkWidget *cur_tree; GtkTreeIter iter; if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ model = GTK_TREE_MODEL(widgets->UsersList); cur_tree=widgets->UsersTree; if(gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(cur_tree)),&model,&iter)){ char *name; gtk_tree_model_get(model,&iter,2,&name,-1); yon_config_remove_by_key(USERADD(name)); gtk_list_store_remove(GTK_LIST_STORE(model),&iter); } } else { model = GTK_TREE_MODEL(widgets->GroupsList); cur_tree=widgets->GroupsTree; if(gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(cur_tree)),&model,&iter)){ char *name; gtk_tree_model_get(model,&iter,1,&name,-1); yon_config_remove_by_key(GROUPADD(name)); gtk_list_store_remove(GTK_LIST_STORE(model),&iter); } } } void on_config_update(GtkWidget *self, main_window *widgets){ yon_config_load_register(main_config.load_mode==1?YON_CONFIG_LOCAL:YON_CONFIG_GLOBAL,"users","DEFAULTPASSWD DEFAULTROOTPASSWD DEFAULTUSER HASHPASSWD USERGROUPS ADDADM USERADD[*] USERSHADOW[*] GROUPADD[*]",NULL); GtkTreeIter iter; int size; config_str users = yon_config_get_all_by_key("USERADD",&size); if (users&&users[0]){ for (int i=0;iUsersList),&iter); for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->UsersList),&iter)){ char *name; gtk_tree_model_get(GTK_TREE_MODEL(widgets->UsersList),&iter,2,&name,-1); if (!strcmp(name,login)){ int parsed_size; config_str parsed = yon_char_parse(value,&parsed_size,":"); gtk_list_store_set(widgets->UsersList,&iter, 1,parsed_size>1?parsed[1]:"", 3,parsed_size>0?parsed[0]:"", 4,parsed_size>2?parsed[2]:"", 5,parsed_size>3?parsed[3]:"", 6,parsed_size>4?parsed[4]:"", 7,parsed_size>5?!strcmp(parsed[5],"x")||!strcmp(parsed[5],"")?DEFAULT_USER_LABEL:SET_PASSWORD_LABEL:NO_PASSWORD_LABEL, -1); } } } } } /**config_init() * [EN] * * [RU] * Функция инициализации всех параметров конфигурации */ void config_init(){ main_config.always_open_documentation=0; main_config.socket_id=-1; main_config.save_socket_id=-1; main_config.load_socket_id=-1; main_config.lock_help=0; main_config.lock_load_global=0; main_config.lock_save_global=0; main_config.lock_save_local=0; main_config.groups_size=0; main_config.load_mode=1; main_config.groups = yon_file_open(groups_path,&main_config.groups_size); main_config.users = yon_file_open(users_path,&main_config.users_size); main_config.users_list=NULL; main_config.groups_list=NULL; main_config.password_min_length=6; int login_size; config_str login_defs = yon_file_open(uid_path,&login_size); for (int i=0;iInterfaceBox),yon_gtk_builder_get_widget(builder,"PlugBox"),1,1,0); // Custom widgets configuration widgets->CacheAlgList=GTK_LIST_STORE(gtk_builder_get_object(builder,"CacheAlgList")); widgets->GroupsList=GTK_LIST_STORE(gtk_builder_get_object(builder,"GroupsList")); widgets->UsersList=GTK_LIST_STORE(gtk_builder_get_object(builder,"UsersList")); widgets->PlugBox=yon_gtk_builder_get_widget(builder,"PlugBox"); widgets->button1=yon_gtk_builder_get_widget(builder,"button1"); widgets->button2=yon_gtk_builder_get_widget(builder,"button2"); widgets->button3=yon_gtk_builder_get_widget(builder,"button3"); widgets->AddButton=yon_gtk_builder_get_widget(builder,"AddButton"); widgets->EditButton=yon_gtk_builder_get_widget(builder,"EditButton"); widgets->DeleteButton=yon_gtk_builder_get_widget(builder,"DeleteButton"); widgets->UpdateButton=yon_gtk_builder_get_widget(builder,"UpdateButton"); widgets->UsersTree=yon_gtk_builder_get_widget(builder,"UsersTree"); widgets->GroupsTree=yon_gtk_builder_get_widget(builder,"GroupsTree"); widgets->MainNotebook=yon_gtk_builder_get_widget(builder,"MainNotebook"); if (main_config.lock_load_global == 1){ gtk_widget_set_sensitive(widgets->LoadGlobalMenuItem,0); } if (main_config.lock_save_global == 1){ gtk_widget_set_sensitive(widgets->SaveGlobalMenuItem,0); gtk_widget_set_sensitive(widgets->SaveMenuItem,0); } if (main_config.lock_save_local == 1){ gtk_widget_set_sensitive(widgets->SaveLocalMenuItem,0); gtk_widget_set_sensitive(widgets->SaveMenuItem,0); } main_config.users_list = widgets->UsersList; main_config.groups_list = widgets->GroupsList; /* Signal connection | Присоединение сигналов */ g_signal_connect(G_OBJECT(widgets->AddButton),"clicked",G_CALLBACK(on_main_add),widgets); g_signal_connect(G_OBJECT(widgets->EditButton),"clicked",G_CALLBACK(on_main_edit),widgets); g_signal_connect(G_OBJECT(widgets->DeleteButton),"clicked",G_CALLBACK(on_main_delete),widgets); g_signal_connect(G_OBJECT(widgets->button3),"clicked",G_CALLBACK(on_standard_groups_open),widgets); g_signal_connect(G_OBJECT(widgets->button2),"clicked",G_CALLBACK(on_ubl_settings_usergroups_additional_settings_open),widgets); g_signal_connect(G_OBJECT(widgets->button1),"clicked",G_CALLBACK(on_settings_usergroups_system_open),widgets); g_signal_connect(G_OBJECT(widgets->UpdateButton),"clicked",G_CALLBACK(on_config_update),widgets); g_signal_connect(G_OBJECT(widgets->SaveMenuItem),"activate",G_CALLBACK(on_config_save),widgets); g_signal_connect(G_OBJECT(widgets->SaveGlobalMenuItem),"activate",G_CALLBACK(on_config_global_save),widgets); g_signal_connect(G_OBJECT(widgets->SaveLocalMenuItem),"activate",G_CALLBACK(on_config_local_save),widgets); g_signal_connect(G_OBJECT(widgets->LoadGlobalMenuItem),"activate",G_CALLBACK(on_config_global_load),widgets); g_signal_connect(G_OBJECT(widgets->LoadLocalMenuItem),"activate",G_CALLBACK(on_config_local_load),widgets); yon_load_proceed(YON_CONFIG_LOCAL); yon_interface_update((main_window*)widgets); yon_gtk_tree_view_minimal_fixed_size_set_full(GTK_TREE_VIEW(widgets->UsersTree)); yon_gtk_tree_view_minimal_fixed_size_set_full(GTK_TREE_VIEW(widgets->GroupsTree)); return widgets; } int main(int argc, char *argv[]){ local=setlocale(LC_ALL, ""); textdomain (LocaleName); config_init(); int option_index=0; int show_help=0; int debug_mode=0; { struct option long_options[] = { {"help", 0, 0, 'h'}, {"version", 0, 0, 'V'}, {"lock-help", 0,0, 1}, {"lock-save", 0,0, 2}, {"lock-save-local", 0,0, 3}, {"lock-save-global", 0,0, 4}, {"lock-load-global", 0,0, 5}, {"socket-id", 1, 0, 's'}, {"socket-ext-id", 1,0, 'e'}, {"socket-trd-id", 1,0, 't'}, {"clear-config", 0,0, 'c'}, { NULL, 0, NULL, 0 } }; for (int i=0;i