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..7b0f1c6 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..6039b74 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);
@@ -625,8 +629,8 @@ void on_user_sync_with_config(GtkWidget *,main_window *widgets){
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);
+ char *user = yon_char_parsed_check_exist_begins_with(main_config.users,main_config.users_size,target);
+ char *shadow = yon_char_parsed_check_exist_begins_with(main_config.shadow,main_config.shadow_size,target);
yon_char_remove_last_symbol(user,'\n');
yon_char_remove_last_symbol(shadow,'\n');
int user_size=0;
@@ -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..c72dbda 100644
--- a/source/ubl-settings-usergroups.c
+++ b/source/ubl-settings-usergroups.c
@@ -105,20 +105,22 @@ 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]!='%'){
- pars = ENCRYPTED_LABEL;
- } else if (!strcmp(parameters[5]," ")){
+ if (!strcmp(parameters[5]," ")){
pars = NO_PASSWORD_LABEL;
} else if (!strcmp(parameters[5],"!*")){
pars = DENY_LOGIN_LABEL;
+ tooltip = AUTH_FORBIDDEN_LABEL;
} else if (parameters[5][0]=='!'){
pars = BLOCK_LOGIN_LABEL;
+ tooltip = AUTH_PASSWORD_LOCKED_LABEL;
+ } else if (!check_is_password_hash(parameters[5])||(parameters[5][0]!='%'&¶meters[5][1]!='%')){
+ pars = ENCRYPTED_LABEL;
} else {
pars = UNENCRYPTED_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,18 +162,20 @@ 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;
- } else if (!strcmp(parameters[4]," ")){
+ if (!strcmp(parameters[4]," ")){
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 if (!check_is_password_hash(parameters[4])&¶meters[4][0]!='%'&¶meters[4][1]!='%'){
+ pars = ENCRYPTED_LABEL;
} else {
pars = UNENCRYPTED_LABEL;
-
}
} else {
pars = DEFAULT_USER_LABEL;
@@ -182,6 +187,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 +1674,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 +1685,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)){
@@ -1917,7 +1923,7 @@ gboolean on_filter(GtkTreeModel* model, GtkTreeIter *iter, main_window *widgets)
}
} else {
- if (((atoi(uid)>=main_config.MINUID&&atoi(uid)<=main_config.MAXUID))||show_system){
+ if (yon_char_is_empty(uid)||((atoi(uid)>=main_config.MINUID&&atoi(uid)<=main_config.MAXUID))||show_system){
system_id_found = 1;
}
@@ -2264,6 +2270,10 @@ main_window *yon_main_window_complete(main_window *widgets){
g_signal_connect(G_OBJECT(widgets->SystemTree),"button-press-event",G_CALLBACK(on_system_menu_open),widgets->UsersMenu);
g_signal_connect(G_OBJECT(widgets->SystemGroupsTree),"button-press-event",G_CALLBACK(on_system_menu_open),widgets->GroupsMenu);
+ gtk_tree_view_column_clicked(gtk_tree_view_get_column(GTK_TREE_VIEW(widgets->UsersTree),1));
+ gtk_tree_view_column_clicked(gtk_tree_view_get_column(GTK_TREE_VIEW(widgets->GroupsTree),0));
+ gtk_tree_view_column_clicked(gtk_tree_view_get_column(GTK_TREE_VIEW(widgets->SystemTree),1));
+ gtk_tree_view_column_clicked(gtk_tree_view_get_column(GTK_TREE_VIEW(widgets->SystemGroupsTree),0));
yon_system_load(widgets);
gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(widgets->ConfigUsersFilter),(GtkTreeModelFilterVisibleFunc)on_filter,widgets,NULL);
diff --git a/source/ubl-strings.h b/source/ubl-strings.h
index 6c1bf8f..7b863e7 100644
--- a/source/ubl-strings.h
+++ b/source/ubl-strings.h
@@ -279,5 +279,9 @@
#define BLOCK_LOGIN_LABEL _("Block login with password")
#define UNBOCK_LOGIN_LABEL _("Unblock login with password")
-#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_SINGLE_LABEL(target,depends) yon_char_unite(_("User(-s)")," \"",target,"\" ",_("is included into main group of users")," \"",depends,"\", ",_("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 8283043..4e49f63 100644
--- a/ubl-settings-usergroups.glade
+++ b/ubl-settings-usergroups.glade
@@ -43,6 +43,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+