diff --git a/source/ubl-settings-usergroups-settings.c b/source/ubl-settings-usergroups-settings.c index 600a6fc..f4991de 100644 --- a/source/ubl-settings-usergroups-settings.c +++ b/source/ubl-settings-usergroups-settings.c @@ -121,8 +121,8 @@ void on_additional_settings_changed(GtkWidget *self, ubl_settings_usergroups_add } } - void on_additional_settings_group_sync_add(GtkWidget *, ubl_settings_usergroups_additional_settings_window *){ - + void on_additional_settings_group_sync_add(GtkWidget *, ubl_settings_usergroups_additional_settings_window *window){ + on_useradd_sync_changed(window); } void on_additional_settings_group_sync_remove(GtkWidget *, ubl_settings_usergroups_additional_settings_window *window){ @@ -135,6 +135,7 @@ void on_additional_settings_changed(GtkWidget *self, ubl_settings_usergroups_add gtk_list_store_remove(window->GroupsShutdownList,&iter); } } + on_useradd_sync_changed(window); } void on_additional_settings_cell_toggled(GtkCellRenderer *self, char *path, ubl_settings_usergroups_additional_settings_window *window){ @@ -162,6 +163,7 @@ void on_additional_settings_cell_toggled(GtkCellRenderer *self, char *path, ubl_ i++; } } + on_useradd_sync_changed(window); } void on_additional_settings_cell_edited(GtkCellRenderer *self, char *path, char *new_text, ubl_settings_usergroups_additional_settings_window *window){ @@ -200,6 +202,7 @@ GtkTreeIter iter; } } gtk_list_store_set(GTK_LIST_STORE(model),&iter,place_to_set,new_text,place_to_set==2?3:2,old_val,-1); + on_useradd_sync_changed(window); } void on_adiitional_settings_tree_selection_changed(GtkWidget *self, ubl_settings_usergroups_additional_settings_window *window){ @@ -227,6 +230,105 @@ void on_adiitional_settings_tree_selection_changed(GtkWidget *self, ubl_settings } } +void on_useradd_sync_changed(ubl_settings_usergroups_additional_settings_window *window){ + char *useradd_sync = ""; + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->UsersBootCheck))){ + useradd_sync = yon_char_new("boot"); + } + if (gtk_switch_get_active(GTK_SWITCH(window->UsersShutdownSwitch))){ + + GtkTreeIter iter; + for_iter(window->UsersShutdownList,&iter){ + int active; + char *min_str, max_str; + int sensitive; + char *parameter; + + gtk_tree_model_get(GTK_TREE_MODEL(window->UsersShutdownList),&iter,0,&active,2,&min_str,3,&max_str,6,&sensitive,9,¶meter,-1); + if (active&&sensitive){ + if (!strcmp(parameter,"shutdown@all")){ + char *temp = yon_char_unite(useradd_sync,!yon_char_is_empty(useradd_sync)?",":"",parameter,NULL); + if(!yon_char_is_empty(useradd_sync)) free(useradd_sync); + useradd_sync = temp; + } else if (!strcmp(parameter,"shutdown@users")){ + char *temp = yon_char_unite(useradd_sync,!yon_char_is_empty(useradd_sync)?",":"",parameter,NULL); + if(!yon_char_is_empty(useradd_sync)) free(useradd_sync); + useradd_sync = temp; + + } else if (!strcmp(parameter,"shutdown@systems")){ + char *temp = yon_char_unite(useradd_sync,!yon_char_is_empty(useradd_sync)?",":"",parameter,NULL); + if(!yon_char_is_empty(useradd_sync)) free(useradd_sync); + useradd_sync = temp; + + } else if (!strcmp(parameter,"shutdown@min-max")){ + char *temp = yon_char_unite(useradd_sync,!yon_char_is_empty(useradd_sync)?",":"","shutdown@",min_str,"-",max_str,NULL); + if(!yon_char_is_empty(useradd_sync)) free(useradd_sync); + useradd_sync = temp; + + } else if (!strcmp(parameter,"shutdown@uid")){ + char *temp = yon_char_unite(useradd_sync,!yon_char_is_empty(useradd_sync)?",":"","shutdown@",min_str,NULL); + if(!yon_char_is_empty(useradd_sync)) free(useradd_sync); + useradd_sync = temp; + + } + } + } + } + if (!yon_char_is_empty(useradd_sync)){ + yon_config_register(USERADD_SYNC_parameter,USERADD_SYNC_get_command,useradd_sync); + } else { + yon_config_remove_by_key(USERADD_SYNC_parameter); + } + + char *groupadd_sync = ""; + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->UsersBootCheck))){ + groupadd_sync = yon_char_new("boot"); + } + if (gtk_switch_get_active(GTK_SWITCH(window->UsersShutdownSwitch))){ + GtkTreeIter iter; + for_iter(window->UsersShutdownList,&iter){ + int active; + char *min_str, max_str; + int sensitive; + char *parameter; + + gtk_tree_model_get(GTK_TREE_MODEL(window->UsersShutdownList),&iter,0,&active,2,&min_str,3,&max_str,6,&sensitive,9,¶meter,-1); + if (active&&sensitive){ + if (!strcmp(parameter,"shutdown@all")){ + char *temp = yon_char_unite(groupadd_sync,!yon_char_is_empty(groupadd_sync)?",":"",parameter,NULL); + if(!yon_char_is_empty(groupadd_sync)) free(groupadd_sync); + groupadd_sync = temp; + } else if (!strcmp(parameter,"shutdown@users")){ + char *temp = yon_char_unite(groupadd_sync,!yon_char_is_empty(groupadd_sync)?",":"",parameter,NULL); + if(!yon_char_is_empty(groupadd_sync)) free(groupadd_sync); + groupadd_sync = temp; + + } else if (!strcmp(parameter,"shutdown@systems")){ + char *temp = yon_char_unite(groupadd_sync,!yon_char_is_empty(groupadd_sync)?",":"",parameter,NULL); + if(!yon_char_is_empty(groupadd_sync)) free(groupadd_sync); + groupadd_sync = temp; + + } else if (!strcmp(parameter,"shutdown@min-max")){ + char *temp = yon_char_unite(groupadd_sync,!yon_char_is_empty(groupadd_sync)?",":"","shutdown@",min_str,"-",max_str,NULL); + if(!yon_char_is_empty(groupadd_sync)) free(groupadd_sync); + groupadd_sync = temp; + + } else if (!strcmp(parameter,"shutdown@uid")){ + char *temp = yon_char_unite(groupadd_sync,!yon_char_is_empty(groupadd_sync)?",":"","shutdown@",min_str,NULL); + if(!yon_char_is_empty(groupadd_sync)) free(groupadd_sync); + groupadd_sync = temp; + + } + } + } + } + if (!yon_char_is_empty(useradd_sync)){ + yon_config_register(GROUPADD_SYNC_parameter,GROUPADD_SYNC_parameter_command,groupadd_sync); + } else { + yon_config_remove_by_key(GROUPADD_SYNC_parameter); + } +} + 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); @@ -272,6 +374,164 @@ ubl_settings_usergroups_additional_settings_window *yon_ubl_settings_usergroups_ window->user_shutdown=-1; window->user_boot=-1; window->password_hash=NULL; + + char *useradd_sync = yon_config_get_by_key(USERADD_SYNC_parameter); + char *groupadd_sync = yon_config_get_by_key(GROUPADD_SYNC_parameter); + + if (!yon_char_is_empty(useradd_sync)){ + GtkTreeModel *model = GTK_TREE_MODEL(window->UsersShutdownList); + GtkTreeIter iter; + int useradd_sync_size; + config_str parsed = yon_char_parse(useradd_sync,&useradd_sync_size,","); + if (yon_char_parsed_check_exist(parsed,useradd_sync_size,"shutdown@all")){ + int a=0; + for_iter(model,&iter){ + if (!a){ + gtk_list_store_set(window->UsersShutdownList,&iter,6,0,-1); + a++; + } else { + gtk_list_store_set(window->UsersShutdownList,&iter,5,1,-1); + } + } + } + int uid_set=0, maxmin_set=0; + for (int i=0;iUsersBootCheck),1); + } else if (!strcmp(parsed[i],"shutdown@all")){ + gtk_tree_model_get_iter_first(model,&iter); + gtk_list_store_set(window->UsersShutdownList,&iter,0,1,-1); + } else if (!strcmp(parsed[i],"shutdown@users")){ + gtk_tree_model_get_iter_first(model,&iter); + gtk_list_store_set(window->UsersShutdownList,&iter,0,0,5,0,6,0,-1); + gtk_tree_model_get_iter_from_string(model,&iter,"1"); + gtk_list_store_set(window->UsersShutdownList,&iter,0,1,5,1,6,1,-1); + + } else if (!strcmp(parsed[i],"shutdown@systems")){ + gtk_tree_model_get_iter_first(model,&iter); + gtk_list_store_set(window->UsersShutdownList,&iter,0,0,5,0,6,0,-1); + gtk_tree_model_get_iter_from_string(model,&iter,"2"); + gtk_list_store_set(window->UsersShutdownList,&iter,0,1,5,1,6,1,-1); + + } else if (strstr(parsed[i],"-")){ + on_additional_settings_cell_toggled(window->UserActiveCell,"0",window); + if (!maxmin_set){ + gtk_tree_model_get_iter_from_string(model,&iter,"3"); + maxmin_set++; + } else { + gtk_list_store_append(window->UsersShutdownList,&iter); + gtk_list_store_set(window->UsersShutdownList,&iter,1,SHUTDOWN_UID_RANGE_LABEL,5,1,6,1,7,1,8,1,9,"shutdown@uid",10,1,11,1,-1); + } + + char *temp = yon_char_new(parsed[i]); + free(yon_char_divide_search(temp,"@",-1)); + char *min = yon_char_divide_search(temp,"-",-1); + + gtk_list_store_set(window->UsersShutdownList,&iter,0,1,2,min,3,temp,-1); + + } else if (strstr(parsed[i],"shutdown@")) { + gtk_tree_model_get_iter_first(model,&iter); + gtk_list_store_set(window->UsersShutdownList,&iter,0,0,5,0,6,0,-1); + + if (!uid_set){ + gtk_tree_model_get_iter_from_string(model,&iter,"4"); + uid_set++; + } else { + gtk_list_store_append(window->UsersShutdownList,&iter); + gtk_list_store_set(window->UsersShutdownList,&iter,1,SHUTDOWN_UID_LABEL,5,1,6,1,7,1,8,0,9,"shutdown@uid",10,1,11,1,-1); + } + char *temp = yon_char_new(parsed[i]); + free(yon_char_divide_search(temp,"@",-1)); + gtk_list_store_set(window->UsersShutdownList,&iter,0,1,2,temp,-1); + } else if (!strcmp(parsed[i],"shutdown")){ + gtk_tree_model_get_iter_first(model,&iter); + gtk_list_store_set(window->UsersShutdownList,&iter,0,0,-1); + gtk_tree_model_get_iter_from_string(model,&iter,"1"); + gtk_list_store_set(window->UsersShutdownList,&iter,0,1,5,1,6,1,-1); + gtk_tree_model_get_iter_from_string(model,&iter,"2"); + gtk_list_store_set(window->UsersShutdownList,&iter,0,1,5,1,6,1,-1); + + } + } + } + + if (!yon_char_is_empty(groupadd_sync)){ + GtkTreeModel *model = GTK_TREE_MODEL(window->GroupsShutdownList); + GtkTreeIter iter; + int useradd_sync_size; + config_str parsed = yon_char_parse(groupadd_sync,&useradd_sync_size,","); + if (yon_char_parsed_check_exist(parsed,useradd_sync_size,"shutdown@all")){ + int a=0; + for_iter(model,&iter){ + if (!a){ + gtk_list_store_set(window->GroupsShutdownList,&iter,6,0,-1); + a++; + } else { + gtk_list_store_set(window->GroupsShutdownList,&iter,5,1,-1); + } + } + } + int uid_set=0, maxmin_set=0; + for (int i=0;iGroupsBootCheck),1); + } else if (!strcmp(parsed[i],"shutdown@all")){ + gtk_tree_model_get_iter_first(model,&iter); + gtk_list_store_set(window->GroupsShutdownList,&iter,0,1,-1); + } else if (!strcmp(parsed[i],"shutdown@users")){ + gtk_tree_model_get_iter_first(model,&iter); + gtk_list_store_set(window->GroupsShutdownList,&iter,0,0,-1); + gtk_tree_model_get_iter_from_string(model,&iter,"1"); + gtk_list_store_set(window->UsersShutdownList,&iter,0,1,5,1,6,1,-1); + + } else if (!strcmp(parsed[i],"shutdown@systems")){ + gtk_tree_model_get_iter_first(model,&iter); + gtk_list_store_set(window->GroupsShutdownList,&iter,0,0,-1); + gtk_tree_model_get_iter_from_string(model,&iter,"2"); + gtk_list_store_set(window->UsersShutdownList,&iter,0,1,5,1,6,1,-1); + + } else if (!strstr(parsed[i],"-")){ + gtk_tree_model_get_iter_first(model,&iter); + gtk_list_store_set(window->GroupsShutdownList,&iter,0,0,-1); + if (!maxmin_set){ + gtk_tree_model_get_iter_from_string(model,&iter,"3"); + maxmin_set++; + } else { + gtk_list_store_append(window->GroupsShutdownList,&iter); + gtk_list_store_set(window->GroupsShutdownList,&iter,1,SHUTDOWN_GID_RANGE_LABEL,5,1,6,1,7,1,8,1,9,"shutdown@uid",10,1,11,1,-1); + } + + char *temp = yon_char_new(parsed[i]); + free(yon_char_divide_search(temp,"@",-1)); + char *min = yon_char_divide_search(temp,"-",-1); + + gtk_list_store_set(window->GroupsShutdownList,&iter,0,1,2,min,3,temp,-1); + + } else if (strstr(parsed[i],"shutdown@")){ + gtk_tree_model_get_iter_first(model,&iter); + gtk_list_store_set(window->GroupsShutdownList,&iter,0,0,-1); + + if (!uid_set){ + gtk_tree_model_get_iter_from_string(model,&iter,"4"); + uid_set++; + } else { + gtk_list_store_append(window->GroupsShutdownList,&iter); + gtk_list_store_set(window->GroupsShutdownList,&iter,1,SHUTDOWN_GID_LABEL,5,1,6,1,7,1,8,0,9,"shutdown@uid",10,1,11,1,-1); + } + char *temp = yon_char_new(parsed[i]); + free(yon_char_divide_search(temp,"@",-1)); + gtk_list_store_set(window->GroupsShutdownList,&iter,0,1,2,temp,-1); + } else if (!strcmp(parsed[i],"shutdown")){ + gtk_tree_model_get_iter_first(model,&iter); + gtk_list_store_set(window->GroupsShutdownList,&iter,0,0,-1); + gtk_tree_model_get_iter_from_string(model,&iter,"1"); + gtk_list_store_set(window->UsersShutdownList,&iter,0,1,-1); + gtk_tree_model_get_iter_from_string(model,&iter,"2"); + gtk_list_store_set(window->UsersShutdownList,&iter,0,1,-1); + + } + } + } 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); diff --git a/source/ubl-settings-usergroups.h b/source/ubl-settings-usergroups.h index a5c0ceb..2d0b5f7 100644 --- a/source/ubl-settings-usergroups.h +++ b/source/ubl-settings-usergroups.h @@ -83,6 +83,8 @@ #define USERADD_SYNC_command(target) yon_char_unite("ubconfig --source system get users USERADD_SYNC[",target,"]",NULL) #define USERSHADOW_SYNC(user) yon_char_unite("USERSHADOW_SYNC[",user,"]",NULL) #define GROUPADD_SYNC(user) yon_char_unite("GROUPADD_SYNC[",user,"]",NULL) +#define GROUPADD_SYNC_parameter "GROUPADD_SYNC" +#define GROUPADD_SYNC_parameter_command "ubconfig --source system get users USERADD_SYNC" #define add_icon_name "com.ublinux.ubl-settings-usergroups.increase-symbolic" #define edit_icon_name "com.ublinux.ubl-settings-usergroups.edit-symbolic" @@ -553,4 +555,5 @@ config_str yon_parameter_get_by_template(char *parameter, char *pattern, int *si void on_additional_settings_cell_toggled(GtkCellRenderer *self, char *path, ubl_settings_usergroups_additional_settings_window *window); void on_additional_settings_cell_edited(GtkCellRenderer *self, char *path, char *new_text, ubl_settings_usergroups_additional_settings_window *window); void on_adiitional_settings_tree_selection_changed(GtkWidget *self, ubl_settings_usergroups_additional_settings_window *window); +void on_useradd_sync_changed(ubl_settings_usergroups_additional_settings_window *window); #endif \ No newline at end of file diff --git a/source/ubl-strings.h b/source/ubl-strings.h index 4bf8c74..0e5b44d 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -244,3 +244,11 @@ #define REMOVE_FROM_CONFIGURATION_TITLE_LABEL _("Remove from configuration") #define ADD_TO_SYSTEM_TITLE_LABEL _("Add to system") #define REMOVE_FROM_SYSTEM_TITLE_LABEL _("Remove from system") + +#define SHUTDOWN_ALL_SYSTEM_USERS_LABEL _("All system users") +#define SHUTDOWN_USERS_LABEL _("Users") +#define SHUTDOWN_SYSTEM_USER_LABEL _("System users") +#define SHUTDOWN_UID_RANGE_LABEL _("Users UID range") +#define SHUTDOWN_UID_LABEL _("User UID in system") +#define SHUTDOWN_GID_RANGE_LABEL _("Users GID range") +#define SHUTDOWN_GID_LABEL _("User GID in system") diff --git a/ubl-settings-usergroups-additional-settings.glade b/ubl-settings-usergroups-additional-settings.glade index 749b5d4..c962d1a 100644 --- a/ubl-settings-usergroups-additional-settings.glade +++ b/ubl-settings-usergroups-additional-settings.glade @@ -41,7 +41,7 @@ True False False - + shutdown@all False False @@ -55,7 +55,7 @@ False False False - + shutdown@users False False @@ -69,7 +69,7 @@ False False False - + shutdown@systems False False @@ -83,7 +83,7 @@ False True True - + shutdown@min-max True False @@ -97,7 +97,7 @@ False True False - + shutdown@gid True False @@ -141,7 +141,7 @@ True False False - + shutdown@all False False @@ -155,7 +155,7 @@ False False False - + shutdown@users False False @@ -169,7 +169,7 @@ False False False - + shutdown@systems False False @@ -183,7 +183,7 @@ False True True - + shutdown@min-max True False @@ -197,7 +197,7 @@ False True False - + shutdown@uid True False @@ -642,7 +642,7 @@ True False - While shutdown, save the settings of all users with UID>=1000 to the configuration + While shutdown, save the settings of all users to configuration False @@ -868,7 +868,7 @@ True False - While shutdown, save the settings of all groups with GID>=1000 to the configuration + While shutdown, save the settings of all groups to the configuration False @@ -925,7 +925,7 @@ - 6 + 5 0