From 1649f617236d3645545d4d34cec654501d404241 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Fri, 10 Jan 2025 18:16:19 +0600 Subject: [PATCH] WIP Deleting system users and groups --- gresource.xml | 1 + source/CMakeLists.txt | 3 + source/ubl-settings-usergroups-system.c | 132 ++++ source/ubl-settings-usergroups-user.c | 595 ++++++++++++++++ source/ubl-settings-usergroups.c | 673 +----------------- source/ubl-settings-usergroups.h | 33 +- source/ubl-strings.h | 2 +- ...rgroups-system-deletion-confirmation.glade | 226 ++++++ 8 files changed, 1024 insertions(+), 641 deletions(-) create mode 100644 source/ubl-settings-usergroups-system.c create mode 100644 source/ubl-settings-usergroups-user.c create mode 100644 ubl-settings-usergroups-system-deletion-confirmation.glade diff --git a/gresource.xml b/gresource.xml index c29a06f..4a731e5 100644 --- a/gresource.xml +++ b/gresource.xml @@ -10,6 +10,7 @@ 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 diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index b33f93b..94c2d57 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -38,6 +38,7 @@ set(DEPENDFILES ../ubl-settings-usergroups-group.glade ../ubl-settings-usergroups-savesettings.glade ../ubl-settings-usergroups-confirmation.glade + ../ubl-settings-usergroups-system-deletion-confirmation.glade ../gresource.xml ../ubl-settings-usergroups-banner.png ../ubl-settings-usergroups.css @@ -79,6 +80,8 @@ endif() set(SOURCE_FILES ubl-settings-usergroups.c + ubl-settings-usergroups-user.c + ubl-settings-usergroups-system.c ubl-settings-usergroups.h ubl-strings.h ) diff --git a/source/ubl-settings-usergroups-system.c b/source/ubl-settings-usergroups-system.c new file mode 100644 index 0000000..54471e0 --- /dev/null +++ b/source/ubl-settings-usergroups-system.c @@ -0,0 +1,132 @@ +#include "ubl-settings-usergroups.h" + +void on_delete_system_user(GtkWidget *, yon_confirmation_window *dialog){ + 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)){ + yon_launch(command); + } +} + +void on_delete_system_group(GtkWidget *, yon_confirmation_window *dialog){ + 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)){ + yon_launch(command); + } +} + +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 { + 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(); + g_signal_connect(G_OBJECT(dialog->AcceptButton),"clicked",G_CALLBACK(on_delete_system_user),dialog); + gtk_window_set_transient_for(GTK_WINDOW(dialog->Window),GTK_WINDOW(widgets->Window)); + if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==2){ + 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_confirmation_window *dialog = yon_delete_confirmation_new(); + gtk_window_set_transient_for(GTK_WINDOW(dialog->Window),GTK_WINDOW(widgets->Window)); + 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_tree_view_column_set_title(dialog->UserCell,GROUP_LABEL); + gtk_label_set_text(GTK_LABEL(dialog->HatLabel),DELETE_GROUP_CONFIRMATION_TITLE_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..43e77aa --- /dev/null +++ b/source/ubl-settings-usergroups-user.c @@ -0,0 +1,595 @@ +#include "ubl-settings-usergroups.h" + + +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_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; + // 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_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; + } +} \ No newline at end of file diff --git a/source/ubl-settings-usergroups.c b/source/ubl-settings-usergroups.c index 6e8c3ef..09b175e 100644 --- a/source/ubl-settings-usergroups.c +++ b/source/ubl-settings-usergroups.c @@ -1880,415 +1880,12 @@ void on_system_update(GtkWidget *, main_window *window){ yon_system_load(window); } -ubl_settings_usergroups_system_window *yon_ubl_settings_usergroups_system_new(){ - ubl_settings_usergroups_system_window *window = malloc(sizeof(ubl_settings_usergroups_system_window)); - GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_ubl_settings_usergroups_system); - window->liststore1=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)); @@ -2447,125 +2044,6 @@ void on_remove_expired(GtkWidget *, GtkEntryIconPosition icon_pos, GdkEvent *, G } } -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){ @@ -2851,30 +2329,55 @@ 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; + if (config(USERADD(target))){ + system_remove_confirmation_window *window = yon_system_remove_confirmation_window_new(); + gtk_label_set_markup(GTK_LABEL(window->TitleLabel),SYSTEM_USER_SYSTEM_REMOVE_CONFIRMATION_LABEL(target)); + 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->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); + gtk_widget_show(window->Window); } else { + dialog_confirmation_data data; 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 { + if (yon_confirmation_dialog_call(widgets->Window,&data)!=GTK_RESPONSE_ACCEPT){ + return; + } yon_system_delete_confirmation_open(widgets); } } }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); + if (config(USERADD(target))){ + system_remove_confirmation_window *window = yon_system_remove_confirmation_window_new(); + gtk_label_set_markup(GTK_LABEL(window->TitleLabel),SYSTEM_GROUP_SYSTEM_REMOVE_CONFIRMATION_LABEL(target)); + 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->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); + gtk_widget_show(window->Window); + } else { + dialog_confirmation_data data; + data.action_text = SYSTEM_GROUP_SYSTEM_REMOVE_CONFIRMATION_LABEL(target); + data.function=NULL; + data.data=NULL; + + if (yon_confirmation_dialog_call(widgets->Window,&data)!=GTK_RESPONSE_ACCEPT){ + return; + } + yon_system_delete_confirmation_open(widgets); + } + } }break; } } @@ -2889,103 +2392,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; @@ -3240,7 +2646,6 @@ return widgets; } int main(int argc, char *argv[]){ - local=setlocale(LC_ALL, ""); textdomain (LocaleName); config_init(); yon_ubl_connect_config((_template_config*)&main_config); diff --git a/source/ubl-settings-usergroups.h b/source/ubl-settings-usergroups.h index f38b727..09982e0 100644 --- a/source/ubl-settings-usergroups.h +++ b/source/ubl-settings-usergroups.h @@ -1,3 +1,5 @@ +#ifndef USERGROUPS_H +#define USERGROUPS_H #include #include #include @@ -30,6 +32,7 @@ #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" @@ -52,8 +55,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" @@ -142,10 +145,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 +182,7 @@ typedef struct { int launch_size; config_str launch_arguments; } config; +extern config main_config; typedef struct { template_window_fields @@ -368,6 +372,18 @@ 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; + 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); @@ -476,4 +492,9 @@ 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 +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 *, yon_confirmation_window *dialog); +void on_delete_system_group(GtkWidget *, yon_confirmation_window *dialog); +#endif \ No newline at end of file diff --git a/source/ubl-strings.h b/source/ubl-strings.h index e2f969f..72e9d82 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -56,7 +56,7 @@ #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_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) 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 + + + + + + + + + + + + + + + + + + + + + +