From 638dc88b6b4bd34e730453b4ed28cf69a5c93f88 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Mon, 9 Jun 2025 07:38:43 +0000 Subject: [PATCH] Fixed user and group editing --- locale/ubl-settings-usergroups.pot | 12 ++++++++++ locale/ubl-settings-usergroups_ru.po | 12 ++++++++++ source/ubl-settings-usergroups-system.c | 31 ++++++++++++++----------- source/ubl-settings-usergroups-user.c | 15 ++++++++---- source/ubl-settings-usergroups.c | 19 ++++++++++----- source/ubl-strings.h | 4 ++++ ubl-settings-usergroups.glade | 13 +++++++++-- 7 files changed, 80 insertions(+), 26 deletions(-) diff --git a/locale/ubl-settings-usergroups.pot b/locale/ubl-settings-usergroups.pot index c886ac7..6449cfb 100644 --- a/locale/ubl-settings-usergroups.pot +++ b/locale/ubl-settings-usergroups.pot @@ -966,3 +966,15 @@ msgid "" "Some of users, chosen for deletion, are included as main group for other " "users. This users will get default main group after reboot" msgstr "" + +#: source/ubl-strings.h:282 +msgid "User auth with password is blocked for user.\nOther access methods are allowed (key auth, user switching etc)." +msgstr "" + +#: source/ubl-strings.h:282 +msgid "User auth is forbidden" +msgstr "" + +#: source/ubl-strings.h:282 +msgid "User auth with password is allowed" +msgstr "" diff --git a/locale/ubl-settings-usergroups_ru.po b/locale/ubl-settings-usergroups_ru.po index 13b377f..34945a9 100644 --- a/locale/ubl-settings-usergroups_ru.po +++ b/locale/ubl-settings-usergroups_ru.po @@ -1038,3 +1038,15 @@ msgstr "" "Часть пользователей выбранных на удаление используются как основные группы " "других пользователей. После перезагрузки эти пользователи получат основную " "группу по умолчанию" + +#: source/ubl-strings.h:282 +msgid "User auth with password is blocked for user.\nOther access methods are allowed (key auth, user switching etc)." +msgstr "Аутентификация с помощью пароля заблокирована для пользователя.\nОсталные методы входа разрешены (аутентификаци яна основе ключей, переключение на пользователя и т.д.)" + +#: source/ubl-strings.h:282 +msgid "User auth is forbidden" +msgstr "Аутентификация пользователя запрещена" + +#: source/ubl-strings.h:282 +msgid "User auth with password is allowed" +msgstr "Аутентификация пользователя разрешена" diff --git a/source/ubl-settings-usergroups-system.c b/source/ubl-settings-usergroups-system.c index 06f59c4..c266989 100644 --- a/source/ubl-settings-usergroups-system.c +++ b/source/ubl-settings-usergroups-system.c @@ -59,24 +59,26 @@ void yon_remove_confirmation_window_accept_clicked(GtkWidget *self,dictionary *d 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; + GtkTreeIter iter, itar,child; 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); + yon_tree_model_sort_filter_get_model_iter(GTK_TREE_MODEL_SORT(model),&iter,&child); + gtk_tree_model_get(model,&child,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); + yon_tree_model_sort_filter_get_child_iter(GTK_TREE_MODEL_SORT(widgets->ConfigUsersSort),&itar,&child); + gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->UsersTree)),&child); break; } } gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->MainNotebook),0); yon_delete_confirmation_open(widgets); } else if (self == window->AcceptButton || self == window->SystemAcceptButton) { - GtkTreeIter iter, itar; + GtkTreeIter iter, itar,child; GtkTreeModel *model; char *target; if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemGroupsTree)),&model,&iter)){ @@ -86,7 +88,8 @@ void yon_remove_confirmation_window_accept_clicked(GtkWidget *self,dictionary *d 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); + yon_tree_model_sort_filter_get_child_iter(GTK_TREE_MODEL_SORT(widgets->ConfigUsersSort),&itar,&child); + gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->GroupsTree)),&child); break; } } @@ -104,19 +107,21 @@ void yon_remove_confirmation_window_accept_clicked(GtkWidget *self,dictionary *d yon_gtk_window_setup(GTK_WINDOW(dialog->Window),GTK_WINDOW(widgets->Window),DELETE_CONFIRMATION_TITLE_LABEL,icon_path,"delete-system-user-window"); g_signal_connect(G_OBJECT(dialog->AcceptButton),"clicked",G_CALLBACK(on_delete_system_user),dact); GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->SystemTree)); - GtkTreeIter iter; + GtkTreeIter iter,child; if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemTree)),&model,&iter)){ + yon_tree_model_sort_filter_get_model_iter(GTK_TREE_MODEL_SORT(model),&iter,&child); 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_tree_model_get(model,&child,2,&name,3,&username,6,&homedir,-1); + gtk_list_store_append(dialog->list,&child); + gtk_list_store_set(dialog->list,&child,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; + GtkTreeIter iter,child; if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemGroupsTree)),&model,&iter)){ + yon_tree_model_sort_filter_get_model_iter(GTK_TREE_MODEL_SORT(model),&iter,&child); yon_gtk_window_setup(GTK_WINDOW(dialog->Window),GTK_WINDOW(widgets->Window),DELETE_GROUP_CONFIRMATION_TITLE_LABEL,icon_path,"delete-system-gruop-window"); g_signal_connect(G_OBJECT(dialog->AcceptButton),"clicked",G_CALLBACK(on_delete_system_group),dact); gtk_widget_show(window->AcceptButton); @@ -130,9 +135,9 @@ void yon_remove_confirmation_window_accept_clicked(GtkWidget *self,dictionary *d 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_tree_model_get(model,&child,1,&name,-1); + gtk_list_store_append(dialog->list,&child); + gtk_list_store_set(dialog->list,&child,0,1,1,name,-1); gtk_widget_show(dialog->Window); } } diff --git a/source/ubl-settings-usergroups-user.c b/source/ubl-settings-usergroups-user.c index 3cd23fd..e7b576e 100644 --- a/source/ubl-settings-usergroups-user.c +++ b/source/ubl-settings-usergroups-user.c @@ -380,7 +380,10 @@ void on_user_save(GtkWidget *self, dictionary *dict){ char *cur; gtk_tree_model_get(model,&iter,2, &cur,-1); if (!yon_char_is_empty(cur)&&!strcmp(cur,login)){ - if (!gtk_tree_selection_iter_is_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->UsersTree)),&iter)){ + GtkTreeIter child,sort; + gtk_tree_model_filter_convert_child_iter_to_iter(GTK_TREE_MODEL_FILTER(widgets->ConfigUsersFilter),&child,&iter); + gtk_tree_model_sort_convert_child_iter_to_iter(GTK_TREE_MODEL_SORT(widgets->ConfigUsersSort),&sort,&child); + if (!gtk_tree_selection_iter_is_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->UsersTree)),&sort)){ yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),USER_EXIST_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); yon_ubl_status_highlight_incorrect(window->userLoginEntry); @@ -607,10 +610,11 @@ void on_user_sync_with_config(GtkWidget *,main_window *widgets){ switch (active){ case 2:{ GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore1); - GtkTreeIter iter; + GtkTreeIter iter,child; 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); + yon_tree_model_sort_filter_get_model_iter(GTK_TREE_MODEL_SORT(model),&iter,&child); + gtk_tree_model_get(GTK_TREE_MODEL(widgets->liststore1),&child,2,&target,-1); dialog_confirmation_data *data = yon_confirmation_dialog_data_new(); if (config(USERADD(target))){ data->action_text = SYSTEM_USER_SYNC_CONFIRMATION_LABEL(target); @@ -662,11 +666,12 @@ void on_user_sync_with_config(GtkWidget *,main_window *widgets){ }break; case 3:{ GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore1); - GtkTreeIter iter; + GtkTreeIter iter,child; 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); + yon_tree_model_sort_filter_get_model_iter(GTK_TREE_MODEL_SORT(model),&iter,&child); + gtk_tree_model_get(GTK_TREE_MODEL(widgets->liststore2),&child,1,&target,-1); dialog_confirmation_data *data = yon_confirmation_dialog_data_new(); if (config(GROUPADD(target))){ data->action_text = SYSTEM_GROUP_ADD_CONFIRMATION_LABEL(target); diff --git a/source/ubl-settings-usergroups.c b/source/ubl-settings-usergroups.c index 05c7579..082f5e5 100644 --- a/source/ubl-settings-usergroups.c +++ b/source/ubl-settings-usergroups.c @@ -105,10 +105,11 @@ void yon_interface_update(main_window *widgets){ parameters[0]=""; if (parameters_size>1&&!strcmp(parameters[1],"x")) parameters[1]=""; if (parameters_size>2&&!strcmp(parameters[2],"x")) parameters[2]=login; - char *pars = ""; + char *pars = NULL; + char *tooltip = AUTH_ALLOWED_LABEL; if (parameters_size>5&&strcmp(parameters[5],"x")&&strcmp(parameters[5],"")){ - if (!check_is_password_hash(parameters[5])&¶meters[5][0]!='%'&¶meters[5][1]!='%'){ + if (!check_is_password_hash(parameters[5])||(parameters[5][0]!='%'&¶meters[5][1]!='%')){ pars = ENCRYPTED_LABEL; } else if (!strcmp(parameters[5]," ")){ pars = NO_PASSWORD_LABEL; @@ -116,9 +117,10 @@ void yon_interface_update(main_window *widgets){ pars = DENY_LOGIN_LABEL; } else if (parameters[5][0]=='!'){ pars = BLOCK_LOGIN_LABEL; + tooltip = AUTH_FORBIDDEN_LABEL; } else { pars = UNENCRYPTED_LABEL; - + tooltip = AUTH_PASSWORD_LOCKED_LABEL; } } else { pars = DEFAULT_USER_LABEL; @@ -132,7 +134,8 @@ void yon_interface_update(main_window *widgets){ 4,parameters_size>2&&!yon_char_is_empty(parameters[2])?parameters[2]:login, 5,parameters_size>3?!strcmp(parameters[3],"x")||!strcmp(parameters[3],"")?def_groups:parameters[3]:def_groups, 6,parameters_size>4?!strcmp(parameters[4],"x")?"":parameters[4]:"", - 7,pars, + 7,!yon_char_is_empty(pars)?pars:"", + 8,!yon_char_is_empty(tooltip)?tooltip:"", -1); if(parameters) free(parameters); @@ -159,6 +162,7 @@ void yon_interface_update(main_window *widgets){ } if (parameters_size>1&&!strcmp(parameters[1],"x")) parameters[1]=""; char *pars=""; + char *tooltip=AUTH_ALLOWED_LABEL; if (parameters_size>4&&strcmp(parameters[4],"x")&&strcmp(parameters[4],"")){ if (!check_is_password_hash(parameters[4])&¶meters[4][0]!='%'&¶meters[4][1]!='%'){ pars = ENCRYPTED_LABEL; @@ -166,8 +170,10 @@ void yon_interface_update(main_window *widgets){ pars = NO_PASSWORD_LABEL; } else if (!strcmp(parameters[4],"!*")){ pars = DENY_LOGIN_LABEL; + tooltip = AUTH_FORBIDDEN_LABEL; } else if (parameters[4][0]=='!'){ pars = BLOCK_LOGIN_LABEL; + tooltip = AUTH_PASSWORD_LOCKED_LABEL; } else { pars = UNENCRYPTED_LABEL; @@ -182,6 +188,7 @@ void yon_interface_update(main_window *widgets){ 2,parameters_size>1?parameters[0]:"", 3,parameters_size>3?parameters[3]:"", 4,pars, + 5,tooltip, -1); if(parameters) free(parameters); @@ -1668,7 +1675,7 @@ void on_main_edit(GtkWidget *, main_window *widgets){ } } else { - model = GTK_TREE_MODEL(widgets->GroupsList); + model = GTK_TREE_MODEL(widgets->ConfigGroupsSort); if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->GroupsTree)),&model,&iter)){ ubl_settings_usergroups_group_creation_window *window = yon_ubl_settings_usergroups_group_creation_new(); gtk_window_set_title(GTK_WINDOW(window->CreateGroupWindow),CONFIGURE_GROUP_TITLE_LABEL); @@ -1679,7 +1686,7 @@ void on_main_edit(GtkWidget *, main_window *widgets){ g_signal_connect(G_OBJECT(window->UserOkButton),"clicked",G_CALLBACK(on_group_save),dict); char *name; yon_tree_model_sort_filter_get_model_iter(GTK_TREE_MODEL_SORT(model),&iter,&child); - gtk_tree_model_get(model,&child,1,&name,-1); + gtk_tree_model_get(GTK_TREE_MODEL(widgets->GroupsList),&child,1,&name,-1); char *config_string = yon_config_get_by_key(GROUPADD(name)); char *sync_string = config(GROUPADD_SYNC(name)); if (!yon_char_is_empty(config_string)){ diff --git a/source/ubl-strings.h b/source/ubl-strings.h index 6c1bf8f..0dcbb88 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -281,3 +281,7 @@ #define CONFIRMATION_GROUP_DEPENDS_SINGLE_LABEL(target,depends) yon_char_unite(_("User(-s)")," \"",depends,"\" ",_("is included into main group of users")," \"",target,"\", ",_("which will be deleted"),".\n",_("After reboot users")," ",depends," ",_("main group will be set to default group"),".",NULL) #define CONFIRMATION_GROUP_DEPENDS_MULTIPLE_LABEL _("Some of users, chosen for deletion, are included as main group for other users. This users will get default main group after reboot") + +#define AUTH_ALLOWED_LABEL _("User auth with password is allowed") +#define AUTH_FORBIDDEN_LABEL _("User auth is forbidden") +#define AUTH_PASSWORD_LOCKED_LABEL _("User auth with password is blocked for user.\nOther access methods are allowed (key auth, user switching etc).") \ No newline at end of file diff --git a/ubl-settings-usergroups.glade b/ubl-settings-usergroups.glade index 1f99a13..4e49f63 100644 --- a/ubl-settings-usergroups.glade +++ b/ubl-settings-usergroups.glade @@ -1,5 +1,5 @@ - + + @@ -69,6 +71,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + @@ -422,7 +426,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ConfigUsersSort 2 both - 5 + 8 @@ -449,6 +453,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 10 10 UID + True 1 @@ -648,6 +653,7 @@ status ConfigGroupsSort 1 both + 5 @@ -657,6 +663,7 @@ status fixed 10 GID + True 0 @@ -843,6 +850,7 @@ status 50 UID True + True 1 @@ -1131,6 +1139,7 @@ without activity 50 GID True + True 0