diff --git a/gresource.xml b/gresource.xml index c29a06f..f5e3ee7 100644 --- a/gresource.xml +++ b/gresource.xml @@ -10,10 +10,14 @@ ubl-settings-usergroups-system.glade ubl-settings-usergroups-savesettings.glade ubl-settings-usergroups-confirmation.glade + ubl-settings-usergroups-system-deletion-confirmation.glade ubl-settings-usergroups.css + + sync_parameters.csv + ubl-settings-usergroups-banner.png diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index b33f93b..24cb0e2 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -38,6 +38,8 @@ set(DEPENDFILES ../ubl-settings-usergroups-group.glade ../ubl-settings-usergroups-savesettings.glade ../ubl-settings-usergroups-confirmation.glade + ../ubl-settings-usergroups-system-deletion-confirmation.glade + ../sync_parameters.csv ../gresource.xml ../ubl-settings-usergroups-banner.png ../ubl-settings-usergroups.css @@ -79,6 +81,12 @@ endif() set(SOURCE_FILES ubl-settings-usergroups.c + ubl-settings-usergroups-settings.c + ubl-settings-usergroups-user.c + ubl-settings-usergroups-system.c + ubl-settings-usergroups-additional-config.c + ubl-settings-usergroups-group.c + ubl-settings-usergroups-password.c ubl-settings-usergroups.h ubl-strings.h ) diff --git a/source/ubl-cmake.in b/source/ubl-cmake.in deleted file mode 100644 index d4623a7..0000000 --- a/source/ubl-cmake.in +++ /dev/null @@ -1 +0,0 @@ -#cmakedefine WEBKIT_FOUND diff --git a/source/ubl-settings-usergroups-additional-config.c b/source/ubl-settings-usergroups-additional-config.c new file mode 100644 index 0000000..e99741d --- /dev/null +++ b/source/ubl-settings-usergroups-additional-config.c @@ -0,0 +1,31 @@ +#include "ubl-settings-usergroups.h" + + + + void on_hash_changed(GtkWidget *, ubl_settings_usergroups_additional_settings_window *window){ + + int hash_size=0; + config_str hash_algos = yon_file_open(hash_list_path,&hash_size); + for (int i=1;iPasswordHashCombo,parsed[1]); + yon_char_parsed_free(parsed,parsed_size); + } + yon_char_parsed_free(hash_algos,hash_size); + } + +void on_additional_settings_clicked(GtkWidget *, GtkEntry *){ + 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_passwords_encrypt(){ + int pid = fork(); + if (!pid){ + exit(system(encrypt_passwords_command)); + } +} \ No newline at end of file diff --git a/source/ubl-settings-usergroups-group.c b/source/ubl-settings-usergroups-group.c new file mode 100644 index 0000000..fb4ff76 --- /dev/null +++ b/source/ubl-settings-usergroups-group.c @@ -0,0 +1,282 @@ +#include "ubl-settings-usergroups.h" + + + + +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"); + window->userTitleNameLabel=yon_gtk_builder_get_widget(builder,"userTitleNameLabel"); + window->AdminGroupsEntry=yon_gtk_builder_get_widget(builder,"AdminGroupsEntry"); + window->AdminGroupsButton=yon_gtk_builder_get_widget(builder,"AdminGroupsButton"); + window->GroupaddShutdownCheck=yon_gtk_builder_get_widget(builder,"GroupaddShutdownCheck"); + window->groupExtraOptionsEntry=yon_gtk_builder_get_widget(builder,"groupExtraOptionsEntry"); + window->MainNotebook=yon_gtk_builder_get_widget(builder,"MainNotebook"); + window->last_gid=NULL; + + gtk_window_set_title(GTK_WINDOW(window->CreateGroupWindow),GROUPS_TITLE_LABEL); + + on_GID_update(NULL,window); + 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); + yon_window_config_custom_window_setup(GTK_WINDOW(window->CreateGroupWindow),"GroupAddWindow"); + 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); + g_signal_connect(G_OBJECT(window->AdminGroupsButton),"clicked",G_CALLBACK(on_user_choose),window->AdminGroupsEntry); + g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(on_GID_update),window); + g_signal_connect(G_OBJECT(window->SystemGroupCheck),"toggled",G_CALLBACK(on_GID_update),window); + g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(yon_gtk_toggle_button_set_inactive_from_toggle_button),window->SystemGroupCheck); + g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->SystemGroupCheck); + g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(yon_gtk_toggle_button_set_inactive_from_toggle_button_inversed),window->UnuniqueGIDCheck); + g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->UnuniqueGIDCheck); + g_signal_connect(G_OBJECT(window->UnuniqueGIDCheck),"toggled",G_CALLBACK(on_system_parameter_changed),window); + g_signal_connect(G_OBJECT(window->SystemGroupCheck),"toggled",G_CALLBACK(on_system_parameter_changed),window); + g_signal_connect(G_OBJECT(window->userUIDEntry),"insert-text",G_CALLBACK(yon_on_text_insert_only_digits),NULL); +return window; +} + + + +void on_GID_update(GtkWidget *, ubl_settings_usergroups_group_creation_window *window){ + if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userUIDAutoCheck))){ + if (window->last_gid){ + gtk_entry_set_text(GTK_ENTRY(window->userUIDEntry),window->last_gid); + } else { + int config_size=0; + int final_size=0; + config_str config_groups = yon_config_get_all_by_key(GROUPADD_parameter,&config_size); + yon_char_parsed_prepend_strings(config_groups,config_size,":"); + config_str final = yon_char_parsed_merge(main_config.groups,main_config.groups_size,config_groups,config_size,&final_size); + long prev_busy=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->SystemGroupCheck))?0:main_config.MINGID; + + int minimum = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->SystemGroupCheck))?0:main_config.MINGID; + int maximum = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->SystemGroupCheck))?68000:main_config.MAXGID; + for (int i=0;i2&&minimumprev_busy){ + prev_busy=atol(parsed[2]); + } + } + yon_char_parsed_free(parsed, parsed_size); + } + gtk_entry_set_text(GTK_ENTRY(window->userUIDEntry),yon_char_from_long(prev_busy+1)); + } + } else { + gtk_entry_set_text(GTK_ENTRY(window->userUIDEntry),""); + } +} + +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 *admins = 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); + gtk_notebook_set_current_page(GTK_NOTEBOOK(window->MainNotebook),0); + yon_ubl_status_highlight_incorrect(window->userUIDEntry); + return; + } + + + if (!yon_char_is_empty(window->last_gid)&&strcmp(gid,window->last_gid)){ + int config_size=0; + int final_size=0; + config_str config_users = yon_config_get_all_by_key(GROUPADD_SEARCH_macro,&config_size); + config_str final = yon_char_parsed_merge(main_config.groups,main_config.groups_size,config_users,config_size,&final_size); + if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->UnuniqueGIDCheck))){ + int found=0; + char *uid_string = (char*)gtk_entry_get_text(GTK_ENTRY(window->userUIDEntry)); + for (int i=0;i2&&!strcmp(parsed[2],uid_string)){ + if (yon_char_is_empty(window->last_gid)||(!yon_char_is_empty(window->last_gid)&&strcmp(parsed[2],window->last_gid))){ + found = yon_char_parsed_check_exist(config_users,config_size,final[i])>-1?1:2; + break; + } + } + if (parsed_size) yon_char_parsed_free(parsed,parsed_size); + } + if (found){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),found==1?GID_ALREADY_EXIST_CONFIG_LABEL:GID_ALREADY_EXIST_SYSTEM_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + yon_ubl_status_highlight_incorrect(window->userUIDEntry); + gtk_notebook_set_current_page(GTK_NOTEBOOK(window->MainNotebook),0); + return; + } + } + } + } + + group_name = (char*)gtk_entry_get_text(GTK_ENTRY(window->userLoginEntry)); + if (group_name[0]>'0'&&group_name[0]<'9'){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),GROUP_BEGINS_WITH_DIGIT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + yon_ubl_status_highlight_incorrect(window->userLoginEntry); + return; + } + if (yon_char_is_empty(group_name)){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + gtk_notebook_set_current_page(GTK_NOTEBOOK(window->MainNotebook),0); + yon_ubl_status_highlight_incorrect(window->userLoginEntry); + return; + } + { + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(widgets->GroupsList); + for_iter(model,&iter){ + char *cur; + gtk_tree_model_get(model,&iter,1, &cur,-1); + if (!yon_char_is_empty(cur)&&!strcmp(cur,group_name)){ + if (!gtk_tree_selection_iter_is_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->GroupsTree)),&iter)){ + + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),GROUP_EXIST_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + yon_ubl_status_highlight_incorrect(window->userLoginEntry); + gtk_notebook_set_current_page(GTK_NOTEBOOK(window->MainNotebook),0); + return; + } + } + } + } + + group_users = (char*)gtk_entry_get_text(GTK_ENTRY(window->userGroupsEntry)); + + admins = (char*)gtk_entry_get_text(GTK_ENTRY(window->AdminGroupsEntry)); + 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=""; + + int shutdown_sync_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->GroupaddShutdownCheck)); + if (shutdown_sync_active){ + char *final_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",GROUPADD_SYNC(group_name)); + yon_config_register(GROUPADD_SYNC(group_name),final_command,"shutdown"); + } else { + yon_config_remove_by_key(GROUPADD_SYNC(group_name)); + } + + + int password_active = gtk_combo_box_get_active(GTK_COMBO_BOX(window->PasswordCombo)); + if (password_active == 1) { + password = "!*"; + } else if (password_active == 2){ + 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); + gtk_notebook_set_current_page(GTK_NOTEBOOK(window->MainNotebook),0); + yon_ubl_status_highlight_incorrect(window->PasswordEntry); + return; + } + } else { + password=""; + } + final_string = yon_char_unite(yon_char_return_if_exist(group_users,""), + ":",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(admins,""), + ":",yon_char_return_if_exist(password,""), + NULL); + char *final_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",GROUPADD_SYNC(group_name)); + yon_config_register(GROUPADD(group_name),final_command,final_string); + yon_interface_update(widgets); + on_subwindow_close(self); +} + + +void yon_group_delete_confirmation_open(main_window *widgets){ + yon_confirmation_window *window = yon_delete_confirmation_new(); + gtk_window_set_transient_for(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window)); + GtkTreeIter iter,itar; + dictionary *dict = NULL; + gtk_label_set_text(GTK_LABEL(window->TitleLabel),DELETE_GROUP_CONFIRMATION_CONFIRM_LABEL); + gtk_tree_view_column_set_title(window->UserCell,GROUP_LABEL); + gtk_label_set_text(GTK_LABEL(window->HatLabel),DELETE_GROUP_CONFIRMATION_TITLE_LABEL); + gtk_tree_view_column_set_visible(gtk_tree_view_get_column(GTK_TREE_VIEW(window->DeletionTree),2),0); + gtk_tree_view_column_set_visible(gtk_tree_view_get_column(GTK_TREE_VIEW(window->DeletionTree),3),0); + gtk_tree_view_column_set_visible(gtk_tree_view_get_column(GTK_TREE_VIEW(window->DeletionTree),4),0); + 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->AcceptButton),"clicked",G_CALLBACK(yon_group_delete_confirmation_save),dict); + GtkTreeModel *model = GTK_TREE_MODEL(widgets->GroupsList); + GList *list = gtk_tree_selection_get_selected_rows(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->GroupsTree)),&model); + int chosen_size=0; + config_str chosen = NULL; + for (guint i=0;iGroupsList),&iter); + for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->GroupsList),&iter)){ + char *name; + gtk_tree_model_get(GTK_TREE_MODEL(widgets->GroupsList),&iter,1,&name,-1); + gtk_list_store_append(window->list,&itar); + gtk_list_store_set(window->list,&itar,0,yon_char_parsed_check_exist(chosen,chosen_size,name)>-1?1:0,1,name,-1); + free(name); + } + gtk_widget_show(window->Window); +} + +void yon_group_delete_confirmation_save(GtkWidget *self, dictionary *dict){ + GtkTreeIter iter,itar; + main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); + yon_confirmation_window *window = yon_dictionary_get_data(dict->first->next,yon_confirmation_window*); + int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->GroupsList),&iter); + for (;valid;valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->GroupsList),&iter)){ + char *name; + gtk_tree_model_get(GTK_TREE_MODEL(widgets->GroupsList),&iter,1,&name,-1); + int valid2 = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(window->list),&itar); + for (;valid2;valid2 = gtk_tree_model_iter_next(GTK_TREE_MODEL(window->list),&itar)){ + char *name_check; + int delete; + gtk_tree_model_get(GTK_TREE_MODEL(window->list),&itar,0,&delete,1,&name_check,-1); + if (!strcmp(name,name_check)&&delete){ + yon_config_remove_by_key(GROUPADD(name)); + yon_config_remove_by_key(GROUPADD_SYNC(name)); + valid=0; + break; + } + } + } + yon_interface_update(widgets); + + on_subwindow_close(self); +} \ No newline at end of file diff --git a/source/ubl-settings-usergroups-password.c b/source/ubl-settings-usergroups-password.c new file mode 100644 index 0000000..8eef247 --- /dev/null +++ b/source/ubl-settings-usergroups-password.c @@ -0,0 +1,152 @@ +#include "ubl-settings-usergroups.h" + + + +void on_password_user_changed(GtkComboBox *,ubl_settings_usergroups_user_window *window){ + char *passw = (char*)gtk_entry_get_text(GTK_ENTRY(window->userPasswordEntry)); + if ((passw[0]=='$')){ + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->userSyncSAMBACheck),0); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->userSyncSAMBAPasswordCheck),0); + gtk_widget_set_sensitive(GTK_WIDGET(window->userSyncSAMBAPasswordCheck),0); + } else { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->userSyncSAMBACheck),0); + gtk_widget_set_sensitive(GTK_WIDGET(window->userSyncSAMBACheck),1); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->userSyncSAMBAPasswordCheck),0); + gtk_widget_set_sensitive(GTK_WIDGET(window->userSyncSAMBAPasswordCheck),1); + + } +} + + + +void on_password_change(GtkWidget *, dictionary *entry_dict){ + GtkEntry *output_target = yon_dictionary_get_data(entry_dict->first->next,GtkEntry*); + ubl_settings_usergroups_password_window *window = yon_ubl_settings_usergroups_password_new(); + dictionary *dict = NULL; + char *password = (char*)gtk_entry_get_text(output_target); + if (!yon_char_is_empty(password)){ + if (main_config.load_mode==0){ + password = yon_char_new(password); + if (!check_is_password_hash(password)){ + gtk_entry_set_text(GTK_ENTRY(window->PasswordHashEntry),password); + } else { + if (password[0]=='%'&&password[1]=='%'){ + free(yon_char_divide(password,1)); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->NoEncriptionCheck),1); + } + gtk_entry_set_text(GTK_ENTRY(window->PasswordEntry),password); + } + } + } + yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); + yon_dictionary_add_or_create_if_exists_with_data(dict,"target",output_target); + g_signal_connect(G_OBJECT(window->UserOkButton),"clicked",G_CALLBACK(on_password_accept),dict); + g_signal_connect(G_OBJECT(window->UserCancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); + gtk_window_set_transient_for(GTK_WINDOW(window->CreateGroupWindow),GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(output_target)))); + gtk_widget_show(window->CreateGroupWindow); + +} + +void on_password_show_hide(GtkEntry *self, GtkEntryIconPosition icon_pos, GdkEvent*){ + 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_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*); + char *password = (char*)gtk_entry_get_text(GTK_ENTRY(window->PasswordEntry)); + char *password_check = (char*)gtk_entry_get_text(GTK_ENTRY(window->RepeatPasswordEntry)); + if (yon_char_is_empty(password)){ + char *pasted_hash = (char*)gtk_entry_get_text(GTK_ENTRY(window->PasswordHashEntry)); + if (!yon_char_is_empty(pasted_hash)){ + gtk_entry_set_text(entry,pasted_hash); + } else { + yon_ubl_status_highlight_incorrect(window->PasswordEntry); + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),PASSWORD_SHORT_LABEL(yon_char_from_int(main_config.password_min_length)),5,BACKGROUND_IMAGE_FAIL_TYPE); + return; + } + } else { + for (size_t i=0;iStatusBox),RESTRICTED_SYMBOLS_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + return; + } + } + if (yon_char_is_empty(password)){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + return; + } else if (password[0]=='%'&&password[1]=='%'){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,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; + } + if (!strcmp(password,password_check)){ + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->NoEncriptionCheck))){ + char *pasw=yon_char_append("%%",password); + password=pasw; + } + gtk_entry_set_text(GTK_ENTRY(entry),password); + } else { + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),PASSWORD_MISMATCH_LABEL,5,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->NoEncriptionCheck=yon_gtk_builder_get_widget(builder,"NoEncriptionCheck"); + + window->UserCancelButton=yon_gtk_builder_get_widget(builder,"UserCancelButton"); + window->UserOkButton=yon_gtk_builder_get_widget(builder,"UserOkButton"); + + yon_window_config_custom_window_setup(GTK_WINDOW(window->CreateGroupWindow),"PasswordWindow"); + 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); + gtk_window_set_title(GTK_WINDOW(window->CreateGroupWindow),PASSWORD_TITLE_LABEL); + +return window; +} + + +int yon_check_password_blocked(char *password){ + if (!yon_char_is_empty(password)){ + if (!strcmp(password,"!*")){ + memset(password,0,strlen(password)); + return 1; + } else if (password[0]=='!'&&password[1]=='*'){ + char *copy = yon_char_new(password); + memcpy(copy,password+2,strlen(password+2)); + memset(password,0,strlen(password)); + memcpy(password,copy,strlen(copy)); + free(copy); + return 1; + } else if (password[0]=='!'||password[0]=='*'){ + free(yon_char_divide(password,0)); + return 1; + } + } + return 0; +} \ No newline at end of file diff --git a/source/ubl-settings-usergroups-settings.c b/source/ubl-settings-usergroups-settings.c new file mode 100644 index 0000000..5a0aada --- /dev/null +++ b/source/ubl-settings-usergroups-settings.c @@ -0,0 +1,835 @@ +#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_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_user_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; +} \ No newline at end of file diff --git a/source/ubl-settings-usergroups-system.c b/source/ubl-settings-usergroups-system.c new file mode 100644 index 0000000..06f59c4 --- /dev/null +++ b/source/ubl-settings-usergroups-system.c @@ -0,0 +1,159 @@ +#include "ubl-settings-usergroups.h" + +void on_delete_system_user(GtkWidget *, dictionary *dict){ + main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); + yon_confirmation_window *dialog = yon_dictionary_get_data(dict->first->next,yon_confirmation_window*); + GtkTreeModel *model = GTK_TREE_MODEL(dialog->list); + GtkTreeIter iter; + char *command=NULL; + for_iter(model,&iter){ + int status,delete_home_status; + char *target; + gtk_tree_model_get(model,&iter,0,&status,1,&target,3,&delete_home_status,-1); + if (command) command=yon_char_unite(command,"; ",delete_home_status?remove_user_and_homedir_from_system_command(target):remove_user_from_system_command(target),NULL); + else command = delete_home_status?remove_user_and_homedir_from_system_command(target):remove_user_from_system_command(target); + } + if (!yon_char_is_empty(command)){ + if (system(yon_debug_output("%s\n",command))){ + yon_ubl_status_box_render(USER_REMOVE_ERROR,BACKGROUND_IMAGE_FAIL_TYPE); + } else { + + textdomain(template_ui_LocaleName); + yon_ubl_status_box_render(SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + textdomain(LocalePath); + } + } + on_subwindow_close(dialog->Window); + yon_system_load(widgets); +} + +void on_delete_system_group(GtkWidget *, dictionary *dict){ + main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); + yon_confirmation_window *dialog = yon_dictionary_get_data(dict->first->next,yon_confirmation_window*); + GtkTreeModel *model = GTK_TREE_MODEL(dialog->list); + GtkTreeIter iter; + char *command=NULL; + for_iter(model,&iter){ + int status,delete_home_status; + char *target; + gtk_tree_model_get(model,&iter,0,&status,1,&target,3,&delete_home_status,-1); + if (command) command=yon_char_unite(command,"; ",remove_group_from_system_command(target),NULL); + else command = remove_group_from_system_command(target); + } + if (!yon_char_is_empty(command)){ + if (system(yon_debug_output("%s\n",command))){ + yon_ubl_status_box_render(USER_REMOVE_ERROR,BACKGROUND_IMAGE_FAIL_TYPE); + } else { + + textdomain(template_ui_LocaleName); + yon_ubl_status_box_render(SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + textdomain(LocalePath); + } + } + on_subwindow_close(dialog->Window); + yon_system_load(widgets); +} + +void yon_remove_confirmation_window_accept_clicked(GtkWidget *self,dictionary *dict){ + main_window *widgets = yon_dictionary_get_data(dict->first,main_window *); + system_remove_confirmation_window *window = yon_dictionary_get_data(dict->first->next,system_remove_confirmation_window *); + if (self == window->ConfigAcceptButton){ + if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==2){ + GtkTreeIter iter, itar; + GtkTreeModel *model; + char *target; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemTree)),&model,&iter)){ + gtk_tree_model_get(model,&iter,2,&target,-1); + } + for_iter(GTK_TREE_MODEL(widgets->UsersList),&itar){ + char *cur; + gtk_tree_model_get(GTK_TREE_MODEL(widgets->UsersList),&itar,2,&cur,-1); + if (!strcmp(target,cur)){ + gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->UsersTree)),&itar); + break; + } + } + gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->MainNotebook),0); + yon_delete_confirmation_open(widgets); + } else if (self == window->AcceptButton || self == window->SystemAcceptButton) { + GtkTreeIter iter, itar; + GtkTreeModel *model; + char *target; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemGroupsTree)),&model,&iter)){ + gtk_tree_model_get(model,&iter,1,&target,-1); + } + for_iter(GTK_TREE_MODEL(widgets->GroupsList),&itar){ + char *cur; + gtk_tree_model_get(GTK_TREE_MODEL(widgets->GroupsList),&itar,1,&cur,-1); + if (!strcmp(target,cur)){ + gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->GroupsTree)),&itar); + break; + } + } + gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->MainNotebook),1); + yon_group_delete_confirmation_open(widgets); + } + } else { + yon_confirmation_window *dialog = yon_delete_confirmation_new(); + dictionary *dact = NULL; + yon_dictionary_add_or_create_if_exists_with_data(dact,"widgets",widgets); + yon_dictionary_add_or_create_if_exists_with_data(dact,"dialog",dialog); + if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==2){ + gtk_label_set_text(GTK_LABEL(dialog->TitleLabel),DELETE_CONFIRMATION_CONFIRM_LABEL); + gtk_label_set_text(GTK_LABEL(dialog->HatLabel),DELETE_CONFIRMATION_TITLE_LABEL); + yon_gtk_window_setup(GTK_WINDOW(dialog->Window),GTK_WINDOW(widgets->Window),DELETE_CONFIRMATION_TITLE_LABEL,icon_path,"delete-system-user-window"); + g_signal_connect(G_OBJECT(dialog->AcceptButton),"clicked",G_CALLBACK(on_delete_system_user),dact); + GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->SystemTree)); + GtkTreeIter iter; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemTree)),&model,&iter)){ + char *name,*username,*homedir=NULL; + gtk_tree_model_get(model,&iter,2,&name,3,&username,6,&homedir,-1); + gtk_list_store_append(dialog->list,&iter); + gtk_list_store_set(dialog->list,&iter,0,1,1,name,2,homedir,4,!yon_char_is_empty(homedir),5,username,-1); + gtk_widget_show(dialog->Window); + } + + } else { + GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->SystemGroupsTree)); + GtkTreeIter iter; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemGroupsTree)),&model,&iter)){ + yon_gtk_window_setup(GTK_WINDOW(dialog->Window),GTK_WINDOW(widgets->Window),DELETE_GROUP_CONFIRMATION_TITLE_LABEL,icon_path,"delete-system-gruop-window"); + g_signal_connect(G_OBJECT(dialog->AcceptButton),"clicked",G_CALLBACK(on_delete_system_group),dact); + gtk_widget_show(window->AcceptButton); + gtk_widget_hide(window->ConfigAcceptButton); + gtk_widget_hide(window->SystemAcceptButton); + char *name; + gtk_label_set_text(GTK_LABEL(window->TitleLabel),DELETE_GROUP_CONFIRMATION_CONFIRM_LABEL); + gtk_label_set_text(GTK_LABEL(dialog->HatLabel),DELETE_GROUP_CONFIRMATION_TITLE_LABEL); + gtk_tree_view_column_set_title(dialog->UserCell,GROUP_LABEL); + gtk_tree_view_column_set_visible(gtk_tree_view_get_column(GTK_TREE_VIEW(dialog->DeletionTree),2),0); + gtk_tree_view_column_set_visible(gtk_tree_view_get_column(GTK_TREE_VIEW(dialog->DeletionTree),3),0); + gtk_tree_view_column_set_visible(gtk_tree_view_get_column(GTK_TREE_VIEW(dialog->DeletionTree),4),0); + + gtk_tree_model_get(model,&iter,1,&name,-1); + gtk_list_store_append(dialog->list,&iter); + gtk_list_store_set(dialog->list,&iter,0,1,1,name,-1); + gtk_widget_show(dialog->Window); + } + } + } + on_subwindow_close(self); +} + +system_remove_confirmation_window *yon_system_remove_confirmation_window_new(){ + system_remove_confirmation_window *window = malloc(sizeof(system_remove_confirmation_window)); + GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_ubl_settings_usergroups_system_deletion_confirmation); + + window->Window = yon_gtk_builder_get_widget(builder,"Window"); + window->HeaderLabel = yon_gtk_builder_get_widget(builder,"HeaderLabel"); + window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); + window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox"); + window->TitleLabel = yon_gtk_builder_get_widget(builder,"TitleLabel"); + window->AcceptButton = yon_gtk_builder_get_widget(builder,"AcceptButton"); + window->ConfigAcceptButton = yon_gtk_builder_get_widget(builder,"ConfigAcceptButton"); + window->SystemAcceptButton = yon_gtk_builder_get_widget(builder,"SystemAcceptButton"); + + g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); + + return window; +} \ No newline at end of file diff --git a/source/ubl-settings-usergroups-user.c b/source/ubl-settings-usergroups-user.c new file mode 100644 index 0000000..c7ced30 --- /dev/null +++ b/source/ubl-settings-usergroups-user.c @@ -0,0 +1,656 @@ +#include "ubl-settings-usergroups.h" + +void on_parameter_changed(GtkWidget *,ubl_settings_usergroups_user_window *window){ + char *user_shell=NULL; + char *user_home=NULL; + char *login=NULL; + char *create_system_user=NULL; + char *create_ununique=NULL; + char *do_not_check=NULL; + char *main_group=NULL; + char *no_user_group=NULL; + + int do_not_check_actve = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userDontCheckCheck)); + if (do_not_check_actve) + do_not_check = "--badnames"; + + login = (char*)gtk_entry_get_text(GTK_ENTRY(window->userLoginEntry)); + if (login[0]>'0'&&login[0]<'9'&&!do_not_check_actve){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),USER_BEGINS_WITH_DIGIT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + gtk_notebook_set_current_page(GTK_NOTEBOOK(window->MainNotebook),0); + yon_ubl_status_highlight_incorrect(window->userLoginEntry); + return; + } + if (yon_char_is_empty(login)){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + gtk_notebook_set_current_page(GTK_NOTEBOOK(window->MainNotebook),0); + yon_ubl_status_highlight_incorrect(window->userLoginEntry); + return; + } + + 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 ",!strcmp(gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->userShellCombo)),"Set")?(char*)gtk_entry_get_text(GTK_ENTRY(window->userShellEntry)):(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){ + char *path = (char*)gtk_entry_get_text(GTK_ENTRY(window->userHomeEntry)); + if (!yon_char_is_empty(path)) + user_home=yon_char_unite("--home-dir ",path,NULL); + else user_home = ""; + } else if (user_home_active==1){ + user_home="--no-create-home"; + } 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 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)){ + no_user_group="--no-user-group"; + } + } else { + main_group = ""; + } + char *final_string = user_home; + final_string = yon_char_unite(final_string,!yon_char_is_empty(final_string)?" ":"", + yon_char_return_if_exist(user_shell,""), + !yon_char_is_empty(user_shell)?" ":"", + yon_char_return_if_exist(create_system_user,""), + !yon_char_is_empty(create_system_user)?" ":"", + yon_char_return_if_exist(create_ununique,""), + !yon_char_is_empty(create_ununique)?" ":"", + yon_char_return_if_exist(do_not_check,""), + !yon_char_is_empty(do_not_check)?" ":"", + yon_char_return_if_exist(no_user_group,""), + NULL); + if (final_string&&strlen(final_string)){ + if (final_string[strlen(final_string)-1]==' ') final_string[strlen(final_string)-1]='\0'; + gtk_entry_set_text(GTK_ENTRY(window->userExtraOptionsEntry),final_string); + free(final_string); + } else { + gtk_entry_set_text(GTK_ENTRY(window->userExtraOptionsEntry),""); + } +} + +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->userSyncSAMBAPasswordCheck=yon_gtk_builder_get_widget(builder,"userSyncSAMBAPasswordCheck"); + 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"); + window->userTitleNameLabel=yon_gtk_builder_get_widget(builder,"userTitleNameLabel"); + window->MainNotebook=yon_gtk_builder_get_widget(builder,"MainNotebook"); + window->expiration_unix=NULL; + window->last_uid=NULL; + + time_t t = time(NULL); + struct tm tm = *localtime(&t); + gtk_calendar_select_day(GTK_CALENDAR(window->ExpirationCalendar),tm.tm_mday); + gtk_calendar_select_month(GTK_CALENDAR(window->ExpirationCalendar),tm.tm_mon,1900+tm.tm_year); + + on_UID_update(NULL,window); + int shell_size=0; + config_str shells = yon_file_open(shell_list_path,&shell_size); + for (int i=1;iuserShellCombo),parsed[0],parsed[0]); + yon_char_parsed_free(parsed,parsed_size); + } + } + gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->userShellCombo),"Set",SET_LABEL); + yon_char_parsed_free(shells,shell_size); + gtk_combo_box_set_active(GTK_COMBO_BOX(window->userShellCombo),0); + window->old_password=NULL; + window->old_username=NULL; + dictionary *entry_dict = NULL; + + struct target_struct *target = malloc(sizeof(struct target_struct)); + target->target=GTK_ENTRY(window->userGroupsEntry); + target->defaut_toggle=GTK_TOGGLE_BUTTON(window->userGroupsCheck); + yon_window_config_custom_window_setup(GTK_WINDOW(window->CreateUserWindow),"UserWindow"); + 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); + // char *password = yon_config_get_by_key(USERADD((char*)gtk_entry_get_text(GTK_ENTRY(window->userLoginEntry)))); + 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),target); + 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); + g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(on_UID_update),window); + g_signal_connect(G_OBJECT(window->userCreateSystemCheck),"toggled",G_CALLBACK(on_UID_update),window); + g_signal_connect(G_OBJECT(window->userGroupsCheck),"toggled",G_CALLBACK(on_user_login_update),window); + g_signal_connect(G_OBJECT(window->userLoginEntry),"changed",G_CALLBACK(on_user_login_update),window); + g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->userCreateSystemCheck); + g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(yon_gtk_toggle_button_set_inactive_from_toggle_button),window->userCreateSystemCheck); + g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->userCreateUnuniqueCheck); + g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(yon_gtk_toggle_button_set_inactive_from_toggle_button_inversed),window->userCreateUnuniqueCheck); + g_signal_connect(G_OBJECT(window->userSyncSAMBACheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->userSyncSAMBAPasswordCheck); + g_signal_connect(G_OBJECT(window->userSyncSAMBAPasswordCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->userSyncSAMBACheck); + g_signal_connect(G_OBJECT(window->userSyncSAMBACheck),"toggled",G_CALLBACK(on_toggle_button_set_active_from_toggle_button_inversed),window); + g_signal_connect(G_OBJECT(window->userSyncSAMBAPasswordCheck),"toggled",G_CALLBACK(on_toggle_button_set_active_from_toggle_button_inversed),window); + g_signal_connect(G_OBJECT(window->userPasswordCombo),"changed",G_CALLBACK(on_toggle_button_set_active_from_combo_box),window); + g_signal_connect(G_OBJECT(window->userPasswordCombo),"changed",G_CALLBACK(on_toggle_button_set_active_from_combo_box),window); + g_signal_connect(G_OBJECT(window->userPasswordEntry),"changed",G_CALLBACK(on_password_user_changed),window); + g_signal_connect(G_OBJECT(window->userHomeEntry),"changed",G_CALLBACK(on_parameter_changed),window); + g_signal_connect(G_OBJECT(window->userHomeCombo),"changed",G_CALLBACK(on_parameter_changed),window); + g_signal_connect(G_OBJECT(window->userShellCombo),"changed",G_CALLBACK(on_parameter_changed),window); + g_signal_connect(G_OBJECT(window->userShellEntry),"changed",G_CALLBACK(on_parameter_changed),window); + g_signal_connect(G_OBJECT(window->userCreateSystemCheck),"toggled",G_CALLBACK(on_parameter_changed),window); + g_signal_connect(G_OBJECT(window->userCreateUnuniqueCheck),"toggled",G_CALLBACK(on_parameter_changed),window); + g_signal_connect(G_OBJECT(window->userDontCheckCheck),"toggled",G_CALLBACK(on_parameter_changed),window); + g_signal_connect(G_OBJECT(window->userGroupsCheck),"toggled",G_CALLBACK(on_parameter_changed),window); + g_signal_connect(G_OBJECT(window->userGroupsEntry),"changed",G_CALLBACK(on_parameter_changed),window); + g_signal_connect(G_OBJECT(window->userPasswordExpirationEntry),"icon-press",G_CALLBACK(on_remove_expired),window->userPasswordExpirationEntry); + g_signal_connect(G_OBJECT(window->userUIDEntry),"insert-text",G_CALLBACK(yon_on_text_insert_only_digits),NULL); +return window; +} + +void on_UID_update(GtkWidget *, ubl_settings_usergroups_user_window *window){ + if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userUIDAutoCheck))){ + if (window->last_uid){ + gtk_entry_set_text(GTK_ENTRY(window->userUIDEntry),window->last_uid); + } else { + int config_size=0; + int final_size=0; + config_str config_users = yon_config_get_all_by_key(USERADD_SEARCH_macro,&config_size); + yon_char_parsed_prepend_strings(config_users,config_size,":"); + config_str final = yon_char_parsed_merge(main_config.users,main_config.users_size,config_users,config_size,&final_size); + long prev_busy=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userCreateSystemCheck))?0:main_config.MINGID; + for (int i=0;iuserCreateUnuniqueCheck))?0:main_config.MINGID; + int maximum = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userCreateUnuniqueCheck))?68000:main_config.MAXGID; + for (int i=0;iprev_busy){ + prev_busy=atol(parsed[2]); + } + } + } + yon_char_parsed_free(parsed, parsed_size); + } + gtk_entry_set_text(GTK_ENTRY(window->userUIDEntry),yon_char_from_long(prev_busy+1)); + } + } else { + gtk_entry_set_text(GTK_ENTRY(window->userUIDEntry),""); + } +} + +void on_user_shell_changed(GtkWidget *, ubl_settings_usergroups_user_window *window){ + const char *current = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->userShellCombo)); + if (!yon_char_is_empty(current)&&!strcmp(current,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_login_update(GtkWidget *, ubl_settings_usergroups_user_window *window){ + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userGroupsCheck))){ + gtk_entry_set_text(GTK_ENTRY(window->userGroupsEntry),gtk_entry_get_text(GTK_ENTRY(window->userLoginEntry))); + } else { + gtk_entry_set_text(GTK_ENTRY(window->userGroupsEntry),""); + } +} + +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; + int samba_sync = 0; + int samba_password_sync = 0; + int deactivate = 0; + 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=""; + } else { + int config_size=0; + int final_size=0; + config_str config_users = yon_config_get_all_by_key(USERADD_SEARCH_macro,&config_size); + yon_char_parsed_prepend_strings(config_users,config_size,":"); + config_str final = yon_char_parsed_merge(main_config.users,main_config.users_size,config_users,config_size,&final_size); + + uid_string = (char*)gtk_entry_get_text(GTK_ENTRY(window->userUIDEntry)); + if (strcmp(uid_string,window->last_uid)){ + if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userCreateUnuniqueCheck))){ + int found=0; + for (int i=0;i2&&!strcmp(parsed[2],uid_string)){ + if (yon_char_is_empty(window->last_uid)||(!yon_char_is_empty(window->last_uid)&&strcmp(parsed[2],window->last_uid))){ + found = yon_char_parsed_check_exist(config_users,config_size,final[i])>-1?1:2; + break; + } + } + + if (parsed_size) yon_char_parsed_free(parsed,parsed_size); + } + if (found){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),found==1?UID_ALREADY_EXIST_CONFIG_LABEL:UID_ALREADY_EXIST_SYSTEM_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + yon_ubl_status_highlight_incorrect(window->userUIDEntry); + gtk_notebook_set_current_page(GTK_NOTEBOOK(window->MainNotebook),0); + return; + } + } + } + + 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); + gtk_notebook_set_current_page(GTK_NOTEBOOK(window->MainNotebook),0); + return; + } + } + + int do_not_check_actve = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userDontCheckCheck)); + 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; + + } + if (login[0]>'0'&&login[0]<'9'&&!do_not_check_actve){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),USER_BEGINS_WITH_DIGIT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + yon_ubl_status_highlight_incorrect(window->userLoginEntry); + return; + } + { + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(widgets->UsersList); + for_iter(model,&iter){ + char *cur; + gtk_tree_model_get(model,&iter,2, &cur,-1); + if (!yon_char_is_empty(cur)&&!strcmp(cur,login)){ + if (!gtk_tree_selection_iter_is_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->UsersTree)),&iter)){ + + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),USER_EXIST_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + yon_ubl_status_highlight_incorrect(window->userLoginEntry); + gtk_notebook_set_current_page(GTK_NOTEBOOK(window->MainNotebook),0); + 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); + gtk_notebook_set_current_page(GTK_NOTEBOOK(window->MainNotebook),0); + return; + } + } else if (password_active==1){ + password = "!*"; + } else { + password=""; + } + + char *old_password = NULL; + if (window->old_password){ + old_password = window->old_password; + yon_check_password_blocked(old_password); + } + if (!old_password||(old_password&&strcmp(old_password,password))){ + time_t t = time(NULL); + struct tm tm = *localtime(&t); + char *month = yon_char_from_int(tm.tm_mon+1); + if (strlen(month)==1){ + month=yon_char_append("0",month); + } + char *day = yon_char_from_int(tm.tm_mday); + if (strlen(day)<2){ + day=yon_char_append("0",day); + } + password_changed_date = yon_char_unite(yon_char_from_int(1900+tm.tm_year),"-",month,"-",day,NULL); + } else { + password_changed_date = (char*)gtk_entry_get_text(GTK_ENTRY(window->userPasswordChangedEntry)); + } + + deactivate = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userDeactivatedCheck)); + if (deactivate){ + if (strlen(password)>1&&password[0]=='%'&&password[1]=='%'){ + char *temp = yon_char_replace(password,"%%","!!"); + password = yon_char_replace(temp,"!!","%%!"); + } else { + password = yon_char_append("!",password); + } + } + + username = (char*)gtk_entry_get_text(GTK_ENTRY(window->userUserNameEntry)); + if (yon_char_is_empty(username)){ + username=""; + } + + 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)); + } else { + main_group = ""; + } + + additional_groups = (char*)gtk_entry_get_text(GTK_ENTRY(window->userAdditionalGroupsEntry)); + char *default_groups = yon_config_get_by_key(USERGROUPS_parameter); + if (!yon_char_is_empty(default_groups)&&!strcmp(default_groups,additional_groups)){ + additional_groups=""; + } + 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; + + password_expiration_date = (char*)gtk_entry_get_text(GTK_ENTRY(window->userPasswordExpirationEntry)); + if (yon_char_is_empty(password_expiration_date)){ + password_expiration_date="-1"; + } + + long warning_days_active = gtk_spin_button_get_value(GTK_SPIN_BUTTON(window->userWarningSpin)); + if (warning_days_active>0) + warning_days = yon_char_from_long(warning_days_active); + + 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); + } + + samba_sync = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userSyncSAMBACheck)); + samba_password_sync = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userSyncSAMBAPasswordCheck)); + if (samba_sync){ + if (yon_samba_sync_get(login)==2) + yon_samba_sync_remove(login); + yon_samba_sync_add(login,NULL); + } else if (samba_password_sync){ + if (yon_samba_sync_get(login)==1) + yon_samba_sync_remove(login); + yon_samba_sync_add(login,password); + } else { + yon_samba_sync_remove(login); + } + + extra_options=(char*)gtk_entry_get_text(GTK_ENTRY(window->userExtraOptionsEntry)); + + int force_at_next_login_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userForceChangeCheck)); + if (force_at_next_login_active){ + password_changed_date = "0"; + } + + 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)&&!yon_char_is_empty(useradd_shutdown)?",":"",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,""), + ":",yon_char_return_if_exist(uid_string,""), + ":",yon_char_return_if_exist(main_group,""), + ":",yon_char_return_if_exist(additional_groups,""), + ":",yon_char_return_if_exist(extra_options,""), + ":",yon_char_return_if_exist(password,""), + NULL); + + char *final_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",USERADD(login)); + yon_config_register(USERADD(login),final_command,final_user); + if (!yon_char_is_empty(window->old_username)&&strcmp(window->old_username,login)){ + yon_config_remove_by_key(USERADD(window->old_username)); + } + if (window->old_password&&strcmp(window->old_password,password)){ + final_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",USERSHADOW(login)); + yon_config_register(USERSHADOW(login),final_command,shadow_string); + if (!yon_char_is_empty(window->old_username)&&strcmp(window->old_username,login)){ + yon_config_remove_by_key(USERSHADOW(window->old_username)); + } + } + int home_delete = yon_char_parsed_check_exist(main_config.remove_homes,main_config.homes_size,login); + if (home_delete>-1){ + main_config.remove_homes = yon_char_parsed_rip(main_config.remove_homes,&main_config.homes_size,home_delete); + } + + if (!yon_char_is_empty(useradd_sync_string)){ + final_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",USERADD_SYNC(login)); + yon_config_register(USERADD_SYNC(login),final_command,useradd_sync_string); + if (!yon_char_is_empty(window->old_username)&&strcmp(window->old_username,login)){ + yon_config_remove_by_key(USERADD_SYNC(window->old_username)); + } + } else { + yon_config_remove_by_key(USERADD_SYNC(window->old_username)); + } + + if (!yon_char_is_empty(usershadow_sync_string)){ + final_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",USERSHADOW_SYNC(login)); + yon_config_register(USERSHADOW_SYNC(login),final_command,usershadow_sync_string); + if (!yon_char_is_empty(window->old_username)&&strcmp(window->old_username,login)){ + yon_config_remove_by_key(USERSHADOW_SYNC(window->old_username)); + } + } else { + yon_config_remove_by_key(USERSHADOW_SYNC(window->old_username)); + } + yon_interface_update(widgets); + + on_subwindow_close(self); +} + +void on_user_sync_with_config(GtkWidget *,main_window *widgets){ + int active = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook)); + switch (active){ + case 2:{ + GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore1); + GtkTreeIter iter; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemTree)),&model,&iter)){ + char *target; + gtk_tree_model_get(model,&iter,2,&target,-1); + dialog_confirmation_data data; + if (config(USERADD(target))){ + data.action_text = SYSTEM_USER_SYNC_CONFIRMATION_LABEL(target); + data.data=NULL; + data.function=NULL; + } else { + data.action_text = SYSTEM_USER_ADD_CONFIRMATION_LABEL(target); + data.data=NULL; + data.function=NULL; + } + if (yon_confirmation_dialog_call(widgets->Window,&data)!=GTK_RESPONSE_ACCEPT){ + return; + } + + char *user = yon_char_parsed_check_exist_begins_with(main_config.groups,main_config.groups_size,target); + char *shadow = yon_char_parsed_check_exist_begins_with(main_config.group_shadow,main_config.group_shadow_size,target); + yon_char_remove_last_symbol(user,'\n'); + yon_char_remove_last_symbol(shadow,'\n'); + int user_size=0; + int shadow_size=0; + config_str parsed = yon_char_parse(user,&user_size,":"); + config_str parsed_shadow = yon_char_parse(shadow,&shadow_size,":"); + + char *optionals = yon_char_unite(user_size>5? parsed[5]:"",user_size>5?" ":"",user_size>6?parsed[6]:"",NULL); + char *config_user = yon_char_unite(parsed[0],":", + user_size>4?parsed[4]:"",":", + user_size>2?parsed[2]:"",":", + user_size>3?parsed[3]:"",":", + !yon_char_is_empty(optionals)?optionals:"",":", + user_size>1&&strcmp(parsed[1],"x")?yon_char_return_if_exist(parsed[1],""):yon_char_return_if_exist(parsed_shadow[1],""),NULL); + char *config_shadow = yon_char_unite(yon_char_return_if_exist(parsed[2],""),":", + user_size>3?parsed[3]:"",":", + user_size>4?parsed[4]:"",":", + user_size>5?parsed[5]:"",":", + user_size>6?parsed[6]:"",":", + user_size>7?parsed[7]:"",":",NULL); + + if (!yon_char_is_empty(config_user)){ + char *user_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",USERADD(target)); + yon_config_register(USERADD(target),user_command,config_user); + } + if (!yon_char_is_empty(config_shadow)){ + char *shadow_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",USERSHADOW(target)); + yon_config_register(USERSHADOW(target),shadow_command,config_shadow); + } + yon_interface_update(widgets); + } + yon_interface_update((main_window*)widgets); + }break; + case 3:{ + GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore1); + GtkTreeIter iter; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemGroupsTree)),&model,&iter)){ + + char *target; + gtk_tree_model_get(model,&iter,1,&target,-1); + dialog_confirmation_data data; + if (config(GROUPADD(target))){ + data.action_text = SYSTEM_GROUP_ADD_CONFIRMATION_LABEL(target); + data.data=NULL; + data.function=NULL; + } else { + data.action_text = SYSTEM_GROUP_SYNC_CONFIRMATION_LABEL(target); + data.data=NULL; + data.function=NULL; + } + if (yon_confirmation_dialog_call(widgets->Window,&data)!=GTK_RESPONSE_ACCEPT){ + return; + } + char *group = yon_char_parsed_check_exist_begins_with(main_config.groups,main_config.groups_size,target); + char *group_shadow = yon_char_parsed_check_exist_begins_with(main_config.group_shadow,main_config.group_shadow_size,target); + yon_char_remove_last_symbol(group,'\n'); + yon_char_remove_last_symbol(group_shadow,'\n'); + int group_size=0; + int group_shadow_size=0; + config_str parsed = yon_char_parse(group,&group_size,":"); + config_str parsed_shadow = yon_char_parse(group_shadow,&group_shadow_size,":"); + char *config_group = yon_char_unite(yon_char_return_if_exist(parsed[3],""), + ":",yon_char_return_if_exist(parsed[2],""), + "::",yon_char_return_if_exist(parsed_shadow[2],""), + ":",strcmp(parsed[1],"x")?yon_char_return_if_exist(parsed[1],""):yon_char_return_if_exist(parsed_shadow[1],""), + NULL); + + if (!yon_char_is_empty(config_group)){ + char *group_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",GROUPADD(target)); + yon_config_register(GROUPADD(target),group_command,config_group); + yon_interface_update(widgets); + } + } + }break; + } +} \ No newline at end of file diff --git a/source/ubl-settings-usergroups.c b/source/ubl-settings-usergroups.c index 167591a..68a9a09 100644 --- a/source/ubl-settings-usergroups.c +++ b/source/ubl-settings-usergroups.c @@ -5,7 +5,9 @@ config main_config; //functions int yon_load_proceed(YON_CONFIG_TYPE type){ - yon_config_clean(); + if (type!=YON_CONFIG_CUSTOM){ + yon_config_clean(); + } yon_config_load_config(YON_CONFIG_DEFAULT,config_get_default_command,NULL); if (type==YON_CONFIG_GLOBAL){ yon_debug_output("%s\n",yon_char_unite(config_get_command("global"),NULL)); @@ -51,9 +53,14 @@ int yon_load_proceed(YON_CONFIG_TYPE type){ return 1; } else if (type==YON_CONFIG_CUSTOM){ - char *path=NULL;; - GtkWidget *dialog = gtk_file_chooser_dialog_new(template_app_information.app_title,NULL,GTK_FILE_CHOOSER_ACTION_SAVE,CANCEL_LABEL,GTK_RESPONSE_CANCEL,OPEN_LABEL,GTK_RESPONSE_ACCEPT,NULL); + char *path=NULL; + textdomain(template_ui_LocaleName); + char *open_string = OPEN_LABEL; + textdomain(LocaleName); + GtkWidget *dialog = gtk_file_chooser_dialog_new(template_app_information.app_title,NULL,GTK_FILE_CHOOSER_ACTION_SAVE,CANCEL_LABEL,GTK_RESPONSE_CANCEL,open_string,GTK_RESPONSE_ACCEPT,NULL); + yon_gtk_window_setup(GTK_WINDOW(dialog),NULL,CHOOSE_CUSTOM_CONFIG_LABEL,icon_path,"config-open-window"); GtkFileFilter *filter = gtk_file_filter_new(); + gtk_file_filter_set_name(filter,FILTER_NAME_CONFIG_LABEL); gtk_file_filter_add_pattern(filter,"*.ini"); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog),filter); gtk_widget_show(dialog); @@ -63,12 +70,13 @@ int yon_load_proceed(YON_CONFIG_TYPE type){ if (!yon_char_is_empty(file)){ path=file; } + yon_config_clean(); + yon_config_load_config(type,config_get_command(path),NULL); gtk_widget_destroy(dialog); } else { gtk_widget_destroy(dialog); return 0; } - yon_config_load_config(type,config_get_command(path),NULL); } return 1; } @@ -127,7 +135,7 @@ void yon_interface_update(main_window *widgets){ } free(users); } - config_str groups = yon_config_get_all_by_key(GROUPADD_parameter,&size); + config_str groups = yon_config_get_all_by_key(GROUPADD_SEARCH_macro,&size); if (groups){ for (int i=0;iGroupsList,&iter); @@ -150,6 +158,8 @@ void yon_interface_update(main_window *widgets){ if (parameters_size>4&&strcmp(parameters[4],"x")&&strcmp(parameters[4],"")){ if (!check_is_password_hash(parameters[4])&¶meters[4][0]!='%'&¶meters[4][1]!='%'){ pars = ENCRYPTED_LABEL; + } else if (!strcmp(parameters[4],"!*")||!strcmp(parameters[4],"*")||!strcmp(parameters[4],"!")){ + pars = NO_PASSWORD_LABEL; } else { pars = UNENCRYPTED_LABEL; @@ -160,8 +170,8 @@ void yon_interface_update(main_window *widgets){ } gtk_list_store_set(widgets->GroupsList,&iter, 1,login, - 0,parameters_size>2?parameters[2]:"", - 2,parameters_size>1?parameters[1]:"", + 0,parameters_size>2?parameters[1]:"", + 2,parameters_size>1?parameters[0]:"", 3,parameters_size>3?parameters[3]:"", 4,pars, -1); @@ -170,14 +180,45 @@ void yon_interface_update(main_window *widgets){ } } - if (main_config.groups_size>0){ - yon_char_parsed_free(main_config.groups,main_config.groups_size); - main_config.groups = yon_file_open(groups_path,&main_config.groups_size); - } - if (main_config.users_size>0){ - yon_char_parsed_free(main_config.users,main_config.users_size); - main_config.users = yon_file_open(users_path,&main_config.users_size); - } + + yon_system_load(widgets); + + + if (!yon_window_config_check_exist("window","UserColumn1")){ + yon_gtk_tree_view_set_fixed_size(GTK_TREE_VIEW(widgets->UsersTree), 1,-1); + + } + if (!yon_window_config_check_exist("window","UserColumn2")){ + yon_gtk_tree_view_set_fixed_size(GTK_TREE_VIEW(widgets->UsersTree), 2,-1); + } + if (!yon_window_config_check_exist("window","UserColumn3")){ + yon_gtk_tree_view_set_fixed_size(GTK_TREE_VIEW(widgets->UsersTree), 3,-1); + } + + if (!yon_window_config_check_exist("window","GroupColumn1")){ + yon_gtk_tree_view_set_fixed_size(GTK_TREE_VIEW(widgets->GroupsTree),1,-1); + } + if (!yon_window_config_check_exist("window","GroupColumn2")){ + yon_gtk_tree_view_set_fixed_size(GTK_TREE_VIEW(widgets->GroupsTree),2,-1); + } + + if (!yon_window_config_check_exist("window","SystemUserColumn1")){ + yon_gtk_tree_view_set_fixed_size(GTK_TREE_VIEW(widgets->SystemTree),1,-1); + } + if (!yon_window_config_check_exist("window","SystemUserColumn2")){ + yon_gtk_tree_view_set_fixed_size(GTK_TREE_VIEW(widgets->SystemTree),2,-1); + } + if (!yon_window_config_check_exist("window","SystemUserColumn3")){ + yon_gtk_tree_view_set_fixed_size(GTK_TREE_VIEW(widgets->SystemTree),3,-1); + } + + if (!yon_window_config_check_exist("window","SystemGroupColumn2")){ + yon_gtk_tree_view_set_fixed_size(GTK_TREE_VIEW(widgets->SystemGroupsTree),1,-1); + } + if (!yon_window_config_check_exist("window","SystemGroupColumn2")){ + yon_gtk_tree_view_set_fixed_size(GTK_TREE_VIEW(widgets->SystemGroupsTree),2,-1); + } + } void on_config_local_load(GtkWidget *, main_window *widgets){ @@ -226,13 +267,33 @@ if (main_config.sync_users){ } void yon_accept_changes(){ - char *remove_homes = ""; - for (int i=0;i0){ + char *final = NULL; + char *temp; + for (int i=0;i5&&!yon_char_is_empty(parsed[5])&&strcmp(parsed[5],"x")) { free(new_value); free(yon_char_divide(parsed[5],1)); - new_value = yon_char_parsed_to_string(parsed,size,":"); + new_value = yon_char_parsed_to_string_include_empty(parsed,size,":"); } if (parsed){ yon_char_parsed_free(parsed,size); @@ -268,15 +329,14 @@ void yon_hide_passwords(template_saving_window *window){ if(!yon_char_is_empty(old_value)){ config_str parsed = NULL; parsed = yon_char_parse(old_value,&size,":"); - if (size>5&&!yon_char_is_empty(parsed[5])&&strcmp(parsed[5],"x")&&parsed[5][0]!='%'&&parsed[5][1]!='%'){ + if (size>5&&!yon_char_is_empty(parsed[5])&&!check_is_password_hash(parsed[5])){ free(old_value); free(parsed[5]); parsed[5]=yon_char_new("*******"); - old_value = yon_char_parsed_to_string(parsed,size,":"); + old_value = yon_char_parsed_to_string_include_empty(parsed,size,":"); } else if (size>5&&!yon_char_is_empty(parsed[5])&&strcmp(parsed[5],"x")) { free(old_value); - free(yon_char_divide(parsed[5],1)); - old_value = yon_char_parsed_to_string(parsed,size,":"); + old_value = yon_char_parsed_to_string_include_empty(parsed,size,":"); } if (parsed){ yon_char_parsed_free(parsed,size); @@ -301,7 +361,7 @@ void yon_hide_passwords(template_saving_window *window){ free(parsed[4]); parsed[4]=yon_char_new("*******"); } - new_value = yon_char_parsed_to_string(parsed,size,":"); + new_value = yon_char_parsed_to_string_include_empty(parsed,size,":"); } if(!yon_char_is_empty(old_value)){ config_str parsed = NULL; @@ -310,11 +370,11 @@ void yon_hide_passwords(template_saving_window *window){ free(old_value); free(parsed[4]); parsed[4]=yon_char_new("*******"); - old_value = yon_char_parsed_to_string(parsed,size,":"); + old_value = yon_char_parsed_to_string_include_empty(parsed,size,":"); } else if (size>4&&!yon_char_is_empty(parsed[4])&&strcmp(parsed[4],"x")) { free(old_value); free(yon_char_divide(parsed[4],1)); - old_value = yon_char_parsed_to_string(parsed,size,":"); + old_value = yon_char_parsed_to_string_include_empty(parsed,size,":"); } if (parsed){ yon_char_parsed_free(parsed,size); @@ -406,6 +466,9 @@ void on_save_done(main_window *widgets, config_str output, int size){ case 2: yon_ubl_status_box_render(GLOBAL_LOCAL_SAVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); break; + case 3: + yon_ubl_status_box_render(SAVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + } textdomain(LocaleName); @@ -419,57 +482,6 @@ void on_config_save(GtkWidget *, main_window *){ main_config.save_config=2; template_saving_window *window = yon_save_proceed(NULL,YON_CONFIG_BOTH,config_get_command("global"),NULL); if (window){ - if (main_config.load_mode==0){ - GtkTreeIter iter; - int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(window->list),&iter); - for(;valid;valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(window->list),&iter)){ - char *parameter,*old_value, *new_value; - gtk_tree_model_get(GTK_TREE_MODEL(window->list),&iter,1,¶meter,2,&old_value,3,&new_value,-1); - int old_size, new_size; - config_str old_parsed = yon_char_parse(old_value,&old_size,":"); - config_str new_parsed = yon_char_parse(new_value,&new_size,":"); - if (old_parsed&&new_parsed){ - char *parameter_type = yon_char_divide_search(parameter,"[",-1); - if (!strcmp(parameter_type,USERADD_parameter)){ - if (old_size>5){ - old_parsed = yon_char_parsed_rip(old_parsed,&old_size,5); - - } - if (new_size>5){ - new_parsed = yon_char_parsed_rip(new_parsed,&new_size,5); - } - char *old_final = yon_char_parsed_to_string(old_parsed,old_size,":"); - char *new_final = yon_char_parsed_to_string(new_parsed,new_size,":"); - if (old_final&&new_final&&!strcmp(old_final,new_final)){ - gtk_list_store_set(window->list,&iter,5,0,-1); - } - free(old_final); - free(new_final); - yon_char_parsed_free(old_parsed,old_size); - yon_char_parsed_free(new_parsed,new_size); - - } else if (!strcmp(parameter_type,GROUPADD_parameter)){ - if (old_size>3){ - old_parsed = yon_char_parsed_rip(old_parsed,&old_size,3); - - } - if (new_size>3){ - new_parsed = yon_char_parsed_rip(new_parsed,&new_size,3); - } - char *old_final = yon_char_parsed_to_string(old_parsed,old_size,":"); - char *new_final = yon_char_parsed_to_string(new_parsed,new_size,":"); - if (!strcmp(old_final,new_final)){ - gtk_list_store_set(window->list,&iter,5,0,-1); - } - free(old_final); - free(new_final); - yon_char_parsed_free(old_parsed,old_size); - yon_char_parsed_free(new_parsed,new_size); - - } - } - } - } yon_hide_passwords(window); } } @@ -496,7 +508,7 @@ void on_config_local_save(GtkWidget *, main_window *){ if (parsed_size>5&&!yon_char_is_empty(parsed[5])){ yon_char_parsed_add_or_create_if_exists(passwords,&passw_size,yon_char_new(parsed[5])); parsed = yon_char_parsed_rip(parsed,&parsed_size,5); - char *final_string = yon_char_parsed_to_string(parsed,parsed_size,":"); + char *final_string = yon_char_parsed_to_string_include_empty(parsed,parsed_size,":"); char *temp = yon_char_append(final_string,":"); free(final_string); final_string=temp; @@ -517,7 +529,7 @@ void on_config_local_save(GtkWidget *, main_window *){ } void on_config_custom_save(GtkWidget *, main_window *){ - main_config.save_config=1; + main_config.save_config=3; template_saving_window *window = yon_save_proceed(NULL,YON_CONFIG_CUSTOM,config_get_command("system"),NULL); if (window){ yon_hide_passwords(window); @@ -574,9 +586,10 @@ void on_delete_confirmation_delete_home_check(GtkCellRenderer *, char *path, yon void on_delete_confirmation_delete_check(GtkCellRenderer *, char *path, yon_confirmation_window *window){ GtkTreeIter iter; gboolean status; + char *homedir; 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); + gtk_tree_model_get(GTK_TREE_MODEL(window->list),&iter,0,&status,2,&homedir,-1); + gtk_list_store_set(window->list,&iter,0,!status,4,!status&&!yon_char_is_empty(homedir),-1); } @@ -597,6 +610,9 @@ void yon_delete_confirmation_save(GtkWidget *self, dictionary *dict){ gtk_list_store_remove(widgets->UsersList,&iter); yon_config_remove_by_key(USERADD(name)); yon_config_remove_by_key(USERSHADOW(name)); + yon_config_register(USERADD_SYNC(name),USERADD_SYNC_command(name),""); + yon_config_remove_by_key(USERADD_SYNC(name)); + yon_config_remove_by_key(USERSHADOW_SYNC(name)); gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->UsersList),&iter); if (status){ if (yon_char_parsed_check_exist(main_config.remove_homes,main_config.homes_size,name)==-1){ @@ -630,68 +646,6 @@ void yon_delete_confirmation_save(GtkWidget *self, dictionary *dict){ on_subwindow_close(self); } -void yon_group_delete_confirmation_save(GtkWidget *self, dictionary *dict){ - GtkTreeIter iter,itar; - main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); - yon_confirmation_window *window = yon_dictionary_get_data(dict->first->next,yon_confirmation_window*); - int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->GroupsList),&iter); - for (;valid;valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->GroupsList),&iter)){ - char *name; - gtk_tree_model_get(GTK_TREE_MODEL(widgets->GroupsList),&iter,1,&name,-1); - int valid2 = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(window->list),&itar); - for (;valid2;valid2 = gtk_tree_model_iter_next(GTK_TREE_MODEL(window->list),&itar)){ - char *name_check; - int delete; - gtk_tree_model_get(GTK_TREE_MODEL(window->list),&itar,0,&delete,1,&name_check,-1); - if (!strcmp(name,name_check)&&delete){ - gtk_list_store_remove(widgets->GroupsList,&iter); - yon_config_remove_by_key(GROUPADD(name)); - gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->GroupsList),&iter); - } - } - } - char *name; - if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->GroupsList),&iter)){ - gtk_tree_model_get(GTK_TREE_MODEL(widgets->GroupsList),&iter,1,&name,-1); - int valid2 = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(window->list),&itar); - for (;valid2;valid2 = gtk_tree_model_iter_next(GTK_TREE_MODEL(window->list),&itar)){ - char *name_check; - int status,delete; - gtk_tree_model_get(GTK_TREE_MODEL(window->list),&itar,0,&delete,1,&name_check,3,&status,-1); - if (!strcmp(name,name_check)&&delete){ - gtk_list_store_remove(widgets->GroupsList,&iter); - yon_config_remove_by_key(GROUPADD(name)); - gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->GroupsList),&iter); - if (status){ - if (yon_char_parsed_check_exist(main_config.remove_homes,main_config.homes_size,name)==-1){ - yon_char_parsed_add_or_create_if_exists(main_config.remove_homes,&main_config.homes_size,name); - } - } - } - } - } - on_subwindow_close(self); -} - -int yon_check_password_blocked(char *password){ - if (!yon_char_is_empty(password)){ - if (!strcmp(password,"!*")){ - memset(password,0,strlen(password)); - return 1; - } else if (password[0]=='!'&&password[1]=='*'){ - char *copy = yon_char_new(password); - memcpy(copy,password+2,strlen(password+2)); - memset(password,0,strlen(password)); - memcpy(password,copy,strlen(copy)); - free(copy); - return 1; - } else if (password[0]=='!'||password[0]=='*'){ - free(yon_char_divide(password,0)); - return 1; - } - } - return 0; -} yon_confirmation_window *yon_delete_confirmation_new(){ yon_confirmation_window *window = malloc(sizeof(yon_confirmation_window)); @@ -716,17 +670,46 @@ yon_confirmation_window *yon_delete_confirmation_new(){ } void yon_system_delete_confirmation_open(main_window *widgets){ - yon_confirmation_window *window = yon_delete_confirmation_new(); - gtk_window_set_transient_for(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window)); - GtkTreeIter iter; - 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->AcceptButton),"clicked",G_CALLBACK(yon_delete_confirmation_save),dict); - GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore1); - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemTree)),&model,&iter)){ - // gtk_tree_model_get(model,&iter,1,,2,,) - } + yon_confirmation_window *dialog = yon_delete_confirmation_new(); + dictionary *dact = NULL; + yon_dictionary_add_or_create_if_exists_with_data(dact,"widgets",widgets); + yon_dictionary_add_or_create_if_exists_with_data(dact,"dialog",dialog); + if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==2){ + g_signal_connect(G_OBJECT(dialog->AcceptButton),"clicked",G_CALLBACK(on_delete_system_user),dact); + gtk_label_set_text(GTK_LABEL(dialog->TitleLabel),DELETE_CONFIRMATION_CONFIRM_LABEL); + gtk_label_set_text(GTK_LABEL(dialog->HatLabel),DELETE_CONFIRMATION_TITLE_LABEL); + yon_gtk_window_setup(GTK_WINDOW(dialog->Window),GTK_WINDOW(widgets->Window),DELETE_CONFIRMATION_TITLE_LABEL,icon_path,"system-user-deletion-window"); + GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->SystemTree)); + GtkTreeIter iter; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemTree)),&model,&iter)){ + char *name,*username,*homedir=NULL; + gtk_tree_model_get(model,&iter,2,&name,3,&username,6,&homedir,-1); + gtk_list_store_append(dialog->list,&iter); + gtk_list_store_set(dialog->list,&iter,0,1,1,name,2,homedir,4,!yon_char_is_empty(homedir),5,username,-1); + gtk_widget_show(dialog->Window); + } + + } else { + g_signal_connect(G_OBJECT(dialog->AcceptButton),"clicked",G_CALLBACK(on_delete_system_group),dact); + gtk_label_set_text(GTK_LABEL(dialog->TitleLabel),DELETE_GROUP_CONFIRMATION_CONFIRM_LABEL); + gtk_label_set_text(GTK_LABEL(dialog->HatLabel),DELETE_GROUP_CONFIRMATION_TITLE_LABEL); + yon_gtk_window_setup(GTK_WINDOW(dialog->Window),GTK_WINDOW(widgets->Window),DELETE_GROUP_CONFIRMATION_TITLE_LABEL,icon_path,"system-group-deletion-window"); + GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->SystemGroupsTree)); + GtkTreeIter iter; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemGroupsTree)),&model,&iter)){ + g_signal_connect(G_OBJECT(dialog->AcceptButton),"clicked",G_CALLBACK(on_delete_system_group),dialog); + char *name; + gtk_tree_view_column_set_title(dialog->UserCell,GROUP_LABEL); + gtk_tree_view_column_set_visible(gtk_tree_view_get_column(GTK_TREE_VIEW(dialog->DeletionTree),2),0); + gtk_tree_view_column_set_visible(gtk_tree_view_get_column(GTK_TREE_VIEW(dialog->DeletionTree),3),0); + gtk_tree_view_column_set_visible(gtk_tree_view_get_column(GTK_TREE_VIEW(dialog->DeletionTree),4),0); + + gtk_tree_model_get(model,&iter,1,&name,-1); + gtk_list_store_append(dialog->list,&iter); + gtk_list_store_set(dialog->list,&iter,0,1,1,name,-1); + gtk_widget_show(dialog->Window); + } + } } void yon_delete_confirmation_open(main_window *widgets){ @@ -763,7 +746,7 @@ void yon_delete_confirmation_open(main_window *widgets){ int status=0; if (homedir) status=1; gtk_list_store_append(window->list,&itar); - gtk_list_store_set(window->list,&itar,0,yon_char_parsed_check_exist(chosen,chosen_size,name)>-1?1:0,1,name,2,homedir,3,0,4,status,5,username,-1); + gtk_list_store_set(window->list,&itar,0,yon_char_parsed_check_exist(chosen,chosen_size,name)>-1?1:0,1,name,2,homedir,3,0,4,yon_char_parsed_check_exist(chosen,chosen_size,name)>-1&&status?1:0,5,username,-1); free(name); free(username); free(parameters); @@ -772,41 +755,6 @@ void yon_delete_confirmation_open(main_window *widgets){ gtk_widget_show(window->Window); } -void yon_group_delete_confirmation_open(main_window *widgets){ - yon_confirmation_window *window = yon_delete_confirmation_new(); - gtk_window_set_transient_for(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window)); - GtkTreeIter iter,itar; - dictionary *dict = NULL; - gtk_label_set_text(GTK_LABEL(window->TitleLabel),DELETE_GROUP_CONFIRMATION_CONFIRM_LABEL); - gtk_tree_view_column_set_title(window->UserCell,GROUP_LABEL); - gtk_label_set_text(GTK_LABEL(window->HatLabel),DELETE_GROUP_CONFIRMATION_TITLE_LABEL); - gtk_tree_view_column_set_visible(gtk_tree_view_get_column(GTK_TREE_VIEW(window->DeletionTree),2),0); - gtk_tree_view_column_set_visible(gtk_tree_view_get_column(GTK_TREE_VIEW(window->DeletionTree),3),0); - gtk_tree_view_column_set_visible(gtk_tree_view_get_column(GTK_TREE_VIEW(window->DeletionTree),4),0); - 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->AcceptButton),"clicked",G_CALLBACK(yon_group_delete_confirmation_save),dict); - GtkTreeModel *model = GTK_TREE_MODEL(widgets->GroupsList); - GList *list = gtk_tree_selection_get_selected_rows(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->GroupsTree)),&model); - int chosen_size=0; - config_str chosen = NULL; - for (guint i=0;iGroupsList),&iter); - for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->GroupsList),&iter)){ - char *name; - gtk_tree_model_get(GTK_TREE_MODEL(widgets->GroupsList),&iter,1,&name,-1); - gtk_list_store_append(window->list,&itar); - gtk_list_store_set(window->list,&itar,0,yon_char_parsed_check_exist(chosen,chosen_size,name)>-1?1:0,1,name,-1); - free(name); - } - gtk_widget_show(window->Window); -} - yon_savasettings_window *yon_saving_settings_new(){ GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_ubl_settings_usergroups_savesettings); yon_savasettings_window *window = malloc(sizeof(yon_savasettings_window)); @@ -851,19 +799,24 @@ void on_filechooser_open(GtkWidget *, GtkEntry *output_target){ 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); + struct target_struct *output = yon_dictionary_get_data(dict->first->next,struct target_struct *); + if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->DefaultCheck))){ + 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->target,name); + free(name); + } + } else { + gtk_entry_set_text(output->target,""); + gtk_toggle_button_set_active(output->defaut_toggle,1); } on_subwindow_close(self); } -void on_groups_clicked(GtkWidget *, GtkEntry *output_target){ +void on_groups_clicked(GtkWidget *, struct target_struct *output_target){ ubl_settings_usergroups_group_window *window = yon_ubl_settings_usergroups_group_new(0); gtk_window_set_title(GTK_WINDOW(window->GroupsWindow),MAIN_GROUP_TITLE_LABEL); gtk_label_set_text(GTK_LABEL(window->HeaderLabel),MAIN_GROUP_TITLE_LABEL); @@ -889,7 +842,7 @@ void on_groups_clicked(GtkWidget *, GtkEntry *output_target){ gtk_tree_view_column_set_title(gtk_tree_view_get_column(GTK_TREE_VIEW(window->GroupsTree),1),GID_LABEL); 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); - const char *current_group=gtk_entry_get_text(output_target); + const char *current_group=gtk_entry_get_text(output_target->target); size_t digits=0; for (guint k=0;kfirst,ubl_settings_usergroups_group_window*); GtkEntry *output = yon_dictionary_get_data(dict->first->next,GtkEntry*); + if (!gtk_widget_get_visible(window->DefaultCheck)||!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->DefaultCheck))){ GtkTreeIter iter; int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(window->list),&iter); char *full_groups=""; @@ -948,12 +902,28 @@ void on_groups_multiple_save(GtkWidget *self, dictionary *dict){ full_groups=extend_groups; } } + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->AddNewCheck))){ + char *custom_groups = (char*)gtk_entry_get_text(GTK_ENTRY(window->AddNewEntry)); + if (!yon_char_is_empty(custom_groups)){ + char *temp = yon_char_unite(full_groups,",",custom_groups,NULL); + if (!yon_char_is_empty(full_groups)) free(full_groups); + full_groups=temp; + } else { + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + yon_ubl_status_highlight_incorrect(window->AddNewEntry); + return; + } + } gtk_entry_set_text(output,full_groups); + } else { + gtk_entry_set_text(output,config(USERGROUPS_parameter)); + } on_subwindow_close(self); } void on_groups_multiple_clicked(GtkWidget *, GtkEntry *output_target){ ubl_settings_usergroups_group_window *window = yon_ubl_settings_usergroups_group_new(0); + gtk_widget_show(window->AddNewBox); gtk_tree_view_column_set_title(gtk_tree_view_get_column(GTK_TREE_VIEW(window->GroupsTree),1),GID_LABEL); gtk_window_set_title(GTK_WINDOW(window->GroupsWindow),ADDITIONAL_GROUPS_TITLE_LABEL); gtk_label_set_text(GTK_LABEL(window->HeaderLabel),ADDITIONAL_GROUPS_TITLE_LABEL); @@ -1000,285 +970,15 @@ void on_groups_multiple_clicked(GtkWidget *, GtkEntry *output_target){ } -void on_passwords_encrypt(){ - int pid = fork(); - if (!pid){ - exit(system(encrypt_passwords_command)); - } -} - -void on_password_change(GtkWidget *, dictionary *entry_dict){ - GtkEntry *output_target = yon_dictionary_get_data(entry_dict->first->next,GtkEntry*); - ubl_settings_usergroups_password_window *window = yon_ubl_settings_usergroups_password_new(); - dictionary *dict = NULL; - char *password = (char*)gtk_entry_get_text(output_target); - if (!yon_char_is_empty(password)){ - if (main_config.load_mode==0){ - password = yon_char_new(password); - if (!check_is_password_hash(password)){ - gtk_entry_set_text(GTK_ENTRY(window->PasswordHashEntry),password); - } else { - if (password[0]=='%'&&password[1]=='%'){ - free(yon_char_divide(password,1)); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->NoEncriptionCheck),1); - } - gtk_entry_set_text(GTK_ENTRY(window->PasswordEntry),password); - } - } - } - yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); - yon_dictionary_add_or_create_if_exists_with_data(dict,"target",output_target); - g_signal_connect(G_OBJECT(window->UserOkButton),"clicked",G_CALLBACK(on_password_accept),dict); - g_signal_connect(G_OBJECT(window->UserCancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); - gtk_window_set_transient_for(GTK_WINDOW(window->CreateGroupWindow),GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(output_target)))); - gtk_widget_show(window->CreateGroupWindow); - -} - -void on_additional_settings_clicked(GtkWidget *, GtkEntry *){ - 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 *, ubl_settings_usergroups_user_window *window){ gtk_popover_popup(GTK_POPOVER(window->CalendarPopup)); } // standard functions - - 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)){ - yon_config_register(DEFAULTUSER_parameter,DEFAULTUSER_parameter_command,yon_char_new((char*)default_user)); - } else { - 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)){ - yon_config_register(DEFAULTPASSWD_parameter,DEFAULTPASSWD_parameter_command,default_password); - } else { - 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)){ - yon_config_register(DEFAULTROOTPASSWD_parameter,DEFAULTROOTPASSWD_parameter_command,root_password); - } else { - yon_config_remove_by_key(DEFAULTROOTPASSWD_parameter); - } - int user_k_admin = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->DefaultUserAdministratorCheck)); - if (!yon_config_check_ignore(ADDADM_parameter)){ - if (user_k_admin){ - yon_config_register(ADDADM_parameter,ADDADM_parameter_command,"yes"); - } else { - yon_config_register(ADDADM_parameter,ADDADM_parameter_command,"no"); - } - } else { - char *user_k = config(ADDADM_parameter); - if (strcmp(user_k,user_k_admin?"yes":"no")){ - if (user_k_admin){ - yon_config_register(ADDADM_parameter,ADDADM_parameter_command,"yes"); - } else { - 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)){ - yon_config_register(HASHPASSWD_parameter,HASHPASSWD_parameter_command,hash); - } - }else { - 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){ - yon_config_remove_by_key(USERADD_SYNC_parameter); - } else { - if (boot_active){ - sync = "boot"; - } - if (shutdown_active){ - sync = yon_char_unite(sync,yon_char_is_empty(sync)?"":",","shutdown",NULL); - } - yon_config_register(USERADD_SYNC_parameter,USERADD_SYNC_parameter_command,sync); - } - } - - void on_hash_changed(GtkWidget *, ubl_settings_usergroups_additional_settings_window *window){ - - int hash_size=0; - config_str hash_algos = yon_file_open(hash_list_path,&hash_size); - for (int i=1;iPasswordHashCombo,parsed[1]); - yon_char_parsed_free(parsed,parsed_size); - } - yon_char_parsed_free(hash_algos,hash_size); - } - -// void on_users_boot_toggled(GtkToggleButton *self){ -// if (gtk_toggle_button_get_active(self)){ -// char *parameter = yon_config_get_by_key(USERADD_SYNC_parameter); -// if (!parameter){ -// yon_config_register(USERADD_SYNC_parameter,USERADD_SYNC_parameter_command,"boot"); -// } else { -// yon_config_append(USERADD_SYNC_parameter,"boot",","); -// } -// } else { -// yon_config_remove_element(USERADD_SYNC_parameter,"boot",","); -// } -// } - -// void on_users_shutdown_toggled(GtkToggleButton *self){ -// if (gtk_toggle_button_get_active(self)){ -// char *parameter = yon_config_get_by_key(USERADD_SYNC_parameter); -// if (!parameter){ -// yon_config_register(USERADD_SYNC_parameter,USERADD_SYNC_parameter_command,"shutdown"); -// } else { -// yon_config_append(USERADD_SYNC_parameter,"shutdown",","); -// } -// } else { -// yon_config_remove_element(USERADD_SYNC_parameter,"shutdown",","); -// } -// } - -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"); - - 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); - if (sync_parameters){ - if (strstr(sync_parameters,"boot")){ - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->UsersBootCheck),1); - } - if (strstr(sync_parameters,"shutdown")){ - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->UsersShutdownCheck),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); - } - - 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->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(); - 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 *, GtkEntry *target){ ubl_settings_usergroups_group_window *window = yon_ubl_settings_usergroups_group_new(1); + gtk_widget_hide(window->DefaultCheck); gtk_label_set_text(GTK_LABEL(window->HeaderLabel),GROUP_USERS_TITLE_LABEL); gtk_label_set_text(GTK_LABEL(window->HeaderLabel),GROUP_USERS_TITLE_LABEL); gtk_tree_view_column_set_title(gtk_tree_view_get_column(GTK_TREE_VIEW(window->GroupsTree),1),UID_LABEL); @@ -1326,178 +1026,16 @@ void on_user_choose(GtkWidget *, GtkEntry *target){ gtk_widget_show(window->GroupsWindow); } -void on_GID_update(GtkWidget *, ubl_settings_usergroups_group_creation_window *window){ - if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userUIDAutoCheck))){ - if (window->last_gid){ - gtk_entry_set_text(GTK_ENTRY(window->userUIDEntry),window->last_gid); - } else { - int config_size=0; - int final_size=0; - config_str config_groups = yon_config_get_all_by_key(GROUPADD_parameter,&config_size); - yon_char_parsed_prepend_strings(config_groups,config_size,":"); - config_str final = yon_char_parsed_merge(main_config.groups,main_config.groups_size,config_groups,config_size,&final_size); - long prev_busy=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->SystemGroupCheck))?0:main_config.MINGID; - - int minimum = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->SystemGroupCheck))?0:main_config.MINGID; - int maximum = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->SystemGroupCheck))?68000:main_config.MAXGID; - for (int i=0;i2&&minimumprev_busy){ - prev_busy=atol(parsed[2]); - } - } - yon_char_parsed_free(parsed, parsed_size); - } - gtk_entry_set_text(GTK_ENTRY(window->userUIDEntry),yon_char_from_long(prev_busy+1)); - } - } else { - gtk_entry_set_text(GTK_ENTRY(window->userUIDEntry),""); - } -} +void on_system_parameter_changed(GtkWidget *, ubl_settings_usergroups_group_creation_window *window){ -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 *admins = 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); - return; - } - - if (strcmp(gid,window->last_gid)){ - int config_size=0; - int final_size=0; - config_str config_users = yon_config_get_all_by_key(GROUPADD_SEARCH_macro,&config_size); - config_str final = yon_char_parsed_merge(main_config.groups,main_config.groups_size,config_users,config_size,&final_size); - if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->UnuniqueGIDCheck))){ - int found=0; - char *uid_string = (char*)gtk_entry_get_text(GTK_ENTRY(window->userUIDEntry)); - for (int i=0;i2&&!strcmp(parsed[2],uid_string)){ - if (yon_char_is_empty(window->last_gid)||(!yon_char_is_empty(window->last_gid)&&strcmp(parsed[2],window->last_gid))){ - found = yon_char_parsed_check_exist(config_users,config_size,final[i])>-1?1:2; - break; - } - } - if (parsed_size) yon_char_parsed_free(parsed,parsed_size); - } - if (found){ - yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),found==1?GID_ALREADY_EXIST_CONFIG_LABEL:GID_ALREADY_EXIST_SYSTEM_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - yon_ubl_status_highlight_incorrect(window->userUIDEntry); - return; - } - } - } - } - - group_name = (char*)gtk_entry_get_text(GTK_ENTRY(window->userLoginEntry)); - if (group_name[0]>'0'&&group_name[0]<'9'){ - yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),GROUP_BEGINS_WITH_DIGIT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - yon_ubl_status_highlight_incorrect(window->userLoginEntry); - return; - } - 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); - return; - } - - 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); - return; - } - - admins = (char*)gtk_entry_get_text(GTK_ENTRY(window->AdminGroupsEntry)); 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=""; - - int shutdown_sync_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->GroupaddShutdownCheck)); - if (shutdown_sync_active){ - char *final_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",GROUPADD_SYNC(group_name)); - yon_config_register(GROUPADD_SYNC(group_name),final_command,"shutdown"); - } else { - yon_config_remove_by_key(GROUPADD_SYNC(group_name)); - } - - - int password_active = gtk_combo_box_get_active(GTK_COMBO_BOX(window->PasswordCombo)); - if (password_active > 1){ - 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); - return; - } - } else { - password=""; - } - 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(admins,"x"), - ":",yon_char_return_if_exist(password,"x"), - NULL); - char *final_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",GROUPADD_SYNC(group_name)); - yon_config_register(GROUPADD(group_name),final_command,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->GroupsTree)),&model,&iter)) - gtk_list_store_append(widgets->GroupsList,&iter); - char *passwor = (char*)gtk_entry_get_text(GTK_ENTRY(window->PasswordEntry)); - char *password_status=NULL; - if (password_active==0) - password_status=DEFAULT_USER_LABEL; - else if (password_active==1) - password_status = NO_PASSWORD_LABEL; - else if (password_active == 2){ - if (check_is_password_hash(passwor)){ - password_status=UNENCRYPTED_LABEL; - } else { - password_status=UNENCRYPTED_LABEL; - } - } - gtk_list_store_set(widgets->GroupsList,&iter,0,strcmp(gid,"x")?gid:"",1,group_name,2,group_users,3,yon_char_append(non_unique,gsystem),4,password_status,-1); - on_subwindow_close(self); -} - -void on_system_parameter_changed(GtkWidget *, ubl_settings_usergroups_group_creation_window *window){ - - char *non_unique = NULL; - char *gsystem = NULL; - - 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"; @@ -1511,57 +1049,6 @@ void on_system_parameter_changed(GtkWidget *, ubl_settings_usergroups_group_crea gtk_entry_set_text(GTK_ENTRY(window->groupExtraOptionsEntry),final_str); free(final_str); } - -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"); - window->userTitleNameLabel=yon_gtk_builder_get_widget(builder,"userTitleNameLabel"); - window->AdminGroupsEntry=yon_gtk_builder_get_widget(builder,"AdminGroupsEntry"); - window->AdminGroupsButton=yon_gtk_builder_get_widget(builder,"AdminGroupsButton"); - window->GroupaddShutdownCheck=yon_gtk_builder_get_widget(builder,"GroupaddShutdownCheck"); - window->groupExtraOptionsEntry=yon_gtk_builder_get_widget(builder,"groupExtraOptionsEntry"); - window->last_gid=NULL; - - gtk_window_set_title(GTK_WINDOW(window->CreateGroupWindow),GROUPS_TITLE_LABEL); - - on_GID_update(NULL,window); - 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); - yon_window_config_custom_window_setup(GTK_WINDOW(window->CreateGroupWindow),"GroupAddWindow"); - 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); - g_signal_connect(G_OBJECT(window->AdminGroupsButton),"clicked",G_CALLBACK(on_user_choose),window->AdminGroupsEntry); - g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(on_GID_update),window); - g_signal_connect(G_OBJECT(window->SystemGroupCheck),"toggled",G_CALLBACK(on_GID_update),window); - g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(yon_gtk_toggle_button_set_inactive_from_toggle_button),window->SystemGroupCheck); - g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->SystemGroupCheck); - g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(yon_gtk_toggle_button_set_inactive_from_toggle_button_inversed),window->UnuniqueGIDCheck); - g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->UnuniqueGIDCheck); - g_signal_connect(G_OBJECT(window->UnuniqueGIDCheck),"toggled",G_CALLBACK(on_system_parameter_changed),window); - g_signal_connect(G_OBJECT(window->SystemGroupCheck),"toggled",G_CALLBACK(on_system_parameter_changed),window); - g_signal_connect(G_OBJECT(window->userUIDEntry),"insert-text",G_CALLBACK(yon_on_text_insert_only_digits),NULL); -return window; -} - void on_group_clicked(GtkCellRenderer *, char *path, ubl_settings_usergroups_group_window *window){ GtkTreeIter iter; gboolean status; @@ -1580,11 +1067,19 @@ ubl_settings_usergroups_group_window *yon_ubl_settings_usergroups_group_new(int window->HeaderLabel=yon_gtk_builder_get_widget(builder,"HeaderLabel"); window->StatusCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"StatusCell")); window->GroupColumn = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(builder,"GroupColumn")); + window->DefaultCheck=yon_gtk_builder_get_widget(builder,"DefaultCheck"); + window->AddNewCheck=yon_gtk_builder_get_widget(builder,"AddNewCheck"); + window->AddNewEntry=yon_gtk_builder_get_widget(builder,"AddNewEntry"); + window->AddNewBox=yon_gtk_builder_get_widget(builder,"AddNewBox"); + window->StatusBox=yon_gtk_builder_get_widget(builder,"StatusBox"); window->list = gtk_list_store_new(3,G_TYPE_BOOLEAN,G_TYPE_STRING,G_TYPE_INT); gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(window->list),2,GTK_SORT_ASCENDING); + yon_gtk_entry_block_symbols(GTK_ENTRY(window->AddNewEntry),";.'\"*%$#!-=+\\|/_@^&()№:?<>"); yon_window_config_custom_window_setup(GTK_WINDOW(window->GroupsWindow),"GroupWindow"); gtk_window_set_title(GTK_WINDOW(window->GroupsWindow),GROUPS_TITLE_LABEL); + g_signal_connect(G_OBJECT(window->AddNewCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->AddNewEntry); + g_signal_connect(G_OBJECT(window->DefaultCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->GroupsTree); g_signal_connect(G_OBJECT(window->StatusCell),"toggled",G_CALLBACK(on_group_clicked),window); GtkTreeIter iter; config_str current; @@ -1613,6 +1108,7 @@ return window; } void on_standard_groups_accept(GtkWidget *self, ubl_settings_usergroups_group_window *window){ + if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->DefaultCheck))){ GtkTreeIter iter; GtkTreeModel *model = GTK_TREE_MODEL(window->list); int valid = gtk_tree_model_get_iter_first(model,&iter); @@ -1629,11 +1125,17 @@ void on_standard_groups_accept(GtkWidget *self, ubl_settings_usergroups_group_wi } } yon_config_register(USERGROUPS_parameter,USERGROUPS_get_command,standard_groups); + } else { + yon_config_remove_by_key(USERGROUPS_parameter); + } on_subwindow_close(self); } void on_standard_groups_open(GtkWidget *, main_window *widgets){ ubl_settings_usergroups_group_window *window = yon_ubl_settings_usergroups_group_new(0); + if (yon_config_check_ignore(USERGROUPS_parameter)){ + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->DefaultCheck),1); + } gtk_window_set_title(GTK_WINDOW(window->GroupsWindow),DEFAULT_GROUPS_TITLE_LABEL); gtk_label_set_text(GTK_LABEL(window->HeaderLabel),DEFAULT_GROUPS_TITLE_LABEL); gtk_tree_view_column_set_title(gtk_tree_view_get_column(GTK_TREE_VIEW(window->GroupsTree),1),GID_LABEL); @@ -1678,121 +1180,51 @@ void on_standard_groups_open(GtkWidget *, main_window *widgets){ gtk_widget_show(window->GroupsWindow); } -void on_password_show_hide(GtkEntry *self, GtkEntryIconPosition icon_pos, GdkEvent*){ - 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 yon_system_load(main_window *window){ + gtk_list_store_clear(window->liststore1); + gtk_list_store_clear(window->liststore2); -void on_password_changed(GtkEntry *, 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",PASSWORD_MISMATCH_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); - } else if (strlen(self_text)StatusBox),"password_short",PASSWORD_SHORT_LABEL(yon_char_from_int(main_config.password_min_length)),BACKGROUND_IMAGE_FAIL_TYPE); - } else { - yon_ubl_status_box_despawn_infinite(GTK_CONTAINER(window->StatusBox)); + if (main_config.groups_size>0){ + yon_char_parsed_free(main_config.groups,main_config.groups_size); + main_config.groups = yon_file_open(groups_path,&main_config.groups_size); } -} - -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*); - char *password = (char*)gtk_entry_get_text(GTK_ENTRY(window->PasswordEntry)); - if (yon_char_is_empty(password)){ - char *pasted_hash = (char*)gtk_entry_get_text(GTK_ENTRY(window->PasswordHashEntry)); - if (!yon_char_is_empty(pasted_hash)){ - gtk_entry_set_text(entry,pasted_hash); - } else { - yon_ubl_status_highlight_incorrect(window->PasswordEntry); - yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),PASSWORD_SHORT_LABEL(yon_char_from_int(main_config.password_min_length)),5,BACKGROUND_IMAGE_FAIL_TYPE); - return; - } - } else { - - if (yon_char_is_empty(password)){ - yon_ubl_status_box_spawn_infinite(GTK_CONTAINER(window->StatusBox),"password_empty",EMPTY_IMPORTANT_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); - return; - } else if (password[0]=='%'&&password[1]=='%'){ - yon_ubl_status_box_spawn_infinite(GTK_CONTAINER(window->StatusBox),"password_wrong",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)){ - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->NoEncriptionCheck))){ - char *pasw=yon_char_append("%%",password); - password=pasw; - } - gtk_entry_set_text(GTK_ENTRY(entry),password); - } else { - yon_ubl_status_box_spawn_infinite(GTK_CONTAINER(window->StatusBox),"password_mismatch",PASSWORD_MISMATCH_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); - return; - } + if (main_config.users_size>0){ + yon_char_parsed_free(main_config.users,main_config.users_size); + main_config.users = yon_file_open(users_path,&main_config.users_size); + } + if (main_config.shadow_size>0){ + yon_char_parsed_free(main_config.shadow,main_config.shadow_size); + main_config.shadow = yon_file_open(shadow_path,&main_config.shadow_size); + } + if (main_config.group_shadow_size>0){ + yon_char_parsed_free(main_config.group_shadow,main_config.group_shadow_size); + main_config.group_shadow = yon_file_open(group_shadow_path,&main_config.group_shadow_size); } - 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->NoEncriptionCheck=yon_gtk_builder_get_widget(builder,"NoEncriptionCheck"); - - window->UserCancelButton=yon_gtk_builder_get_widget(builder,"UserCancelButton"); - window->UserOkButton=yon_gtk_builder_get_widget(builder,"UserOkButton"); - - yon_window_config_custom_window_setup(GTK_WINDOW(window->CreateGroupWindow),"PasswordWindow"); - 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),PASSWORD_TITLE_LABEL); - -return window; -} -void yon_system_load(main_window *window){ - gtk_list_store_clear(window->liststore1); - gtk_list_store_clear(window->liststore2); GtkTreeIter iter; for (int i=0;iliststore2,&iter); gtk_list_store_set(window->liststore2,&iter,0,atol(parsed[2]),1,parsed[0],2,parsed[3],-1); + } } 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->SystemTree = yon_gtk_builder_get_widget(builder,"SystemTree"); - window->show_all=0; - yon_window_config_custom_window_setup(GTK_WINDOW(window->MonitorWindow),"InspectorWindow"); - yon_gtk_tree_view_minimal_fixed_size_set_full(GTK_TREE_VIEW(window->SystemTree)); - GList *list = gtk_tree_view_get_columns(GTK_TREE_VIEW(window->SystemTree)); - for (guint i=0;iMonitorWindow),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); -return window; -} - -void on_settings_usergroups_system_open(GtkWidget *, main_window *){ - ubl_settings_usergroups_system_window *window = yon_ubl_settings_usergroups_system_new(); - gtk_widget_show(window->MonitorWindow); -} - - - - - - - -void on_user_shell_changed(GtkWidget *, ubl_settings_usergroups_user_window *window){ - const char *current = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->userShellCombo)); - if (!yon_char_is_empty(current)&&!strcmp(current,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_UID_update(GtkWidget *, ubl_settings_usergroups_user_window *window){ - if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userUIDAutoCheck))){ - if (window->last_uid){ - gtk_entry_set_text(GTK_ENTRY(window->userUIDEntry),window->last_uid); - } else { - int config_size=0; - int final_size=0; - config_str config_users = yon_config_get_all_by_key(USERADD_SEARCH_macro,&config_size); - yon_char_parsed_prepend_strings(config_users,config_size,":"); - config_str final = yon_char_parsed_merge(main_config.users,main_config.users_size,config_users,config_size,&final_size); - long prev_busy=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userCreateSystemCheck))?0:main_config.MINGID; - for (int i=0;iuserCreateUnuniqueCheck))?0:main_config.MINGID; - int maximum = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userCreateUnuniqueCheck))?68000:main_config.MAXGID; - for (int i=0;iprev_busy){ - prev_busy=atol(parsed[2]); - } - } - } - yon_char_parsed_free(parsed, parsed_size); - } - gtk_entry_set_text(GTK_ENTRY(window->userUIDEntry),yon_char_from_long(prev_busy+1)); - } - } else { - gtk_entry_set_text(GTK_ENTRY(window->userUIDEntry),""); - } -} - -void on_user_login_update(GtkWidget *, ubl_settings_usergroups_user_window *window){ - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userGroupsCheck))){ - gtk_entry_set_text(GTK_ENTRY(window->userGroupsEntry),gtk_entry_get_text(GTK_ENTRY(window->userLoginEntry))); - } else { - gtk_entry_set_text(GTK_ENTRY(window->userGroupsEntry),""); - } -} - -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; - int samba_sync = 0; - int samba_password_sync = 0; - int deactivate = 0; - 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=""; - } else { - int config_size=0; - int final_size=0; - config_str config_users = yon_config_get_all_by_key(USERADD_SEARCH_macro,&config_size); - yon_char_parsed_prepend_strings(config_users,config_size,":"); - config_str final = yon_char_parsed_merge(main_config.users,main_config.users_size,config_users,config_size,&final_size); - - uid_string = (char*)gtk_entry_get_text(GTK_ENTRY(window->userUIDEntry)); - if (strcmp(uid_string,window->last_uid)){ - if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userCreateUnuniqueCheck))){ - int found=0; - for (int i=0;i2&&!strcmp(parsed[2],uid_string)){ - if (yon_char_is_empty(window->last_uid)||(!yon_char_is_empty(window->last_uid)&&strcmp(parsed[2],window->last_uid))){ - found = yon_char_parsed_check_exist(config_users,config_size,final[i])>-1?1:2; - break; - } - } - - if (parsed_size) yon_char_parsed_free(parsed,parsed_size); - } - if (found){ - yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),found==1?UID_ALREADY_EXIST_CONFIG_LABEL:UID_ALREADY_EXIST_SYSTEM_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - yon_ubl_status_highlight_incorrect(window->userUIDEntry); - return; - } - } - } - - 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; - } - } - - int do_not_check_actve = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userDontCheckCheck)); - if (do_not_check_actve) - do_not_check = "--badnames"; - - login = (char*)gtk_entry_get_text(GTK_ENTRY(window->userLoginEntry)); - if (login[0]>'0'&&login[0]<'9'&&!do_not_check_actve){ - yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),USER_BEGINS_WITH_DIGIT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - yon_ubl_status_highlight_incorrect(window->userLoginEntry); - return; - } - 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 if (password_active==1){ - password = "!*"; - } else { - password=""; - } - - char *old_password = NULL; - if (window->old_password){ - old_password = window->old_password; - yon_check_password_blocked(old_password); - } - if (!old_password||(old_password&&strcmp(old_password,password))){ - time_t t = time(NULL); - struct tm tm = *localtime(&t); - char *month = yon_char_from_int(tm.tm_mon+1); - if (strlen(month)==1){ - month=yon_char_append("0",month); - } - char *day = yon_char_from_int(tm.tm_mday); - if (strlen(day)<2){ - day=yon_char_append("0",day); - } - password_changed_date = yon_char_unite(yon_char_from_int(1900+tm.tm_year),"-",month,"-",day,NULL); - } else { - password_changed_date = (char*)gtk_entry_get_text(GTK_ENTRY(window->userPasswordChangedEntry)); - } - - deactivate = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userDeactivatedCheck)); - if (deactivate){ - if (strlen(password)>1&&password[0]=='%'&&password[1]=='%'){ - char *temp = yon_char_replace(password,"%%","!!"); - password = yon_char_replace(temp,"!!","%%!"); - } else { - password = yon_char_append("!",password); - } - } - - username = (char*)gtk_entry_get_text(GTK_ENTRY(window->userUserNameEntry)); - if (yon_char_is_empty(username)){ - username=""; - } - - 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)); - } else { - main_group = ""; - } - - additional_groups = (char*)gtk_entry_get_text(GTK_ENTRY(window->userAdditionalGroupsEntry)); - char *default_groups = yon_config_get_by_key(USERGROUPS_parameter); - if (!yon_char_is_empty(default_groups)&&!strcmp(default_groups,additional_groups)){ - additional_groups=""; - } - 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; - - password_expiration_date = (char*)gtk_entry_get_text(GTK_ENTRY(window->userPasswordExpirationEntry)); - if (yon_char_is_empty(password_expiration_date)){ - password_expiration_date="-1"; - } - - long warning_days_active = gtk_spin_button_get_value(GTK_SPIN_BUTTON(window->userWarningSpin)); - if (warning_days_active>0) - warning_days = yon_char_from_long(warning_days_active); - - 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 user_shell_active = gtk_combo_box_get_active(GTK_COMBO_BOX(window->userShellCombo)); - if (user_shell_active>0){ - char *shell_string = (char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->userShellCombo)); - if (strcmp(shell_string,SET_LABEL)){ - user_shell = yon_char_unite("--shell ",shell_string," ",NULL); - } else { - user_shell = yon_char_unite("--shell ",(char*)gtk_entry_get_text(GTK_ENTRY(window->userShellEntry)),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 if (user_home_active==1){ - user_home="--no-create-home"; - } 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"; - - samba_sync = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userSyncSAMBACheck)); - samba_password_sync = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userSyncSAMBAPasswordCheck)); - if (samba_sync){ - if (yon_samba_sync_get(login)==2) - yon_samba_sync_remove(login); - yon_samba_sync_add(login,NULL); - } else if (samba_password_sync){ - if (yon_samba_sync_get(login)==1) - yon_samba_sync_remove(login); - yon_samba_sync_add(login,password); - } else { - yon_samba_sync_remove(login); - } - - extra_options=(char*)gtk_entry_get_text(GTK_ENTRY(window->userExtraOptionsEntry)); - - int force_at_next_login_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userForceChangeCheck)); - if (force_at_next_login_active){ - password_changed_date = "0"; - } - - 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(extra_options,""), - ":",yon_char_return_if_exist(password,""), - NULL); - - char *final_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",USERADD(login)); - yon_config_register(USERADD(login),final_command,final_user); - if (!yon_char_is_empty(window->old_username)&&strcmp(window->old_username,login)){ - yon_config_remove_by_key(USERADD(window->old_username)); - } - final_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",USERSHADOW(login)); - yon_config_register(USERSHADOW(login),final_command,shadow_string); - if (!yon_char_is_empty(window->old_username)&&strcmp(window->old_username,login)){ - yon_config_remove_by_key(USERSHADOW(window->old_username)); - } - int home_delete = yon_char_parsed_check_exist(main_config.remove_homes,main_config.homes_size,login); - if (home_delete>-1){ - yon_char_parsed_rip(main_config.remove_homes,&main_config.homes_size,home_delete); - } - - if (!yon_char_is_empty(useradd_sync_string)){ - final_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",USERADD_SYNC(login)); - yon_config_register(USERADD_SYNC(login),final_command,useradd_sync_string); - if (!yon_char_is_empty(window->old_username)&&strcmp(window->old_username,login)){ - yon_config_remove_by_key(USERADD_SYNC(window->old_username)); - } - } else { - yon_config_remove_by_key(USERADD_SYNC(window->old_username)); - } - - if (!yon_char_is_empty(usershadow_sync_string)){ - final_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",USERSHADOW_SYNC(login)); - yon_config_register(USERSHADOW_SYNC(login),final_command,usershadow_sync_string); - if (!yon_char_is_empty(window->old_username)&&strcmp(window->old_username,login)){ - yon_config_remove_by_key(USERSHADOW_SYNC(window->old_username)); - } - } else { - yon_config_remove_by_key(USERSHADOW_SYNC(window->old_username)); - } - GtkTreeIter iter; - GtkTreeModel *model = GTK_TREE_MODEL(widgets->UsersList); - char *password_status=NULL; - if (password_active==0) password_status = DEFAULT_USER_LABEL; - else if (password_active==1) password_status = NO_PASSWORD_LABEL; - else if (password[0]=='%'&&password[1]=='%') password_status = UNENCRYPTED_LABEL; - else password_status = ENCRYPTED_LABEL; - 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, - 0,deactivate, - 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,login), - 5,yon_char_return_if_exist(additional_groups,yon_config_get_by_key(USERGROUPS_parameter)), - 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,password_status, - -1); - on_subwindow_close(self); -} - void on_toggle_button_set_active_from_combo_box(GtkComboBox *self,ubl_settings_usergroups_user_window *window){ char *passw = (char*)gtk_entry_get_text(GTK_ENTRY(window->userPasswordEntry)); if (gtk_combo_box_get_active(self)<=1||(passw[0]=='$')){ @@ -2303,21 +1325,6 @@ void on_toggle_button_set_active_from_combo_box(GtkComboBox *self,ubl_settings_u } } -void on_password_user_changed(GtkComboBox *,ubl_settings_usergroups_user_window *window){ - char *passw = (char*)gtk_entry_get_text(GTK_ENTRY(window->userPasswordEntry)); - if ((passw[0]=='$')){ - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->userSyncSAMBACheck),0); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->userSyncSAMBAPasswordCheck),0); - gtk_widget_set_sensitive(GTK_WIDGET(window->userSyncSAMBAPasswordCheck),0); - } else { - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->userSyncSAMBACheck),0); - gtk_widget_set_sensitive(GTK_WIDGET(window->userSyncSAMBACheck),1); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->userSyncSAMBAPasswordCheck),0); - gtk_widget_set_sensitive(GTK_WIDGET(window->userSyncSAMBAPasswordCheck),1); - - } -} - void on_toggle_button_set_active_from_toggle_button_inversed(GtkToggleButton *, ubl_settings_usergroups_user_window *window){ char *passw = (char*)gtk_entry_get_text(GTK_ENTRY(window->userPasswordEntry)); if ((passw[0]!='$')&>k_combo_box_get_active(GTK_COMBO_BOX(window->userPasswordCombo))>1){ @@ -2360,210 +1367,12 @@ void on_date_selected(GtkWidget *, ubl_settings_usergroups_user_window *window){ free(yr); } -void on_parameter_changed(GtkWidget *,ubl_settings_usergroups_user_window *window){ - char *user_shell=NULL; - char *user_home=NULL; - char *login=NULL; - char *create_system_user=NULL; - char *create_ununique=NULL; - char *do_not_check=NULL; - char *main_group=NULL; - char *no_user_group=NULL; - - int do_not_check_actve = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userDontCheckCheck)); - if (do_not_check_actve) - do_not_check = "--badnames"; - - login = (char*)gtk_entry_get_text(GTK_ENTRY(window->userLoginEntry)); - if (login[0]>'0'&&login[0]<'9'&&!do_not_check_actve){ - yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),USER_BEGINS_WITH_DIGIT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - yon_ubl_status_highlight_incorrect(window->userLoginEntry); - return; - } - 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 user_shell_active = gtk_combo_box_get_active(GTK_COMBO_BOX(window->userShellCombo)); - if (user_shell_active>0){ - user_shell = yon_char_unite("--shell ",!strcmp(gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->userShellCombo)),"Set")?(char*)gtk_entry_get_text(GTK_ENTRY(window->userShellEntry)):(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){ - char *path = (char*)gtk_entry_get_text(GTK_ENTRY(window->userHomeEntry)); - if (!yon_char_is_empty(path)) - user_home=yon_char_unite("--home-dir ",path,NULL); - else user_home = ""; - } else if (user_home_active==1){ - user_home="--no-create-home"; - } 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 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)){ - no_user_group="--no-user-group"; - } - } else { - main_group = ""; - } - char *final_string = user_home; - final_string = yon_char_unite(final_string,!yon_char_is_empty(final_string)?" ":"", - yon_char_return_if_exist(user_shell,""), - !yon_char_is_empty(user_shell)?" ":"", - yon_char_return_if_exist(create_system_user,""), - !yon_char_is_empty(create_system_user)?" ":"", - yon_char_return_if_exist(create_ununique,""), - !yon_char_is_empty(create_ununique)?" ":"", - yon_char_return_if_exist(do_not_check,""), - !yon_char_is_empty(do_not_check)?" ":"", - yon_char_return_if_exist(no_user_group,""), - NULL); - if (final_string&&strlen(final_string)){ - if (final_string[strlen(final_string)-1]==' ') final_string[strlen(final_string)-1]='\0'; - gtk_entry_set_text(GTK_ENTRY(window->userExtraOptionsEntry),final_string); - free(final_string); - } else { - gtk_entry_set_text(GTK_ENTRY(window->userExtraOptionsEntry),""); - } -} - void on_remove_expired(GtkWidget *, GtkEntryIconPosition icon_pos, GdkEvent *, GtkEntry *target){ if (icon_pos == GTK_ENTRY_ICON_SECONDARY){ gtk_entry_set_text(target,""); } } -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->userSyncSAMBAPasswordCheck=yon_gtk_builder_get_widget(builder,"userSyncSAMBAPasswordCheck"); - 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"); - window->userTitleNameLabel=yon_gtk_builder_get_widget(builder,"userTitleNameLabel"); - window->expiration_unix=NULL; - window->last_uid=NULL; - - time_t t = time(NULL); - struct tm tm = *localtime(&t); - gtk_calendar_select_day(GTK_CALENDAR(window->ExpirationCalendar),tm.tm_mday); - gtk_calendar_select_month(GTK_CALENDAR(window->ExpirationCalendar),tm.tm_mon,1900+tm.tm_year); - - on_UID_update(NULL,window); - int shell_size=0; - config_str shells = yon_file_open(shell_list_path,&shell_size); - for (int i=1;iuserShellCombo),parsed[0],parsed[0]); - yon_char_parsed_free(parsed,parsed_size); - } - } - gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->userShellCombo),"Set",SET_LABEL); - yon_char_parsed_free(shells,shell_size); - gtk_combo_box_set_active(GTK_COMBO_BOX(window->userShellCombo),0); - window->old_password=NULL; - window->old_username=NULL; - dictionary *entry_dict = NULL; - yon_window_config_custom_window_setup(GTK_WINDOW(window->CreateUserWindow),"UserWindow"); - 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); - // char *password = yon_config_get_by_key(USERADD((char*)gtk_entry_get_text(GTK_ENTRY(window->userLoginEntry)))); - 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); - g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(on_UID_update),window); - g_signal_connect(G_OBJECT(window->userCreateSystemCheck),"toggled",G_CALLBACK(on_UID_update),window); - g_signal_connect(G_OBJECT(window->userGroupsCheck),"toggled",G_CALLBACK(on_user_login_update),window); - g_signal_connect(G_OBJECT(window->userLoginEntry),"changed",G_CALLBACK(on_user_login_update),window); - g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->userCreateSystemCheck); - g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(yon_gtk_toggle_button_set_inactive_from_toggle_button),window->userCreateSystemCheck); - g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->userCreateUnuniqueCheck); - g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(yon_gtk_toggle_button_set_inactive_from_toggle_button_inversed),window->userCreateUnuniqueCheck); - g_signal_connect(G_OBJECT(window->userSyncSAMBACheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->userSyncSAMBAPasswordCheck); - g_signal_connect(G_OBJECT(window->userSyncSAMBAPasswordCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->userSyncSAMBACheck); - g_signal_connect(G_OBJECT(window->userSyncSAMBACheck),"toggled",G_CALLBACK(on_toggle_button_set_active_from_toggle_button_inversed),window); - g_signal_connect(G_OBJECT(window->userSyncSAMBAPasswordCheck),"toggled",G_CALLBACK(on_toggle_button_set_active_from_toggle_button_inversed),window); - g_signal_connect(G_OBJECT(window->userPasswordCombo),"changed",G_CALLBACK(on_toggle_button_set_active_from_combo_box),window); - g_signal_connect(G_OBJECT(window->userPasswordCombo),"changed",G_CALLBACK(on_toggle_button_set_active_from_combo_box),window); - g_signal_connect(G_OBJECT(window->userPasswordEntry),"changed",G_CALLBACK(on_password_user_changed),window); - g_signal_connect(G_OBJECT(window->userHomeEntry),"changed",G_CALLBACK(on_parameter_changed),window); - g_signal_connect(G_OBJECT(window->userHomeCombo),"changed",G_CALLBACK(on_parameter_changed),window); - g_signal_connect(G_OBJECT(window->userShellCombo),"changed",G_CALLBACK(on_parameter_changed),window); - g_signal_connect(G_OBJECT(window->userShellEntry),"changed",G_CALLBACK(on_parameter_changed),window); - g_signal_connect(G_OBJECT(window->userCreateSystemCheck),"toggled",G_CALLBACK(on_parameter_changed),window); - g_signal_connect(G_OBJECT(window->userCreateUnuniqueCheck),"toggled",G_CALLBACK(on_parameter_changed),window); - g_signal_connect(G_OBJECT(window->userDontCheckCheck),"toggled",G_CALLBACK(on_parameter_changed),window); - g_signal_connect(G_OBJECT(window->userGroupsCheck),"toggled",G_CALLBACK(on_parameter_changed),window); - g_signal_connect(G_OBJECT(window->userGroupsEntry),"changed",G_CALLBACK(on_parameter_changed),window); - g_signal_connect(G_OBJECT(window->userPasswordExpirationEntry),"icon-press",G_CALLBACK(on_remove_expired),window->userPasswordExpirationEntry); - g_signal_connect(G_OBJECT(window->userUIDEntry),"insert-text",G_CALLBACK(yon_on_text_insert_only_digits),NULL); -return window; -} void on_main_add(GtkWidget *, main_window *widgets){ if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ @@ -2612,6 +1421,14 @@ void on_main_edit(GtkWidget *, main_window *widgets){ 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)); + char *sync = config(USERADD_SYNC(name)); + if (!yon_char_is_empty(sync)){ + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->UseraddBootCheck),!!strstr(sync,"boot")); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->UseraddShutdownCheck),!!strstr(sync,"shutdown")); + } else { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->UseraddBootCheck),0); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->UseraddShutdownCheck),0); + } int parsed_size=0; if (parameter_string){ if (parameter_string[0]=='\"') yon_char_divide(parameter_string,0); @@ -2632,7 +1449,7 @@ void on_main_edit(GtkWidget *, main_window *widgets){ window->last_uid=yon_char_new(parameters[1]); } if (parsed_size>2){ - if (!strcmp(parameters[2],"x")) + if (!strcmp(parameters[2],"x")||!strcmp(parameters[2],"")) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->userGroupsCheck),1); else { gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->userGroupsCheck),0); @@ -2640,13 +1457,16 @@ void on_main_edit(GtkWidget *, main_window *widgets){ } } if (parsed_size>3){ - if (strcmp(parameters[3],"x")){ + if (!yon_char_is_empty(parameters[3])&&strcmp(parameters[3],"x")){ gtk_entry_set_text(GTK_ENTRY(window->userAdditionalGroupsEntry), parameters[3]); } else { char *default_groups = yon_config_get_by_key(USERGROUPS_parameter); gtk_entry_set_text(GTK_ENTRY(window->userAdditionalGroupsEntry), default_groups); } + } else { + char *default_groups = yon_config_get_by_key(USERGROUPS_parameter); + gtk_entry_set_text(GTK_ENTRY(window->userAdditionalGroupsEntry), default_groups); } if (parsed_size>4&&!yon_char_is_empty(parameters[4])&&strcmp(parameters[4],"")&&strcmp(parameters[4],"x")){ int params_size; @@ -2767,6 +1587,7 @@ void on_main_edit(GtkWidget *, main_window *widgets){ char *name; gtk_tree_model_get(model,&iter,1,&name,-1); char *config_string = yon_config_get_by_key(GROUPADD(name)); + char *sync_string = config(GROUPADD_SYNC(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'; @@ -2804,12 +1625,18 @@ void on_main_edit(GtkWidget *, main_window *widgets){ } } if (size>4){ - if (strcmp(parsed[4],"")&&strcmp(parsed[4],"x")){ - gtk_entry_set_text(GTK_ENTRY(window->PasswordEntry),parsed[4]); - gtk_combo_box_set_active(GTK_COMBO_BOX(window->PasswordCombo),2); - } else { - gtk_combo_box_set_active(GTK_COMBO_BOX(window->PasswordCombo),0); + if (!yon_char_is_empty(parsed[4])){ + if (!strcmp(parsed[4],"!*")||!strcmp(parsed[4],"!")||!strcmp(parsed[4],"*")){ + gtk_combo_box_set_active(GTK_COMBO_BOX(window->PasswordCombo),1); + gtk_entry_set_text(GTK_ENTRY(window->PasswordEntry),""); + } else if (strcmp(parsed[4],"x")){ + gtk_entry_set_text(GTK_ENTRY(window->PasswordEntry),parsed[4]); + gtk_combo_box_set_active(GTK_COMBO_BOX(window->PasswordCombo),2); + + } } + } else { + gtk_combo_box_set_active(GTK_COMBO_BOX(window->PasswordCombo),0); } char *sync = yon_config_get_by_key(GROUPADD_SYNC(name)); if (sync){ @@ -2818,7 +1645,11 @@ void on_main_edit(GtkWidget *, main_window *widgets){ } else { yon_ubl_status_box_render(LOADING_FAILED_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); } - + if (!yon_char_is_empty(sync_string)){ + if (!strcmp(sync_string,"shutdown")){ + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->GroupaddShutdownCheck),1); + } + } gtk_window_set_transient_for(GTK_WINDOW(window->CreateGroupWindow),GTK_WINDOW(widgets->Window)); gtk_widget_show(window->CreateGroupWindow); } @@ -2831,9 +1662,6 @@ void on_main_edit_activate(GtkWidget *self, GtkTreePath *, GtkTreeViewColumn *, } void on_main_delete(GtkWidget *, main_window *widgets){ - dialog_confirmation_data *data=malloc(sizeof(dialog_confirmation_data)); - data->function=NULL; - data->data=NULL; int active = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook)); switch(active){ case 0: @@ -2849,30 +1677,52 @@ void on_main_delete(GtkWidget *, main_window *widgets){ if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemTree)),&model,&iter)){ char *target; gtk_tree_model_get(model,&iter,2,&target,-1); - dialog_confirmation_data data; - int found = !!config(USERADD(target)); - if (found){ - data.action_text = SYSTEM_USER_CONFIG_REMOVE_CONFIRMATION_LABEL(target); - data.function=NULL; - data.data=NULL; + system_remove_confirmation_window *window = yon_system_remove_confirmation_window_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); + if (config(USERADD(target))){ + yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),DELETE_CONFIRMATION_TITLE_LABEL,icon_path,"user-deletion-window"); + gtk_label_set_markup(GTK_LABEL(window->HeaderLabel),DELETE_CONFIRMATION_TITLE_LABEL); + gtk_label_set_markup(GTK_LABEL(window->TitleLabel),SYSTEM_USER_CONFIG_REMOVE_CONFIRMATION_LABEL(target)); + g_signal_connect(G_OBJECT(window->ConfigAcceptButton),"clicked",G_CALLBACK(yon_remove_confirmation_window_accept_clicked),dict); + g_signal_connect(G_OBJECT(window->SystemAcceptButton),"clicked",G_CALLBACK(yon_remove_confirmation_window_accept_clicked),dict); } else { - data.action_text = SYSTEM_USER_SYSTEM_REMOVE_CONFIRMATION_LABEL(target); - data.function=NULL; - data.data=NULL; - - } - if (yon_confirmation_dialog_call(widgets->Window,&data)!=GTK_RESPONSE_ACCEPT){ - return; - } - if (found){ - yon_delete_confirmation_open(widgets); - } else { - yon_system_delete_confirmation_open(widgets); + gtk_label_set_markup(GTK_LABEL(window->HeaderLabel),DELETE_CONFIRMATION_TITLE_LABEL); + gtk_label_set_markup(GTK_LABEL(window->TitleLabel),SYSTEM_USER_SYSTEM_REMOVE_CONFIRMATION_LABEL(target)); + gtk_widget_show(window->AcceptButton); + gtk_widget_hide(window->ConfigAcceptButton); + gtk_widget_hide(window->SystemAcceptButton); + g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(yon_remove_confirmation_window_accept_clicked),dict); } + gtk_widget_show(window->Window); } }break; case 3:{ - + GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore2); + GtkTreeIter iter; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemGroupsTree)),&model,&iter)){ + char *target; + gtk_tree_model_get(model,&iter,1,&target,-1); + system_remove_confirmation_window *window = yon_system_remove_confirmation_window_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); + gtk_label_set_markup(GTK_LABEL(window->HeaderLabel),DELETE_GROUP_CONFIRMATION_TITLE_LABEL); + if (config(GROUPADD(target))){ + yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),DELETE_GROUP_CONFIRMATION_TITLE_LABEL,icon_path,"user-deletion-window"); + gtk_label_set_markup(GTK_LABEL(window->TitleLabel),SYSTEM_GROUP_CONFIG_REMOVE_CONFIRMATION_LABEL(target)); + g_signal_connect(G_OBJECT(window->ConfigAcceptButton),"clicked",G_CALLBACK(yon_remove_confirmation_window_accept_clicked),dict); + g_signal_connect(G_OBJECT(window->SystemAcceptButton),"clicked",G_CALLBACK(yon_remove_confirmation_window_accept_clicked),dict); + } else { + gtk_label_set_markup(GTK_LABEL(window->TitleLabel),SYSTEM_GROUP_SYSTEM_REMOVE_CONFIRMATION_LABEL(target)); + gtk_widget_show(window->AcceptButton); + gtk_widget_hide(window->ConfigAcceptButton); + gtk_widget_hide(window->SystemAcceptButton); + g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(yon_remove_confirmation_window_accept_clicked),dict); + } + gtk_widget_show(window->Window); + } }break; } } @@ -2887,103 +1737,6 @@ void on_config_update(GtkWidget *, main_window *widgets){ } -void on_user_sync_with_config(GtkWidget *,main_window *widgets){ - int active = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook)); - switch (active){ - case 2:{ - GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore1); - GtkTreeIter iter; - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemTree)),&model,&iter)){ - char *target; - gtk_tree_model_get(model,&iter,2,&target,-1); - dialog_confirmation_data data; - if (config(USERADD(target))){ - data.action_text = SYSTEM_USER_SYNC_CONFIRMATION_LABEL(target); - data.data=NULL; - data.function=NULL; - } else { - data.action_text = SYSTEM_USER_ADD_CONFIRMATION_LABEL(target); - data.data=NULL; - data.function=NULL; - } - if (yon_confirmation_dialog_call(widgets->Window,&data)!=GTK_RESPONSE_ACCEPT){ - return; - } - - char *user = yon_char_parsed_check_exist_begins_with(main_config.groups,main_config.groups_size,target); - char *shadow = yon_char_parsed_check_exist_begins_with(main_config.group_shadow,main_config.group_shadow_size,target); - yon_char_remove_last_symbol(user,'\n'); - yon_char_remove_last_symbol(shadow,'\n'); - int user_size=0; - int shadow_size=0; - config_str parsed = yon_char_parse(user,&user_size,":"); - config_str parsed_shadow = yon_char_parse(shadow,&shadow_size,":"); - - char *optionals = yon_char_unite(user_size>5? parsed[5]:"",user_size>5?" ":"",user_size>6?parsed[6]:"",NULL); - char *config_user = yon_char_unite(parsed[0],":", - user_size>4?parsed[4]:"",":", - user_size>2?parsed[2]:"",":", - user_size>3?parsed[3]:"",":", - !yon_char_is_empty(optionals)?optionals:"",":", - user_size>1&&strcmp(parsed[1],"x")?yon_char_return_if_exist(parsed[1],""):yon_char_return_if_exist(parsed_shadow[1],""),NULL); - char *config_shadow = yon_char_unite(yon_char_return_if_exist(parsed[2],""),":", - user_size>3?parsed[3]:"",":", - user_size>4?parsed[4]:"",":", - user_size>5?parsed[5]:"",":", - user_size>6?parsed[6]:"",":", - user_size>7?parsed[7]:"",":",NULL); - - if (!yon_char_is_empty(config_user)){ - char *user_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",USERADD(target)); - yon_config_register(USERADD(target),user_command,config_user); - } - if (!yon_char_is_empty(config_shadow)){ - char *shadow_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",USERSHADOW(target)); - yon_config_register(USERSHADOW(target),shadow_command,config_shadow); - } - yon_interface_update(widgets); - } - yon_interface_update((main_window*)widgets); - }break; - case 3:{ - GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore1); - GtkTreeIter iter; - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemGroupsTree)),&model,&iter)){ - - char *target; - gtk_tree_model_get(model,&iter,1,&target,-1); - dialog_confirmation_data data; - if (config(GROUPADD(target))){ - data.action_text = SYSTEM_GROUP_ADD_CONFIRMATION_LABEL(target); - data.data=NULL; - data.function=NULL; - } else { - data.action_text = SYSTEM_GROUP_SYNC_CONFIRMATION_LABEL(target); - data.data=NULL; - data.function=NULL; - } - if (yon_confirmation_dialog_call(widgets->Window,&data)!=GTK_RESPONSE_ACCEPT){ - return; - } - char *group = yon_char_parsed_check_exist_begins_with(main_config.groups,main_config.groups_size,target); - char *group_shadow = yon_char_parsed_check_exist_begins_with(main_config.group_shadow,main_config.group_shadow_size,target); - yon_char_remove_last_symbol(group,'\n'); - yon_char_remove_last_symbol(group_shadow,'\n'); - int group_size=0; - int group_shadow_size=0; - config_str parsed = yon_char_parse(group,&group_size,":"); - config_str parsed_shadow = yon_char_parse(group_shadow,&group_shadow_size,":"); - char *config_group = yon_char_unite(parsed[0],":",parsed[3],":",parsed[2],"::",parsed_shadow[2],":",strcmp(parsed[1],"x")?parsed[1]:parsed_shadow[1],NULL); - - if (!yon_char_is_empty(config_group)){ - char *group_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",GROUPADD(target)); - yon_config_register(GROUPADD(target),group_command,config_group); - yon_interface_update(widgets); - } - } - }break; - } -} int yon_element_chosen(GtkWidget *){ return (int)1; @@ -3073,20 +1826,45 @@ void config_init(){ void on_selection_changed(GtkWidget *, main_window *widgets){ GtkTreeIter iter; - if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ + int page = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook)); + if (page==0){ 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_widget_set_sensitive(widgets->EditButton,1); + gtk_widget_set_sensitive(widgets->DeleteButton,1); } else { gtk_widget_set_sensitive(widgets->EditButton,0); + gtk_widget_set_sensitive(widgets->DeleteButton,0); } - } else { + } else if (page==1){ GtkTreeModel *model = GTK_TREE_MODEL(widgets->GroupsList); if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->GroupsTree)),&model,&iter)){ gtk_widget_set_sensitive(widgets->EditButton,1); + gtk_widget_set_sensitive(widgets->DeleteButton,1); } else { gtk_widget_set_sensitive(widgets->EditButton,0); + gtk_widget_set_sensitive(widgets->DeleteButton,0); + } + } else if (page == 2){ + GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore1); + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemTree)),&model,&iter)){ + gtk_widget_set_sensitive(widgets->UserAddToConfigButton,1); + gtk_widget_set_sensitive(widgets->DeleteButton,1); + } else { + gtk_widget_set_sensitive(widgets->UserAddToConfigButton,0); + gtk_widget_set_sensitive(widgets->DeleteButton,0); } + + } else if (page == 3){ + GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore2); + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemGroupsTree)),&model,&iter)){ + gtk_widget_set_sensitive(widgets->UserAddToConfigButton,1); + gtk_widget_set_sensitive(widgets->DeleteButton,1); + } else { + gtk_widget_set_sensitive(widgets->UserAddToConfigButton,0); + gtk_widget_set_sensitive(widgets->DeleteButton,0); + } + } } @@ -3100,8 +1878,10 @@ void on_notebook_page_changed(GtkWidget *, GtkWidget *, int num, main_window *wi 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_widget_set_sensitive(widgets->EditButton,1); + gtk_widget_set_sensitive(widgets->DeleteButton,1); } else { gtk_widget_set_sensitive(widgets->EditButton,0); + gtk_widget_set_sensitive(widgets->DeleteButton,0); } } else if (num==1){ gtk_widget_show(widgets->AddButton); @@ -3111,13 +1891,36 @@ void on_notebook_page_changed(GtkWidget *, GtkWidget *, int num, main_window *wi GtkTreeModel *model = GTK_TREE_MODEL(widgets->GroupsList); if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->GroupsTree)),&model,&iter)){ gtk_widget_set_sensitive(widgets->EditButton,1); + gtk_widget_set_sensitive(widgets->DeleteButton,0); } else { gtk_widget_set_sensitive(widgets->EditButton,0); + gtk_widget_set_sensitive(widgets->DeleteButton,0); } - } else if (num==2||num==3){ + } else if (num==2){ gtk_widget_hide(widgets->AddButton); gtk_widget_hide(widgets->EditButton); gtk_widget_show(widgets->UserAddToConfigButton); + GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore1); + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemTree)),&model,&iter)){ + gtk_widget_set_sensitive(widgets->UserAddToConfigButton,1); + gtk_widget_set_sensitive(widgets->DeleteButton,1); + } else { + gtk_widget_set_sensitive(widgets->UserAddToConfigButton,0); + gtk_widget_set_sensitive(widgets->DeleteButton,0); + } + } else if (num==3){ + + gtk_widget_hide(widgets->AddButton); + gtk_widget_hide(widgets->EditButton); + gtk_widget_show(widgets->UserAddToConfigButton); + GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore2); + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemGroupsTree)),&model,&iter)){ + gtk_widget_set_sensitive(widgets->UserAddToConfigButton,1); + gtk_widget_set_sensitive(widgets->DeleteButton,1); + } else { + gtk_widget_set_sensitive(widgets->UserAddToConfigButton,0); + gtk_widget_set_sensitive(widgets->DeleteButton,0); + } } } @@ -3138,6 +1941,22 @@ gboolean on_menu_open(GtkWidget *self,GdkEventButton *event, rmb_menu_window *wi return 0; } +gboolean on_system_menu_open(GtkWidget *self,GdkEventButton *event, rmb_menu_window *window){ + if (event->button==3){ + GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(self)); + GtkTreeIter iter; + int chosen = gtk_tree_model_get_iter_first(model,&iter)&>k_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(self)),&model,&iter); + if (chosen){ + gtk_widget_set_sensitive(GTK_WIDGET(window->buttons->first->data),1); + gtk_widget_set_sensitive(GTK_WIDGET(window->buttons->first->next->data),1); + } else { + gtk_widget_set_sensitive(GTK_WIDGET(window->buttons->first->data),0); + gtk_widget_set_sensitive(GTK_WIDGET(window->buttons->first->next->data),0); + } + } + return 0; +} + /**yon_main_window_complete(main_window *widgets) * [EN] * @@ -3187,6 +2006,8 @@ main_window *yon_main_window_complete(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->UsersTree),"cursor-changed",G_CALLBACK(on_selection_changed),widgets); g_signal_connect(G_OBJECT(widgets->UsersTree),"row-activated",G_CALLBACK(on_main_edit_activate),widgets); g_signal_connect(G_OBJECT(widgets->GroupsTree),"cursor-changed",G_CALLBACK(on_selection_changed),widgets); + g_signal_connect(G_OBJECT(widgets->SystemTree),"cursor-changed",G_CALLBACK(on_selection_changed),widgets); + g_signal_connect(G_OBJECT(widgets->SystemGroupsTree),"cursor-changed",G_CALLBACK(on_selection_changed),widgets); g_signal_connect(G_OBJECT(widgets->GroupsTree),"row-activated",G_CALLBACK(on_main_edit_activate),widgets); g_signal_connect(G_OBJECT(widgets->MainNotebook),"switch-page",G_CALLBACK(on_notebook_page_changed),widgets); g_signal_connect(G_OBJECT(widgets->SaveGlobalMenuItem),"activate",G_CALLBACK(on_config_global_save),widgets); @@ -3196,11 +2017,15 @@ main_window *yon_main_window_complete(main_window *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); g_signal_connect(G_OBJECT(widgets->LoadCustomMenuItem),"activate",G_CALLBACK(on_config_custom_load),widgets); - widgets->UsersMenu = yon_rmb_menu_setup(widgets->UsersTree,(RmbCheck)yon_element_chosen,widgets->UsersTree,CREATE_NEW_LABEL,add_icon_name,G_CALLBACK(on_main_add),widgets,EDIT_LABEL,edit_icon_name,G_CALLBACK(on_main_edit),widgets, REMOVE_LABEL,delete_icon_name,G_CALLBACK(on_main_delete),widgets,NULL); - widgets->GroupsMenu = yon_rmb_menu_setup(widgets->GroupsTree,(RmbCheck)yon_element_chosen,widgets->GroupsTree,CREATE_NEW_LABEL,add_icon_name,G_CALLBACK(on_main_add),widgets,EDIT_LABEL,edit_icon_name,G_CALLBACK(on_main_edit),widgets,REMOVE_LABEL,delete_icon_name,G_CALLBACK(on_main_delete),widgets,NULL); + widgets->UsersMenu = yon_rmb_menu_setup(widgets->UsersTree,(RmbCheck)yon_element_chosen,widgets->UsersTree,CREATE_NEW_LABEL,add_icon_name,G_CALLBACK(on_main_add),widgets,EDIT_LABEL,edit_icon_name,G_CALLBACK(on_main_edit),widgets, REMOVE_LABEL,delete_icon_name,G_CALLBACK(on_main_delete),widgets,UPDATE_LABEL,update_icon_name,G_CALLBACK(on_config_update),widgets,NULL); + widgets->GroupsMenu = yon_rmb_menu_setup(widgets->GroupsTree,(RmbCheck)yon_element_chosen,widgets->GroupsTree,CREATE_NEW_LABEL,add_icon_name,G_CALLBACK(on_main_add),widgets,EDIT_LABEL,edit_icon_name,G_CALLBACK(on_main_edit),widgets,REMOVE_LABEL,delete_icon_name,G_CALLBACK(on_main_delete),widgets,UPDATE_LABEL,update_icon_name,G_CALLBACK(on_config_update),widgets,NULL); + widgets->SystemUsersMenu = yon_rmb_menu_setup(widgets->SystemTree,(RmbCheck)yon_element_chosen,widgets->GroupsTree,SYNC_TOOLTIP_LABEL,sync_icon_name,G_CALLBACK(on_user_sync_with_config),widgets,REMOVE_LABEL,delete_icon_name,G_CALLBACK(on_main_delete),widgets,UPDATE_LABEL,update_icon_name,G_CALLBACK(on_config_update),widgets,NULL); + widgets->SystemGroupsMenu = yon_rmb_menu_setup(widgets->SystemGroupsTree,(RmbCheck)yon_element_chosen,widgets->GroupsTree,SYNC_TOOLTIP_LABEL,sync_icon_name,G_CALLBACK(on_user_sync_with_config),widgets,REMOVE_LABEL,delete_icon_name,G_CALLBACK(on_main_delete),widgets,UPDATE_LABEL,update_icon_name,G_CALLBACK(on_config_update),widgets,NULL); g_signal_connect(G_OBJECT(widgets->UsersTree),"button-press-event",G_CALLBACK(on_menu_open),widgets->UsersMenu); g_signal_connect(G_OBJECT(widgets->GroupsTree),"button-press-event",G_CALLBACK(on_menu_open),widgets->GroupsMenu); + g_signal_connect(G_OBJECT(widgets->SystemTree),"button-press-event",G_CALLBACK(on_system_menu_open),widgets->UsersMenu); + g_signal_connect(G_OBJECT(widgets->SystemGroupsTree),"button-press-event",G_CALLBACK(on_system_menu_open),widgets->GroupsMenu); yon_system_load(widgets); // on_system_update(NULL,widgets); @@ -3213,31 +2038,39 @@ main_window *yon_main_window_complete(main_window *widgets){ gtk_widget_realize(GTK_WIDGET(widgets->GroupsTree)); GList *list = gtk_tree_view_get_columns(GTK_TREE_VIEW(widgets->UsersTree)); - gtk_tree_view_column_set_min_width(GTK_TREE_VIEW_COLUMN(g_list_nth_data(list,1)),50); - gtk_tree_view_column_set_min_width(GTK_TREE_VIEW_COLUMN(g_list_nth_data(list,2)),175); - gtk_tree_view_column_set_min_width(GTK_TREE_VIEW_COLUMN(g_list_nth_data(list,3)),175); for (guint i=0;iGroupsTree)); - gtk_tree_view_column_set_min_width(GTK_TREE_VIEW_COLUMN(g_list_nth_data(list,0)),50); - gtk_tree_view_column_set_min_width(GTK_TREE_VIEW_COLUMN(g_list_nth_data(list,1)),175); for (guint i=0;iSystemTree)); + for (guint i=0;iSystemGroupsTree)); + for (guint i=0;i #include #include @@ -30,10 +32,13 @@ #define glade_path_ubl_settings_usergroups_user "/com/ublinux/ui/ubl-settings-usergroups-user.glade" #define glade_path_ubl_settings_usergroups_savesettings "/com/ublinux/ui/ubl-settings-usergroups-savesettings.glade" #define glade_path_ubl_settings_usergroups_confirmation "/com/ublinux/ui/ubl-settings-usergroups-confirmation.glade" +#define glade_path_ubl_settings_usergroups_system_deletion_confirmation "/com/ublinux/ui/ubl-settings-usergroups-system-deletion-confirmation.glade" #define banner_path "/com/ublinux/images/ubl-settings-usergroups-banner.png" #define CssPath "/com/ublinux/css/ubl-settings-usergroups.css" #define config_path yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL) +#define icon_path "com.ublinux.ubl-settings-usergroups" +#define sync_parameters_path "resource:///com/ublinux/csv/sync_parameters.csv" #define LocalePath "/usr/share/locale" #define LocaleName "ubl-settings-usergroups" @@ -52,8 +57,8 @@ #define get_system_group_command(target) yon_char_unite("/usr/lib/ublinux/functions get_conf_groupadd_from_system ",target,NULL) #define remove_user_from_system_command(target) yon_char_append("userdel ",target) -#define remove_user_and_homedir_from_system_command yon_char_append("userdel -r ",target) -#define remove_group_from_system_command yon_char_append("groupdel ",target) +#define remove_user_and_homedir_from_system_command(target) yon_char_append("userdel -r ",target) +#define remove_group_from_system_command(target) yon_char_append("groupdel ",target) #define groups_path "/etc/group" #define users_path "/etc/passwd" @@ -74,16 +79,22 @@ #define GROUPADD(group) yon_char_unite("GROUPADD[",group,"]",NULL) #define USERSHADOW(user) yon_char_unite("USERSHADOW[",user,"]",NULL) #define USERADD_SYNC(user) yon_char_unite("USERADD_SYNC[",user,"]",NULL) + +#define USERADD_SYNC_command(target) yon_char_unite("ubconfig --source system get users USERADD_SYNC[",target,"]",NULL) #define USERSHADOW_SYNC(user) yon_char_unite("USERSHADOW_SYNC[",user,"]",NULL) #define GROUPADD_SYNC(user) yon_char_unite("GROUPADD_SYNC[",user,"]",NULL) +#define GROUPADD_SYNC_parameter "GROUPADD_SYNC" +#define GROUPADD_SYNC_parameter_command "ubconfig --source system get users USERADD_SYNC" #define add_icon_name "com.ublinux.ubl-settings-usergroups.increase-symbolic" #define edit_icon_name "com.ublinux.ubl-settings-usergroups.edit-symbolic" #define delete_icon_name "com.ublinux.ubl-settings-usergroups.trash-symbolic" +#define sync_icon_name "com.ublinux.ubl-settings-usergroups.user-add-symbolic" +#define update_icon_name "com.ublinux.ubl-settings-usergroups.sync-symbolic" #define password_hash_get_command(passwd) yon_char_append("mkpasswd2 ",passwd) -#define config_get_command(source) yon_char_unite("ubconfig --source ",source," get users DEFAULTPASSWD DEFAULTROOTPASSWD DEFAULTUSER HASHPASSWD USERGROUPS ADDADM USERADD[*] USERADD_SYNC USERADD_SYNC[*] USERSHADOW[*] GROUPADD[*]",NULL),yon_char_unite("ubconfig --source ",source," get [system] SYSTEMBOOT_STATEMODE",NULL),yon_char_unite("ubconfig --source ",source," get [save] SAVE_ROOTCOPY_CHANGES",NULL) +#define config_get_command(source) yon_char_unite("ubconfig --source ",source," get users DEFAULTPASSWD DEFAULTROOTPASSWD DEFAULTUSER HASHPASSWD USERGROUPS ADDADM USERADD[*] USERADD_SYNC USERADD_SYNC[*] USERSHADOW[*] USERSHADOW_SYNC[*] GROUPADD[*] GROUPADD_SYNC[*] GROUPADD_SYNC",NULL),yon_char_unite("ubconfig --source ",source," get [system] SYSTEMBOOT_STATEMODE",NULL),yon_char_unite("ubconfig --source ",source," get [save] SAVE_ROOTCOPY_CHANGES",NULL) #define config_get_default_command "ubconfig --source default get users DEFAULTPASSWD DEFAULTROOTPASSWD USERGROUPS DEFAULTUSER HASHPASSWD ADDADM" #define config_get_global_only_parameters "ubconfig --source global get users DEFAULTPASSWD DEFAULTROOTPASSWD" @@ -142,10 +153,10 @@ #define GROUPADD_parameter_command yon_char_unite("GROUPADD[",target,"]",NULL) typedef char* string; + +__attribute__((unused)) static \ string version_application; - -char *local; - + typedef struct { template_config_fields @@ -179,6 +190,7 @@ typedef struct { int launch_size; config_str launch_arguments; } config; +extern config main_config; typedef struct { template_window_fields @@ -201,6 +213,8 @@ typedef struct { rmb_menu_window *UsersMenu; rmb_menu_window *GroupsMenu; + rmb_menu_window *SystemUsersMenu; + rmb_menu_window *SystemGroupsMenu; GtkListStore *liststore1; GtkListStore *liststore2; @@ -233,6 +247,36 @@ typedef struct{ GtkWidget *EncryptAllPasswordsButton; GtkWidget *UsersBootCheck; GtkWidget *UsersShutdownCheck; + GtkWidget *UsersShutdownExpander; + GtkWidget *UserShutdownRevealer; + GtkWidget *UsersTree; + GtkWidget *UserAddButton; + GtkWidget *UserRemoveButton; + + GtkWidget *GroupsBootCheck; + GtkWidget *GroupsShutdownCheck; + GtkWidget *GroupsShutdownExpander; + GtkWidget *GroupShutdownRevealer; + GtkWidget *GroupsTree; + GtkWidget *GroupAddButton; + GtkWidget *GroupRemoveButton; + GtkListStore *UsersShutdownList; + GtkListStore *GroupsShutdownList; + GtkCellRenderer *UserActiveCell; + GtkCellRenderer *UserMinCell; + GtkCellRenderer *UserMaxCell; + GtkCellRenderer *GroupActiveCell; + GtkCellRenderer *GroupMinCell; + GtkCellRenderer *GroupMaxCell; + + const char *default_user_name; + const char *default_password; + const char *default_root_password; + const char *password_hash; + int user_1000_admin; + int user_boot; + int user_shutdown; + } ubl_settings_usergroups_additional_settings_window; typedef struct{ @@ -256,17 +300,23 @@ typedef struct{ GtkWidget *AdminGroupsButton; GtkWidget *GroupaddShutdownCheck; GtkWidget *groupExtraOptionsEntry; + GtkWidget *MainNotebook; char *last_gid; } ubl_settings_usergroups_group_creation_window; typedef struct{ GtkWidget *GroupsWindow; + GtkWidget *StatusBox; GtkWidget *GroupsTree; GtkListStore *list; GtkWidget *GroupsCancelButton; GtkWidget *GroupsOkButton; GtkWidget *HeaderLabel; + GtkWidget *DefaultCheck; + GtkWidget *AddNewCheck; + GtkWidget *AddNewEntry; + GtkWidget *AddNewBox; GtkCellRenderer *StatusCell; GtkTreeViewColumn *GroupColumn; } ubl_settings_usergroups_group_window; @@ -338,6 +388,7 @@ typedef struct{ GtkWidget *UsershadowShutdownCheck; GtkWidget *userTitleNameLabel; GtkWidget *userSyncSAMBAPasswordCheck; + GtkWidget *MainNotebook; char *expiration_unix; @@ -368,6 +419,23 @@ typedef struct{ GtkTreeViewColumn *UserCell; } yon_confirmation_window; + typedef struct { + GtkWidget *Window; + GtkWidget *HeaderLabel; + GtkWidget *CancelButton; + GtkWidget *StatusBox; + GtkWidget *TitleLabel; + GtkWidget *AcceptButton; + GtkWidget *ConfigAcceptButton; + GtkWidget *SystemAcceptButton; + + } system_remove_confirmation_window; + + struct target_struct{ + GtkEntry *target; + GtkToggleButton *defaut_toggle; + }; + ubl_settings_usergroups_additional_settings_window *yon_ubl_settings_usergroups_additional_settings_new(); void on_ubl_settings_usergroups_additional_settings_open(GtkWidget *self, main_window *widgets); @@ -428,13 +496,15 @@ void on_saving_settings_open(GtkWidget *self, main_window *widgets); void on_password_combo_changed(GtkComboBox *self, GtkWidget *target); void on_filechooser_open(GtkWidget *self, GtkEntry *output_target); void on_groups_save(GtkWidget *self, dictionary *dict); -void on_groups_clicked(GtkWidget *self, GtkEntry *output_target); +void on_groups_clicked(GtkWidget *self, struct target_struct *output_target); void on_groups_multiple_save(GtkWidget *self, dictionary *dict); void on_groups_multiple_clicked(GtkWidget *self, GtkEntry *output_target); void on_passwords_encrypt(); void on_password_change(GtkWidget *self, dictionary *entry_dict); void on_additional_settings_clicked(GtkWidget *self, GtkEntry *output_target); void on_expiration_clicked(GtkWidget *self, ubl_settings_usergroups_user_window *window); + +void on_additional_settings_changed(GtkWidget *self, ubl_settings_usergroups_additional_settings_window *window); void on_additional_settings_save(GtkWidget *self, ubl_settings_usergroups_additional_settings_window *window); void on_hash_changed(GtkWidget *self, ubl_settings_usergroups_additional_settings_window *window); ubl_settings_usergroups_additional_settings_window *yon_ubl_settings_usergroups_additional_settings_new(); @@ -449,7 +519,6 @@ ubl_settings_usergroups_group_window *yon_ubl_settings_usergroups_group_new(int void on_standard_groups_accept(GtkWidget *self, ubl_settings_usergroups_group_window *window); void on_standard_groups_open(GtkWidget *self, main_window *widgets); void on_password_show_hide(GtkEntry *self, GtkEntryIconPosition icon_pos, GdkEvent* event); -void on_password_changed(GtkEntry *self, ubl_settings_usergroups_password_window *window); void on_password_accept(GtkWidget *self, dictionary *dict); ubl_settings_usergroups_password_window *yon_ubl_settings_usergroups_password_new(); void yon_system_load(main_window *window); @@ -476,4 +545,21 @@ void config_init(); void on_selection_changed(GtkWidget *self, main_window *widgets); void on_notebook_page_changed(GtkWidget *self, GtkWidget *page, int num, main_window *widgets); gboolean on_menu_open(GtkWidget *self,GdkEventButton *event, rmb_menu_window *window); -main_window *yon_main_window_complete(main_window *widgets); \ No newline at end of file +gboolean on_system_menu_open(GtkWidget *self,GdkEventButton *event, rmb_menu_window *window); +main_window *yon_main_window_complete(main_window *widgets); +void yon_remove_confirmation_window_accept_clicked(GtkWidget *self,dictionary *dict); +system_remove_confirmation_window *yon_system_remove_confirmation_window_new(); +void on_delete_system_user(GtkWidget *, dictionary *dict); +void on_delete_system_group(GtkWidget *, dictionary *dict); +char *yon_char_parsed_to_string_include_empty(config_str parsed, int parsed_size, char *divider); +config_str yon_parameter_parse(char *parameter, int *size); +int yon_parameter_check_tag(char *tag,char *string); +config_str yon_parameter_get_by_template(char *parameter, char *pattern, int *size); + void on_additional_settings_group_sync_remove(GtkWidget *, ubl_settings_usergroups_additional_settings_window *window); + void on_additional_settings_user_sync_remove(GtkWidget *, ubl_settings_usergroups_additional_settings_window *window); + void on_additional_settings_user_sync_add(GtkWidget *, ubl_settings_usergroups_additional_settings_window *window); +void on_additional_settings_cell_toggled(GtkCellRenderer *self, char *path, ubl_settings_usergroups_additional_settings_window *window); +void on_additional_settings_cell_edited(GtkCellRenderer *self, char *path, char *new_text, ubl_settings_usergroups_additional_settings_window *window); +void on_adiitional_settings_tree_selection_changed(GtkWidget *self, ubl_settings_usergroups_additional_settings_window *window); +void on_useradd_sync_changed(ubl_settings_usergroups_additional_settings_window *window); +#endif \ No newline at end of file diff --git a/source/ubl-strings.h b/source/ubl-strings.h index e2f969f..6db4ae7 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -51,16 +51,20 @@ #define UPDATE_LABEL _("Update users and groups") #define SAVING_CONFIGURATION_LABEL _("Additional saving configuration") +#define FILTER_NAME_CONFIG_LABEL yon_char_append(_("Configuration file")," *.ini") +#define CHOOSE_CUSTOM_CONFIG_LABEL _("Choose custom configuration file") + #define SYSTEM_USER_ADD_CONFIRMATION_LABEL(target) yon_char_unite(_("This user doesn't exist in configuration. Are you sure want to add user")," ",target," ", _("to configuration?"),NULL) #define SYSTEM_USER_SYNC_CONFIRMATION_LABEL(target) yon_char_unite(_("This user exists in configuration. Are you sure want to update user")," ",target," ", _("data at configuration?"),NULL) #define SYSTEM_GROUP_SYNC_CONFIRMATION_LABEL(target) yon_char_unite(_("This group doesn't exist in configuration. Are you sure want to add group")," ",target," ", _("to configuration?"),NULL) #define SYSTEM_GROUP_ADD_CONFIRMATION_LABEL(target) yon_char_unite(_("This group exists in configuration. Are you sure want to update group")," ",target," ", _("data at configuration?"),NULL) -#define SYSTEM_USER_SYSTEM_REMOVE_CONFIRMATION_LABEL(target) yon_char_unite(_("This user doesn't exist in configuration and will be removed from the system. Are you sure want to remove user")," ",target," ", _("from the system??"),NULL) -#define SYSTEM_USER_CONFIG_REMOVE_CONFIRMATION_LABEL(target) yon_char_unite(_("This user exists in configuration. Are you sure want to remove user")," ",target," ", _("?"),NULL) -#define SYSTEM_GROUP_SYSTEM_REMOVE_CONFIRMATION_LABEL(target) yon_char_unite(_("This group doesn't exist in configuration and will be removed from the system. Are you sure want to remove group")," ",target," ", _("from the system?"),NULL) -#define SYSTEM_GROUP_CONFIG_REMOVE_CONFIRMATION_LABEL(target) yon_char_unite(_("This group exists in configuration. Are you sure want to remove group")," ",target,"", _("?"),NULL) +#define SYSTEM_USER_SYSTEM_REMOVE_CONFIRMATION_LABEL(target) yon_char_unite(_("This user doesn't exist in configuration. Are you sure want to remove user")," ",target," ", _("from the system?"),NULL) +#define SYSTEM_USER_CONFIG_REMOVE_CONFIRMATION_LABEL(target) yon_char_unite(_("This user exists in configuration and system. Are you sure want to remove user")," ",target,"", "?",NULL) +#define SYSTEM_GROUP_SYSTEM_REMOVE_CONFIRMATION_LABEL(target) yon_char_unite(_("This group doesn't exist in configuration. Are you sure want to remove group")," ",target," ", _("from the system?"),NULL) +#define SYSTEM_GROUP_CONFIG_REMOVE_CONFIRMATION_LABEL(target) yon_char_unite(_("This group exists in configuration and system. Are you sure want to remove group")," ",target,"", "?",NULL) +#define SYNC_TOOLTIP_LABEL _("Syncronize with configuration") //ubl-settings-usergroups-additional-settings.glade #define ADDITIONAL_SETTINGS_TITLE_LABEL _("Additional settings") @@ -99,8 +103,10 @@ #define DESCRYPT_DESCRIPTION_LABEL _("descrypt (Hash function from the DES family of algorithms)") #define NTHASH_DESCRIPTION_LABEL _("NTHash (Hash function from the NT Windows family of algorithms)") -#define ADDITIONAL_BOOT_LABEL _("While booting the operating system, apply the settings of all users from the configuration") -#define ADDITIONAL_SHUTDOWN_LABEL _("While shutdown, save the settings of all users with UID>=1000 to the configuration") +#define ADDITIONAL_USER_BOOT_LABEL _("While booting the operating system, apply the settings of all users from the configuration") +#define ADDITIONAL_USER_SHUTDOWN_LABEL _("While shutdown, save the settings of all users with UID>=1000 to the configuration") +#define ADDITIONAL_GROUP_BOOT_LABEL _("While booting the operating system, apply the settings of all groups from the configuration") +#define ADDITIONAL_GROUP_SHUTDOWN_LABEL _("While shutdown, save the settings of all groups with GID>=1000 to the configuration") //ubl-settings-usergroups-group-creation.glade #define CONFIGURE_GROUP_TITLE_LABEL _("Configure group") @@ -110,6 +116,7 @@ #define GROUP_USERS_LABEL _("Group users:") #define AUTOMATICALLY_LABEL _("Automatically") #define LOGIN_GROUP_LABEL _("Login") +#define GROUP_EXIST_LABEL _("Group already exists in configuration") #define CREATE_GROUP_UNUNIQUE_LABEL _("Create group with ununique GID") #define CREATE_SYSTEM_GROUP_LABEL _("Create system group") #define ENCRYPTED_PASSWORD_LABEL _("Encrypted") @@ -125,6 +132,7 @@ #define ADDITIONAL_GROUPS_TITLE_LABEL _("Additional groups") #define GROUPS_TITLE_LABEL _("Choose groups") #define GROUP_USERS_TITLE_LABEL _("Choose users") +#define ADD_TO_NEW _("Add to new:") //ubl-settings-usergroups-system.glade #define INSPECTOR_TITLE_LABEL _("System users and groups") @@ -162,6 +170,7 @@ #define PASSWORD_MIN_INTERVAL_LABEL _("Password change interval: minimum") #define PASSWORD_MAX_INTERVAL_LABEL _("days, maximum") #define DAYS_LABEL _("days") +#define USER_EXIST_LABEL _("User already exists in configuration") #define DAYS_WARNING_LABEL _("Days until warning:") #define DAYS_ACTIVITY_LABEL _("Days without activity:") #define FORCE_CONFIGURE_LABEL _("Force change at next login") @@ -203,6 +212,7 @@ #define PASSWORD_REPEAT_LABEL _("Repeat password:") #define PASSWORD_HASH_LABEL _("Password hash:") #define PASSWORD_NO_ENCRYPT_LABEL _("Do not encrypt password") +#define RESTRICTED_SYMBOLS_LABEL _("Password contain special symbols") //ubl-settings-usergroups-savesettings.glade #define SAVESETTINGS_TITLE_LABEL _("Additional configuration of service parameter saving") @@ -223,4 +233,38 @@ #define CONFIG_USERS_TAB_LABEL _("Configuration users") #define CONFIG_GROUPS_TAB_LABEL _("Configuration groups") #define SYSTEM_USERS_TAB_LABEL _("System users") -#define SYSTEM_GROUPS_TAB_LABEL _("System groups") \ No newline at end of file +#define SYSTEM_GROUPS_TAB_LABEL _("System groups") +#define SYSTEM_REMOVE_FROM_CONFIG_LABEL _("Remove from system") +#define SYSTEM_REMOVE_FROM_SYSTEM_LABEL _("Remove from configuration") + +#define GROUP_REMOVE_ERROR _("Group deletion has failed") +#define USER_REMOVE_ERROR _("User deletion has failed") + +#define ADD_TO_CONFIGURATION_TITLE_LABEL _("Add to configuration") +#define REMOVE_FROM_CONFIGURATION_TITLE_LABEL _("Remove from configuration") +#define ADD_TO_SYSTEM_TITLE_LABEL _("Add to system") +#define REMOVE_FROM_SYSTEM_TITLE_LABEL _("Remove from system") + +#define SHUTDOWN_ALL_SYSTEM_USERS_LABEL _("All system users") +#define SHUTDOWN_USERS_LABEL _("Users") +#define SHUTDOWN_SYSTEM_USER_LABEL _("System users") +#define SHUTDOWN_UID_RANGE_LABEL _("Users UID range") +#define SHUTDOWN_UID_LABEL _("User UID in system") +#define SHUTDOWN_GID_RANGE_LABEL _("Users GID range") +#define SHUTDOWN_GID_LABEL _("User GID in system") + +#define SHUTDOWN_SAVE_USERS_LABEL _("While shutdown, save the settings of all users to configuration") +#define SHUTDOWN_SAVE_GROUPS_LABEL _("While shutdown, save the settings of all groups to the configuration") +#define SHUTDOWN_ALL_USERS_LABEL _("All groups in system") +#define SHUTDOWN_SYSTEM_GROUPS_USERS_LABEL _("System groups") +#define SHUTDOWN_GROUP_GID_RANGE_LABEL _("Group GID range") +#define SHUTDOWN_GID_IN_SYSTEM_LABEL _("Group GID in system") +#define SHUTDOWNALL_SYSTEM_USERS_LABEL _("All system users") +#define SHUTDOWN_SYSTEM_USERS_LABEL _("System users") +#define SHUTDOWN_UID_USERS_LABEL _("Users UID range") +#define SHUTDOWN_SYSTEM_ID_USERS_LABEL _("User UID in system") +#define SHUTDOWN_SYNC_TYPE_LABEL _("Syncronization type") +#define SHUTDOWN_MINIMUM_UID_LABEL _("Minimum UID") +#define SHUTDOWN_MAXIMUM_UID_LABEL _("Maximum UID") +#define SHUTDOWN_MINIMUM_GID_LABEL _("Minimum GID") +#define SHUTDOWN_MAXIMUM_GID_LABEL _("Maximum GID") diff --git a/sync_parameters.csv b/sync_parameters.csv new file mode 100644 index 0000000..6663e78 --- /dev/null +++ b/sync_parameters.csv @@ -0,0 +1,6 @@ +PARAMETER:DESCRIPTION:PARAMETER_NAME +shutdown@all:When the system is shut down, synchronize all users in the system with the global configuration +shutdown@users:On system shutdown, synchronize users 1000<=UID<=6000 in the system with the global configuration +shutdown@systems:On system shutdown, synchronize system users 500<=UID<=999 in the system with the global configuration +shutdown@-:When the system is shut down, synchronize the range of UIDs of users in the system with the global configuration +shutdown@:When the system is shut down, synchronize the user UID in the system with the global configuration \ No newline at end of file diff --git a/ubl-settings-usergroups-additional-settings.glade b/ubl-settings-usergroups-additional-settings.glade index 7618860..6772a79 100644 --- a/ubl-settings-usergroups-additional-settings.glade +++ b/ubl-settings-usergroups-additional-settings.glade @@ -3,6 +3,206 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + False + All groups in system + 1 + 65535 + True + True + False + False + False + shutdown@all + False + False + + + False + Groups + 1000 + 6000 + True + True + False + False + False + shutdown@users + False + False + + + False + System groups + 500 + 999 + True + True + False + False + False + shutdown@systems + False + False + + + False + Group GID range + + + True + True + False + True + True + shutdown@min-max + True + False + + + False + Group GID in system + + + True + True + False + True + False + shutdown@gid + True + False + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + False + All system users + 1 + 65535 + True + True + False + False + False + shutdown@all + False + False + + + False + Users + 1000 + 6000 + True + True + False + False + False + shutdown@users + False + False + + + False + System users + 500 + 999 + True + True + False + False + False + shutdown@systems + False + False + + + False + Users UID range + + + True + True + False + True + True + shutdown@min-max + True + False + + + False + User UID in system + + + True + True + False + True + False + shutdown@uid + True + False + + + True False @@ -28,6 +228,26 @@ False com.ublinux.ubl-settings-usergroups.lock-symbolic + + True + False + com.ublinux.libublsettingsui-gtk3.increase-symbolic + + + True + False + com.ublinux.libublsettingsui-gtk3.trash-symbolic + + + True + False + com.ublinux.libublsettingsui-gtk3.increase-symbolic + + + True + False + com.ublinux.libublsettingsui-gtk3.trash-symbolic + 600 False @@ -394,8 +614,229 @@ - - While shutdown, save the settings of all users with UID>=1000 to the configuration + + True + False + 0 + in + + + True + False + 5 + 5 + 5 + 5 + + + True + False + vertical + 5 + + + True + False + 5 + + + While shutdown, save the settings of all users to configuration + True + True + False + True + + + False + True + 0 + + + + + True + True + + + + + + + + + False + True + end + 2 + + + + + False + True + 0 + + + + + True + False + + + True + False + 5 + + + True + True + in + 160 + + + True + True + UsersShutdownList + both + + + + + + + + + 5 + 0 + + + + + + + Syncronization type + + + + 5 + 1 + + + + + + + Minimum UID + + + 5 + + + 6 + 7 + 2 + + + + + + + Maximum UID + + + 5 + + + 6 + 8 + 3 + + + + + + + + + True + True + 0 + + + + + True + False + vertical + 5 + + + True + True + True + image6 + + + + False + True + 0 + + + + + True + True + True + image7 + + + + False + True + 1 + + + + + False + True + 1 + + + + + + + True + True + 1 + + + + + + + + + + + + + False + True + 1 + + + + + While booting the operating system, apply the settings of all groups from the configuration True True False @@ -404,7 +845,229 @@ False True - 1 + 2 + + + + + True + False + 0 + in + + + True + False + 5 + 5 + 5 + 5 + + + True + False + vertical + 5 + + + True + False + 5 + + + True + True + + + + + + + + + False + True + end + 1 + + + + + While shutdown, save the settings of all groups to the configuration + True + True + False + True + + + False + True + 2 + + + + + False + True + 0 + + + + + True + False + slide-up + + + True + False + 5 + + + True + True + in + 160 + + + True + True + GroupsShutdownList + both + + + + + + + + + 5 + 0 + + + + + + + Syncronization type + + + + 5 + 1 + + + + + + + Minimum GID + + + 5 + + + 6 + 7 + 2 + + + + + + + Maximum GID + + + 5 + + + 6 + 8 + 3 + + + + + + + + + True + True + 0 + + + + + True + False + vertical + 5 + + + True + True + True + image8 + + + + False + True + 0 + + + + + True + True + True + image9 + + + + False + True + 1 + + + + + False + True + 1 + + + + + + + True + True + 1 + + + + + + + + + + + + + False + True + 3 @@ -425,7 +1088,7 @@ - False + True True 1 @@ -484,4 +1147,8 @@ + + True + False + diff --git a/ubl-settings-usergroups-group-creation.glade b/ubl-settings-usergroups-group-creation.glade index 78c8766..49b403b 100644 --- a/ubl-settings-usergroups-group-creation.glade +++ b/ubl-settings-usergroups-group-creation.glade @@ -1,5 +1,5 @@ - + @@ -56,7 +56,7 @@ - + True True 5 diff --git a/ubl-settings-usergroups-group.glade b/ubl-settings-usergroups-group.glade index 06819cc..47cc29a 100644 --- a/ubl-settings-usergroups-group.glade +++ b/ubl-settings-usergroups-group.glade @@ -23,83 +23,36 @@ True False - 5 - 5 - 5 - 5 - 5 - 5 vertical - 5 - + True - True - in + False - - True - True - 2 - vertical - - - none - - - - - Chosen - - - - 0 - - - - - - - ID - True - 2 - - - - 2 - - - - - - - Group - descending - 1 - - - - 1 - - - - - + - True + False True 0 - + + True False + 5 + 5 + 5 + 5 + 5 + 5 + vertical 5 - - Add to new: + + Default True True False @@ -112,19 +65,102 @@ - + True True + in + + + True + True + 2 + vertical + + + Chosen + + + + 0 + + + + + + + ID + True + 2 + + + + 2 + + + + + + + Group + descending + 1 + + + + 1 + + + + + + - False + True True 1 + + + False + 5 + + + Add to new: + True + True + False + True + + + False + True + 0 + + + + + True + False + True + + + True + True + 1 + + + + + False + True + 2 + + - False + True True 1 diff --git a/ubl-settings-usergroups-system-deletion-confirmation.glade b/ubl-settings-usergroups-system-deletion-confirmation.glade new file mode 100644 index 0000000..b3b12d3 --- /dev/null +++ b/ubl-settings-usergroups-system-deletion-confirmation.glade @@ -0,0 +1,226 @@ + + + + + + + True + False + com.ublinux.ubl-settings-usergroups.accept-symbolic + + + True + False + com.ublinux.ubl-settings-usergroups.accept-symbolic + + + True + False + com.ublinux.ubl-settings-usergroups.cancel-symbolic + + + True + False + com.ublinux.ubl-settings-usergroups.accept-symbolic + + + 650 + 200 + False + True + 450 + com.ublinux.ubl-settings-usergroups + + + True + False + vertical + + + True + False + vertical + + + + + + False + True + 0 + + + + + True + False + vertical + 5 + + + True + False + 5 + + + True + False + 20 + 20 + 10 + 10 + 50 + dialog-information-symbolic + 6 + + + False + True + 0 + + + + + True + False + True + True + 0 + + + True + True + 1 + + + + + True + True + 0 + + + + + True + False + end + 5 + 5 + 5 + 5 + + + Remove from configuration + True + True + True + image1 + + + + False + True + 0 + + + + + Remove from system + True + True + True + image5 + + + + False + True + 1 + + + + + False + True + 1 + + + + + True + True + 1 + + + + + + + True + False + + + True + False + User deletion + + + + + + + + Cancel + True + True + True + image4 + + + + + + Accept + True + True + image2 + + + + end + 1 + + + + + + + + + + + + + + + + + + + + + + diff --git a/ubl-settings-usergroups-user.glade b/ubl-settings-usergroups-user.glade index 8e0cda4..8ecc1cc 100644 --- a/ubl-settings-usergroups-user.glade +++ b/ubl-settings-usergroups-user.glade @@ -1,5 +1,5 @@ - + @@ -86,7 +86,7 @@ - + True True diff --git a/ubl-settings-usergroups.css b/ubl-settings-usergroups.css index a98861a..4c6fa9a 100644 --- a/ubl-settings-usergroups.css +++ b/ubl-settings-usergroups.css @@ -16,6 +16,14 @@ background:transparent; color: @theme_text_color; } +.bggrey{ + border-radius:5px; + border-color:@theme_text_color; + border-style:solid; + border-width:0.3px; + box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.15); +} + .inherited>* { border:none; background:inherit; diff --git a/ubl-settings-usergroups.glade b/ubl-settings-usergroups.glade index c5eabe9..4ec95c8 100644 --- a/ubl-settings-usergroups.glade +++ b/ubl-settings-usergroups.glade @@ -209,7 +209,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. True True - Additional saving configuration + Syncronize with configuration image5