Merge pull request 'master' (#183) from YanTheKaller/ubl-settings-usergroups:master into master

Reviewed-on: #183
pull/235/head v2.19
Dmitry Razumov 1 year ago
commit d85355a75f

@ -874,8 +874,42 @@ void on_groups_clicked(GtkWidget *self, GtkEntry *output_target){
} }
free(groupname); 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_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); 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;k<strlen(current_group);k++){
if (g_ascii_isdigit(current_group[k])){
digits++;
}
}
char *final_group_name=NULL;
if (digits==strlen(current_group)){
for (int i=0;i<main_config.groups_size;i++){
int group_size=0;
config_str groups_parsed = yon_char_parse(main_config.groups[i],&group_size,":");
if (group_size>2&&!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; 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,"window",window);
yon_dictionary_add_or_create_if_exists_with_data(dict,"output",output_target); yon_dictionary_add_or_create_if_exists_with_data(dict,"output",output_target);
@ -908,6 +942,7 @@ void on_groups_multiple_save(GtkWidget *self, dictionary *dict){
void on_groups_multiple_clicked(GtkWidget *self, GtkEntry *output_target){ void on_groups_multiple_clicked(GtkWidget *self, GtkEntry *output_target){
ubl_settings_usergroups_group_window *window = yon_ubl_settings_usergroups_group_new(0); 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_window_set_title(GTK_WINDOW(window->GroupsWindow),ADDITIONAL_GROUPS_TITLE_LABEL);
gtk_label_set_text(GTK_LABEL(window->HeaderLabel),ADDITIONAL_GROUPS_TITLE_LABEL); gtk_label_set_text(GTK_LABEL(window->HeaderLabel),ADDITIONAL_GROUPS_TITLE_LABEL);
GtkTreeIter iter, itar,itor; GtkTreeIter iter, itar,itor;
@ -1233,6 +1268,7 @@ void on_user_choose(GtkWidget *self, GtkEntry *target){
ubl_settings_usergroups_group_window *window = yon_ubl_settings_usergroups_group_new(1); 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_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); gtk_tree_view_column_set_title(GTK_TREE_VIEW_COLUMN(window->GroupColumn),USERS_LABEL);
GtkTreeIter iter, itar,itor; GtkTreeIter iter, itar,itor;
char *output = (char*)gtk_entry_get_text(target); char *output = (char*)gtk_entry_get_text(target);
@ -1334,6 +1370,28 @@ 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);
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;i<final_size;i++){
int parsed_size;
config_str parsed = yon_char_parse(final[i],&parsed_size,":");
printf("%s / %s\n",parsed[2],uid_string);
if (parsed_size>1&&!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)); group_name = (char*)gtk_entry_get_text(GTK_ENTRY(window->userLoginEntry));
if (group_name[0]>'0'&&group_name[0]<'9'){ if (group_name[0]>'0'&&group_name[0]<'9'){
yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),GROUP_BEGINS_WITH_DIGIT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),GROUP_BEGINS_WITH_DIGIT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE);
@ -1506,8 +1564,8 @@ ubl_settings_usergroups_group_window *yon_ubl_settings_usergroups_group_new(int
window->HeaderLabel=yon_gtk_builder_get_widget(builder,"HeaderLabel"); window->HeaderLabel=yon_gtk_builder_get_widget(builder,"HeaderLabel");
window->StatusCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"StatusCell")); window->StatusCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"StatusCell"));
window->GroupColumn = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(builder,"GroupColumn")); 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); 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),1,GTK_SORT_ASCENDING); 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"); yon_window_config_custom_window_setup(GTK_WINDOW(window->GroupsWindow),"GroupWindow");
gtk_window_set_title(GTK_WINDOW(window->GroupsWindow),GROUPS_TITLE_LABEL); gtk_window_set_title(GTK_WINDOW(window->GroupsWindow),GROUPS_TITLE_LABEL);
@ -1523,10 +1581,13 @@ ubl_settings_usergroups_group_window *yon_ubl_settings_usergroups_group_new(int
current_size = main_config.groups_size; current_size = main_config.groups_size;
} }
for (int i=0;i<current_size;i++){ for (int i=0;i<current_size;i++){
char *group_record = yon_char_new(current[i]); int parsed_size=0;
char *group_name = yon_char_divide_search(group_record,":",-1); 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_append(window->list,&iter);
gtk_list_store_set(window->list,&iter,0,0,1,group_name,-1); 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)); gtk_tree_view_set_model(GTK_TREE_VIEW(window->GroupsTree),GTK_TREE_MODEL(window->list));
@ -1559,6 +1620,7 @@ void on_standard_groups_open(GtkWidget *self, main_window *widgets){
ubl_settings_usergroups_group_window *window = yon_ubl_settings_usergroups_group_new(0); 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_window_set_title(GTK_WINDOW(window->GroupsWindow),DEFAULT_GROUPS_TITLE_LABEL);
gtk_label_set_text(GTK_LABEL(window->HeaderLabel),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; GtkTreeIter iter, itar,itor;
int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(main_config.groups_list),&iter); 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)){ for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(main_config.groups_list),&iter)){
@ -1745,7 +1807,7 @@ void yon_system_load(ubl_settings_usergroups_system_window *window){
g_date_time_unref(date); 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);
} }
} }
} }
@ -1922,7 +1984,28 @@ void on_user_save(GtkWidget *self, dictionary *dict){
if (uid_auto_active){ if (uid_auto_active){
uid_string=""; uid_string="";
} else { } 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)); uid_string = (char*)gtk_entry_get_text(GTK_ENTRY(window->userUIDEntry));
if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userCreateUnuniqueCheck))){
int found=0;
for (int i=0;i<final_size;i++){
int parsed_size;
config_str parsed = yon_char_parse(final[i],&parsed_size,":");
if (parsed_size>1&&!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)){ 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_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE);
yon_ubl_status_highlight_incorrect(window->userUIDEntry); yon_ubl_status_highlight_incorrect(window->userUIDEntry);
@ -2531,6 +2614,7 @@ void on_main_edit(GtkWidget *self, main_window *widgets){
if (!strcmp(parameters[2],"x")) if (!strcmp(parameters[2],"x"))
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->userGroupsCheck),1); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->userGroupsCheck),1);
else { 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]:""); gtk_entry_set_text(GTK_ENTRY(window->userGroupsEntry), parsed_size>2?parameters[2]:"");
if (!yon_char_is_empty(parameters[2])) if (!yon_char_is_empty(parameters[2]))
window->last_uid=yon_char_new(parameters[2]); window->last_uid=yon_char_new(parameters[2]);

