From 61f283df5d271f39af761bc116e1b1979465ab1c Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Mon, 30 Sep 2024 15:30:29 +0600 Subject: [PATCH 1/5] If GID is written in user's main group, groups list will be scanned for replacing GID with group name --- source/ubl-settings-usergroups.c | 36 ++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/source/ubl-settings-usergroups.c b/source/ubl-settings-usergroups.c index bbbba4c..c6fafa0 100644 --- a/source/ubl-settings-usergroups.c +++ b/source/ubl-settings-usergroups.c @@ -876,6 +876,39 @@ void on_groups_clicked(GtkWidget *self, GtkEntry *output_target){ } 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); + int digits=0; + for (int k=0;k2&&!strcmp(groups_parsed[2],current_group)){ + final_group_name=yon_char_new(groups_parsed[0]); + if (group_size) yon_char_parsed_free(groups_parsed,group_size); + break; + } + if (group_size) yon_char_parsed_free(groups_parsed,group_size); + } + } else { + final_group_name=yon_char_new(current_group); + } + for_iter(window->list,&iter){ + char *group; + gtk_tree_model_get(GTK_TREE_MODEL(window->list),&iter,1,&group,-1); + if (!strcmp(group,final_group_name)){ + gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->GroupsTree)),&iter); + gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(window->GroupsTree),gtk_tree_model_get_path(GTK_TREE_MODEL(window->list),&iter),gtk_tree_view_get_column(GTK_TREE_VIEW(window->GroupsTree),1),0,0,0); + break; + } + } dictionary *dict = NULL; yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); yon_dictionary_add_or_create_if_exists_with_data(dict,"output",output_target); @@ -1924,6 +1957,8 @@ void on_user_save(GtkWidget *self, dictionary *dict){ } else { uid_string = (char*)gtk_entry_get_text(GTK_ENTRY(window->userUIDEntry)); if (yon_char_is_empty(uid_string)){ + + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); yon_ubl_status_highlight_incorrect(window->userUIDEntry); return; @@ -2531,6 +2566,7 @@ void on_main_edit(GtkWidget *self, main_window *widgets){ if (!strcmp(parameters[2],"x")) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->userGroupsCheck),1); else { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->userGroupsCheck),0); gtk_entry_set_text(GTK_ENTRY(window->userGroupsEntry), parsed_size>2?parameters[2]:""); if (!yon_char_is_empty(parameters[2])) window->last_uid=yon_char_new(parameters[2]); From ec507c6949edc8e019d30ca0135289b13c1626d5 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Mon, 30 Sep 2024 17:08:55 +0600 Subject: [PATCH 2/5] Changed sort of group choosement window --- source/ubl-settings-usergroups.c | 19 +++++++++++++------ ubl-settings-usergroups-group.glade | 14 +++++++++++++- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/source/ubl-settings-usergroups.c b/source/ubl-settings-usergroups.c index c6fafa0..b3c0d91 100644 --- a/source/ubl-settings-usergroups.c +++ b/source/ubl-settings-usergroups.c @@ -874,6 +874,7 @@ void on_groups_clicked(GtkWidget *self, GtkEntry *output_target){ } free(groupname); } + 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); @@ -941,6 +942,7 @@ void on_groups_multiple_save(GtkWidget *self, dictionary *dict){ void on_groups_multiple_clicked(GtkWidget *self, GtkEntry *output_target){ ubl_settings_usergroups_group_window *window = yon_ubl_settings_usergroups_group_new(0); + 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); GtkTreeIter iter, itar,itor; @@ -1266,6 +1268,7 @@ void on_user_choose(GtkWidget *self, GtkEntry *target){ ubl_settings_usergroups_group_window *window = yon_ubl_settings_usergroups_group_new(1); 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); gtk_tree_view_column_set_title(GTK_TREE_VIEW_COLUMN(window->GroupColumn),USERS_LABEL); GtkTreeIter iter, itar,itor; char *output = (char*)gtk_entry_get_text(target); @@ -1539,8 +1542,8 @@ 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->list = gtk_list_store_new(2,G_TYPE_BOOLEAN,G_TYPE_STRING); - gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(window->list),1,GTK_SORT_ASCENDING); + 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_window_config_custom_window_setup(GTK_WINDOW(window->GroupsWindow),"GroupWindow"); gtk_window_set_title(GTK_WINDOW(window->GroupsWindow),GROUPS_TITLE_LABEL); @@ -1556,10 +1559,13 @@ ubl_settings_usergroups_group_window *yon_ubl_settings_usergroups_group_new(int current_size = main_config.groups_size; } for (int i=0;ilist,&iter); - gtk_list_store_set(window->list,&iter,0,0,1,group_name,-1); + int parsed_size=0; + config_str parsed = yon_char_parse(current[i],&parsed_size,":"); + if (parsed_size>2&&!yon_char_is_empty(parsed[2])){ + gtk_list_store_append(window->list,&iter); + gtk_list_store_set(window->list,&iter,0,0,1,parsed[0],2,atoi(parsed[2]),-1); + } + if (parsed_size) yon_char_parsed_free(parsed,parsed_size); } gtk_tree_view_set_model(GTK_TREE_VIEW(window->GroupsTree),GTK_TREE_MODEL(window->list)); @@ -1592,6 +1598,7 @@ void on_standard_groups_open(GtkWidget *self, main_window *widgets){ ubl_settings_usergroups_group_window *window = yon_ubl_settings_usergroups_group_new(0); 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); GtkTreeIter iter, itar,itor; int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(main_config.groups_list),&iter); for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(main_config.groups_list),&iter)){ diff --git a/ubl-settings-usergroups-group.glade b/ubl-settings-usergroups-group.glade index d9599dc..f66823f 100644 --- a/ubl-settings-usergroups-group.glade +++ b/ubl-settings-usergroups-group.glade @@ -58,10 +58,22 @@ + + + ID + True + 2 + + + + 2 + + + + Group - True descending 1 From 50cc307d8e885f76409dcb6b0a8e850546a2866a Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Tue, 1 Oct 2024 15:10:30 +0600 Subject: [PATCH 3/5] Added checking for uid and gid existance --- source/ubl-settings-usergroups.c | 42 +++++++++++++++++++++++++++-- source/ubl-strings.h | 3 +++ ubl-settings-usergroups-group.glade | 2 +- ubl-settings-usergroups.pot | 6 +++++ ubl-settings-usergroups_ru.po | 7 +++++ 5 files changed, 57 insertions(+), 3 deletions(-) diff --git a/source/ubl-settings-usergroups.c b/source/ubl-settings-usergroups.c index b3c0d91..484b89e 100644 --- a/source/ubl-settings-usergroups.c +++ b/source/ubl-settings-usergroups.c @@ -1370,6 +1370,27 @@ void on_group_save(GtkWidget *self, dictionary *dict){ } } + 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.groups,main_config.groups_size,config_users,config_size,&final_size); + + int found=0; + char *uid_string = (char*)gtk_entry_get_text(GTK_ENTRY(window->userUIDEntry)); + for (int i=0;i1&&!strcmp(parsed[2],uid_string)&&strcmp(parsed[2],window->last_gid)) found = 1; + if (parsed_size) yon_char_parsed_free(parsed,parsed_size); + } + if (found){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),GID_ALREADY_EXIST_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); @@ -1962,10 +1983,27 @@ void on_user_save(GtkWidget *self, dictionary *dict){ 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); + + int found=0; uid_string = (char*)gtk_entry_get_text(GTK_ENTRY(window->userUIDEntry)); - if (yon_char_is_empty(uid_string)){ + for (int i=0;i1&&!strcmp(parsed[2],uid_string)&&strcmp(parsed[2],window->last_uid)) found = 1; + if (parsed_size) yon_char_parsed_free(parsed,parsed_size); + } + if (found){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),UID_ALREADY_EXIST_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; diff --git a/source/ubl-strings.h b/source/ubl-strings.h index b9eeb41..72191a5 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -184,6 +184,9 @@ #define PASSWORD_NO_SET_LABEL _("Not specified") +#define UID_ALREADY_EXIST_LABEL _("UID already busy") +#define GID_ALREADY_EXIST_LABEL _("GID already busy") + //ubl-settings-usergroups-password.glade #define PASSWORD_REPEAT_LABEL _("Repeat password:") #define PASSWORD_HASH_LABEL _("Password hash:") diff --git a/ubl-settings-usergroups-group.glade b/ubl-settings-usergroups-group.glade index f66823f..06819cc 100644 --- a/ubl-settings-usergroups-group.glade +++ b/ubl-settings-usergroups-group.glade @@ -40,7 +40,7 @@ True True - 1 + 2 vertical diff --git a/ubl-settings-usergroups.pot b/ubl-settings-usergroups.pot index 3156e54..5c47b2c 100644 --- a/ubl-settings-usergroups.pot +++ b/ubl-settings-usergroups.pot @@ -702,4 +702,10 @@ msgid "Are you sure want to delete group" msgstr "" msgid "Are you sure want to delete user" +msgstr "" + +msgid "UID already busy" +msgstr "" + +msgid "GID already busy" msgstr "" \ No newline at end of file diff --git a/ubl-settings-usergroups_ru.po b/ubl-settings-usergroups_ru.po index 709c47c..5197919 100644 --- a/ubl-settings-usergroups_ru.po +++ b/ubl-settings-usergroups_ru.po @@ -742,3 +742,10 @@ msgstr "Домашний каталог" #: source/ubl-strings.h:207 msgid "Delete home directory" msgstr "Удалить домашний каталог" + + +msgid "UID already busy" +msgstr "UID уже существует" + +msgid "GID already busy" +msgstr "GID уже существует" \ No newline at end of file From bec968914410312f39b8d86037449c9249186793 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Tue, 1 Oct 2024 15:17:34 +0600 Subject: [PATCH 4/5] Create with ununique check disables UID/GID checking --- source/ubl-settings-usergroups.c | 53 +++++++++++++++++--------------- 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/source/ubl-settings-usergroups.c b/source/ubl-settings-usergroups.c index 484b89e..e9b4ffd 100644 --- a/source/ubl-settings-usergroups.c +++ b/source/ubl-settings-usergroups.c @@ -1375,20 +1375,21 @@ void on_group_save(GtkWidget *self, dictionary *dict){ 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.groups,main_config.groups_size,config_users,config_size,&final_size); - - int found=0; - char *uid_string = (char*)gtk_entry_get_text(GTK_ENTRY(window->userUIDEntry)); - for (int i=0;i1&&!strcmp(parsed[2],uid_string)&&strcmp(parsed[2],window->last_gid)) found = 1; - if (parsed_size) yon_char_parsed_free(parsed,parsed_size); - } - if (found){ - yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),GID_ALREADY_EXIST_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - yon_ubl_status_highlight_incorrect(window->userUIDEntry); - return; + 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;i1&&!strcmp(parsed[2],uid_string)&&strcmp(parsed[2],window->last_gid)) found = 1; + if (parsed_size) yon_char_parsed_free(parsed,parsed_size); + } + if (found){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),GID_ALREADY_EXIST_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)); @@ -1989,18 +1990,20 @@ void on_user_save(GtkWidget *self, dictionary *dict){ 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); - int found=0; uid_string = (char*)gtk_entry_get_text(GTK_ENTRY(window->userUIDEntry)); - for (int i=0;i1&&!strcmp(parsed[2],uid_string)&&strcmp(parsed[2],window->last_uid)) found = 1; - if (parsed_size) yon_char_parsed_free(parsed,parsed_size); - } - if (found){ - yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),UID_ALREADY_EXIST_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - yon_ubl_status_highlight_incorrect(window->userUIDEntry); - return; + if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userCreateUnuniqueCheck))){ + int found=0; + for (int i=0;i1&&!strcmp(parsed[2],uid_string)&&strcmp(parsed[2],window->last_uid)) found = 1; + if (parsed_size) yon_char_parsed_free(parsed,parsed_size); + } + if (found){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),UID_ALREADY_EXIST_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + yon_ubl_status_highlight_incorrect(window->userUIDEntry); + return; + } } if (yon_char_is_empty(uid_string)){ From d51522f8265dbe93ff2cfe448f6fb6498ae9208f Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Tue, 1 Oct 2024 15:45:45 +0600 Subject: [PATCH 5/5] Fixed render of locked column at users in system window --- source/ubl-settings-usergroups.c | 2 +- ubl-settings-usergroups-system.glade | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/source/ubl-settings-usergroups.c b/source/ubl-settings-usergroups.c index e9b4ffd..ab69b16 100644 --- a/source/ubl-settings-usergroups.c +++ b/source/ubl-settings-usergroups.c @@ -1807,7 +1807,7 @@ void yon_system_load(ubl_settings_usergroups_system_window *window){ g_date_time_unref(date); } - gtk_list_store_set(window->liststore1,&iter,8,parsed_size>2?date_string:"",9,expiration_string,10,parsed_size>3?parsed[3]:"",11,parsed_size>4?parsed[4]:"",12,parsed_size>5?parsed[5]:"",13,parsed_size>2?parsed[6]:"",-1); + gtk_list_store_set(window->liststore1,&iter,0,!strcmp(parsed[1],"!*"),8,parsed_size>2?date_string:"",9,expiration_string,10,parsed_size>3?parsed[3]:"",11,parsed_size>4?parsed[4]:"",12,parsed_size>5?parsed[5]:"",13,parsed_size>2?parsed[6]:"",-1); } } } diff --git a/ubl-settings-usergroups-system.glade b/ubl-settings-usergroups-system.glade index 18d4aa7..c9aedfb 100644 --- a/ubl-settings-usergroups-system.glade +++ b/ubl-settings-usergroups-system.glade @@ -143,6 +143,9 @@ Locked + + 0 +