diff --git a/source/ubl-settings-usergroups-settings.c b/source/ubl-settings-usergroups-settings.c index 9a64078..d2ac761 100644 --- a/source/ubl-settings-usergroups-settings.c +++ b/source/ubl-settings-usergroups-settings.c @@ -87,6 +87,38 @@ void on_additional_settings_changed(GtkWidget *self, ubl_settings_usergroups_add // } } + void on_additional_settings_user_sync_add(GtkWidget *, ubl_settings_usergroups_additional_settings_window *){ + + } + + void on_additional_settings_user_sync_remove(GtkWidget *, ubl_settings_usergroups_additional_settings_window *window){ + GtkTreeModel *model; + GtkTreeIter iter; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->UsersTree)),&model,&iter)){ + gboolean is_indeletable; + gtk_tree_model_get(model,&iter,4,&is_indeletable,-1); + if (!is_indeletable){ + gtk_list_store_remove(window->UsersShutdownList,&iter); + } + } + } + + void on_additional_settings_group_sync_add(GtkWidget *, ubl_settings_usergroups_additional_settings_window *){ + + } + + void on_additional_settings_group_sync_remove(GtkWidget *, ubl_settings_usergroups_additional_settings_window *window){ + GtkTreeModel *model; + GtkTreeIter iter; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->GroupsTree)),&model,&iter)){ + gboolean is_indeletable; + gtk_tree_model_get(model,&iter,4,&is_indeletable,-1); + if (!is_indeletable){ + gtk_list_store_remove(window->GroupsShutdownList,&iter); + } + } + } + ubl_settings_usergroups_additional_settings_window *yon_ubl_settings_usergroups_additional_settings_new(){ ubl_settings_usergroups_additional_settings_window *window = malloc(sizeof(ubl_settings_usergroups_additional_settings_window)); GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_ubl_settings_usergroups_additional_settings); @@ -116,6 +148,8 @@ ubl_settings_usergroups_additional_settings_window *yon_ubl_settings_usergroups_ window->GroupsTree=yon_gtk_builder_get_widget(builder,"GroupsTree"); window->GroupAddButton=yon_gtk_builder_get_widget(builder,"GroupAddButton"); window->GroupRemoveButton=yon_gtk_builder_get_widget(builder,"GroupRemoveButton"); + window->UsersShutdownList=GTK_LIST_STORE(gtk_builder_get_object(builder,"UsersShutdownList")); + window->GroupsShutdownList=GTK_LIST_STORE(gtk_builder_get_object(builder,"GroupsShutdownList")); window->default_password=NULL; window->default_root_password=NULL; @@ -124,6 +158,16 @@ ubl_settings_usergroups_additional_settings_window *yon_ubl_settings_usergroups_ window->user_shutdown=-1; window->user_boot=-1; window->password_hash=NULL; + + g_signal_connect(G_OBJECT(window->UserAddButton),"clicked",G_CALLBACK(on_additional_settings_user_sync_add),window); + g_signal_connect(G_OBJECT(window->UserRemoveButton),"clicked",G_CALLBACK(on_additional_settings_user_sync_remove),window); + g_signal_connect(G_OBJECT(window->GroupAddButton),"clicked",G_CALLBACK(on_additional_settings_group_sync_add),window); + g_signal_connect(G_OBJECT(window->GroupRemoveButton),"clicked",G_CALLBACK(on_additional_settings_group_sync_remove),window); + + g_signal_connect(G_OBJECT(window->UsersShutdownSwitch),"activate",G_CALLBACK(on_additional_settings_changed),window); + g_signal_connect(G_OBJECT(window->GroupsShutdownSwitch),"activate",G_CALLBACK(on_additional_settings_changed),window); + yon_gtk_revealer_set_from_switch(GTK_REVEALER(window->UserShutdownRevealer),GTK_SWITCH(window->UsersShutdownSwitch)); + yon_gtk_revealer_set_from_switch(GTK_REVEALER(window->GroupShutdownRevealer),GTK_SWITCH(window->GroupsShutdownSwitch)); yon_window_config_custom_window_setup(GTK_WINDOW(window->Window),"AdditionalSettingsWindow"); gtk_window_set_title(GTK_WINDOW(window->Window),ADDITIONAL_SETTINGS_TITLE_LABEL); @@ -211,10 +255,14 @@ ubl_settings_usergroups_additional_settings_window *yon_ubl_settings_usergroups_ int sync_parsed_size; config_str sync_parsed = yon_char_parse(sync_parameters[j],&sync_parsed_size,":"); int cur_size; - int yes = yon_parameter_check_tag(parsed[i],sync_parsed[0]); - if (yes) { - config_str cur = yon_parameter_get_by_template(parsed[i],sync_parameters[i],&cur_size); - if (cur){}; + int sync_check = yon_parameter_check_tag(parsed[i],sync_parsed[0]); + if (sync_check) { + config_str cur = yon_parameter_get_by_template(parsed[i],sync_parsed[0],&cur_size); + if (cur){ + GtkTreeIter iter; + gtk_list_store_append(window->UsersShutdownList,&iter); + gtk_list_store_set(window->UsersShutdownList,&iter,1,sync_parsed[0],2,cur[0],3,cur_size>1?cur[1]:"",-1); + }; } yon_char_parsed_free(sync_parsed,sync_parsed_size); } @@ -248,11 +296,7 @@ ubl_settings_usergroups_additional_settings_window *yon_ubl_settings_usergroups_ g_signal_connect(G_OBJECT(window->PasswordHashCombo),"changed",G_CALLBACK(on_additional_settings_changed),window); g_signal_connect(G_OBJECT(window->DefaultUserAdministratorCheck),"toggled",G_CALLBACK(on_additional_settings_changed),window); g_signal_connect(G_OBJECT(window->UsersBootCheck),"toggled",G_CALLBACK(on_additional_settings_changed),window); - g_signal_connect(G_OBJECT(window->UsersShutdownSwitch),"activate",G_CALLBACK(on_additional_settings_changed),window); g_signal_connect(G_OBJECT(window->GroupsBootCheck),"toggled",G_CALLBACK(on_additional_settings_changed),window); - g_signal_connect(G_OBJECT(window->GroupsShutdownSwitch),"activate",G_CALLBACK(on_additional_settings_changed),window); - yon_gtk_revealer_set_from_switch(GTK_REVEALER(window->UserShutdownRevealer),GTK_SWITCH(window->UsersShutdownSwitch)); - yon_gtk_revealer_set_from_switch(GTK_REVEALER(window->GroupShutdownRevealer),GTK_SWITCH(window->GroupsShutdownSwitch)); // g_signal_connect(G_OBJECT(window->UsersBootCheck),"toggled",G_CALLBACK(on_users_boot_toggled),NULL); // g_signal_connect(G_OBJECT(window->UsersShutdownCheck),"toggled",G_CALLBACK(on_users_shutdown_toggled),NULL); @@ -290,7 +334,7 @@ config_str yon_parameter_parse(char *parameter, int *size){ } int yon_parameter_check_tag(char *parameter, char *pattern){ - char *tag_template = "<([^>]+)>"; + char *tag_template = "[0-9]{1,}"; char *converted = ""; char *current = pattern; while (!yon_char_is_empty(current)){ @@ -314,7 +358,9 @@ int yon_parameter_check_tag(char *parameter, char *pattern){ if (regex){ GMatchInfo *match; if (g_regex_match(regex,parameter,0,&match)){ - return 1; + char *value = g_match_info_fetch(match, 0); + if (!strcmp(parameter,value)) + return 1; } } @@ -324,7 +370,7 @@ int yon_parameter_check_tag(char *parameter, char *pattern){ config_str yon_parameter_get_by_template(char *parameter, char *pattern, int *size){ config_str final = NULL; - char *tag_template = "<([^>]+)>"; + char *tag_template = "[0-9]{1,}"; char *converted = ""; char *current = pattern; while (!yon_char_is_empty(current)){ @@ -337,20 +383,23 @@ config_str yon_parameter_get_by_template(char *parameter, char *pattern, int *si // закрытие тэга не найдено } } else { - yon_char_append_c(converted,*current); + char *temp = yon_char_append_c(converted,*current); + if (!yon_char_is_empty(converted)) free(converted); + converted=temp; current++; } } - GRegex *regex = g_regex_new(converted,G_REGEX_EXTENDED,0,NULL); + GRegex *regex = g_regex_new("[0-9]{1,}",G_REGEX_EXTENDED,0,NULL); if (regex){ GMatchInfo *match; - if (g_regex_match(regex,parameter,0,&match)){ - int match_count = g_match_info_get_match_count(match); - for (int i=0;i - + + + + + + + + + + True + All groups in system + 1 + 65535 + True + True + + + False + Groups + 1000 + 6000 + True + False + + + False + System groups + 500 + 999 + True + False + + + False + Group GID range + 0 + 0 + True + False + + + False + Group GID in system + 0 + 0 + True + False + + @@ -20,10 +68,56 @@ - + - + + + + + + + + True + All system users + 1 + 65535 + True + True + + + False + Users + 1000 + 6000 + True + False + + + False + System users + 500 + 999 + True + False + + + False + Users UID range + 0 + 0 + True + False + + + False + User UID in system + 0 + 0 + True + False + + True @@ -512,10 +606,16 @@ True UsersShutdownList both + + + - + + + 0 + @@ -524,14 +624,22 @@ Syncronization type + + 1 + - Minimal UID + Minimum UID - + + 5 + + + 2 + @@ -539,7 +647,12 @@ Maximum UID - + + 5 + + + 3 + @@ -601,7 +714,7 @@ - False + True True 1 @@ -714,35 +827,55 @@ True GroupsShutdownList both + + + - - column + + + 0 + - column + Syncronization type + + 1 + - column + Minimum GID - + + True + 5 + + + 2 + - column + Maximum GID - + + True + 5 + + + 3 + @@ -804,7 +937,7 @@ - False + True True 1