@ -184,6 +184,9 @@
#define PASSWORD_NO_SET_LABEL _("Not specified") #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 //ubl-settings-usergroups-password.glade
#define PASSWORD_REPEAT_LABEL _("Repeat password:") #define PASSWORD_REPEAT_LABEL _("Repeat password:")
#define PASSWORD_HASH_LABEL _("Password hash:") #define PASSWORD_HASH_LABEL _("Password hash:")

@ -40,7 +40,7 @@
<object class="GtkTreeView" id="GroupsTree"> <object class="GtkTreeView" id="GroupsTree">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="search-column">1</property> <property name="search-column">2</property>
<property name="enable-grid-lines">vertical</property> <property name="enable-grid-lines">vertical</property>
<child internal-child="selection"> <child internal-child="selection">
<object class="GtkTreeSelection"> <object class="GtkTreeSelection">
@ -58,10 +58,22 @@
</child> </child>
</object> </object>
</child> </child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">ID</property>
<property name="sort-indicator">True</property>
<property name="sort-column-id">2</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">2</attribute>
</attributes>
</child>
</object>
</child>
<child> <child>
<object class="GtkTreeViewColumn" id="GroupColumn"> <object class="GtkTreeViewColumn" id="GroupColumn">
<property name="title" translatable="yes">Group</property> <property name="title" translatable="yes">Group</property>
<property name="sort-indicator">True</property>
<property name="sort-order">descending</property> <property name="sort-order">descending</property>
<property name="sort-column-id">1</property> <property name="sort-column-id">1</property>
<child> <child>

@ -143,6 +143,9 @@
<property name="title" translatable="yes">Locked</property> <property name="title" translatable="yes">Locked</property>
<child> <child>
<object class="GtkCellRendererToggle"/> <object class="GtkCellRendererToggle"/>
<attributes>
<attribute name="active">0</attribute>
</attributes>
</child> </child>
</object> </object>
</child> </child>

@ -703,3 +703,9 @@ msgstr ""
msgid "Are you sure want to delete user" msgid "Are you sure want to delete user"
msgstr "" msgstr ""
msgid "UID already busy"
msgstr ""
msgid "GID already busy"
msgstr ""

@ -742,3 +742,10 @@ msgstr "Домашний каталог"
#: source/ubl-strings.h:207 #: source/ubl-strings.h:207
msgid "Delete home directory" msgid "Delete home directory"
msgstr "Удалить домашний каталог" msgstr "Удалить домашний каталог"
msgid "UID already busy"
msgstr "UID уже существует"
msgid "GID already busy"
msgstr "GID уже существует"
Loading…
Cancel
Save