diff --git a/source/ubl-settings-usergroups-system.c b/source/ubl-settings-usergroups-system.c index c266989..3be6dd0 100644 --- a/source/ubl-settings-usergroups-system.c +++ b/source/ubl-settings-usergroups-system.c @@ -111,7 +111,7 @@ void yon_remove_confirmation_window_accept_clicked(GtkWidget *self,dictionary *d 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,&child,2,&name,3,&username,6,&homedir,-1); + gtk_tree_model_get(GTK_TREE_MODEL(widgets->liststore1),&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); @@ -135,7 +135,7 @@ 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,&child,1,&name,-1); + gtk_tree_model_get(GTK_TREE_MODEL(widgets->liststore2),&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 c1cf7dc..0cec4cc 100644 --- a/source/ubl-settings-usergroups-user.c +++ b/source/ubl-settings-usergroups-user.c @@ -1,5 +1,32 @@ #include "ubl-settings-usergroups.h" +char *yon_user_get_system_groups(char *target_login){ + char *groups_string = NULL; + groups_string=""; + int shadow_parsed_size=0; + config_str shadow_parsed = NULL; + if (main_config.shadow_size){ + for (int i=0;i5? "--home-dir ":"", user_size>5? parsed[5]:"",user_size>5?" ":"",user_size>6? "--shell ":"",user_size>6?parsed[6]:"",NULL); + + char *config_user = yon_char_unite(user_size>4?gecos:"",":", + user_size>2?uid:"",":", + user_size>3?gid:"",":", + !yon_char_is_empty(groups_string)?groups_string:"",":", + !yon_char_is_empty(optionals)?optionals:"",":", + user_size>1&&strcmp(parsed[1],"x")?yon_char_return_if_exist(parsed[1],""):yon_char_return_if_exist(parsed_shadow[1],""),NULL); + char *config_shadow = yon_char_unite(yon_char_return_if_exist(parsed[2],""),":", + user_size>3?parsed[3]:"",":", + user_size>4?parsed[4]:"",":", + user_size>5?parsed[5]:"",":", + user_size>6?parsed[6]:"",":", + user_size>7?parsed[7]:"",":",NULL); + free(groups_string); + free(optionals); + + if (!yon_char_is_empty(config_user)){ + char *user_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",USERADD(target_user)); + yon_config_register(USERADD(target_user),user_command,config_user); + free(config_user); + } else return 0; + + if (!yon_char_is_empty(config_shadow)){ + char *shadow_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",USERSHADOW(target_user)); + yon_config_register(USERSHADOW(target_user),shadow_command,config_shadow); + free(config_shadow); + } else return 0; + return 1; +} + +int yon_system_group_sync(char *target_group){ + char *group = yon_char_parsed_check_exist_begins_with(main_config.groups,main_config.groups_size,target_group); + char *group_shadow = yon_char_parsed_check_exist_begins_with(main_config.group_shadow,main_config.group_shadow_size,target_group); + yon_char_remove_last_symbol(group,'\n'); + yon_char_remove_last_symbol(group_shadow,'\n'); + int group_size=0; + int group_shadow_size=0; + config_str parsed = yon_char_parse(group,&group_size,":"); + config_str parsed_shadow = yon_char_parse(group_shadow,&group_shadow_size,":"); + char *config_group = yon_char_unite(yon_char_return_if_exist(parsed[3],""), + ":",yon_char_return_if_exist(parsed[2],""), + "::",yon_char_return_if_exist(parsed_shadow[2],""), + ":",strcmp(parsed[1],"x")?yon_char_return_if_exist(parsed[1],""):yon_char_return_if_exist(parsed_shadow[1],""), + NULL); + + if (!yon_char_is_empty(config_group)){ + char *group_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",GROUPADD(target_group)); + yon_config_register(GROUPADD(target_group),group_command,config_group); + } else return 0; + return 1; +} + void on_user_sync_with_config(GtkWidget *,main_window *widgets){ int active = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook)); switch (active){ @@ -620,9 +715,9 @@ void on_user_sync_with_config(GtkWidget *,main_window *widgets){ GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore1); GtkTreeIter iter,child; if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemTree)),&model,&iter)){ - char *target; + char *target, *group; 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); + gtk_tree_model_get(GTK_TREE_MODEL(widgets->liststore1),&child,2,&target,4,&group,-1); dialog_confirmation_data *data = yon_confirmation_dialog_data_new(); if (config(USERADD(target))){ data->action_text = SYSTEM_USER_SYNC_CONFIRMATION_LABEL(target); @@ -636,42 +731,13 @@ void on_user_sync_with_config(GtkWidget *,main_window *widgets){ if (yon_confirmation_dialog_call(widgets->Window,data)!=GTK_RESPONSE_ACCEPT){ return; } - - 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; - int shadow_size=0; - config_str parsed = yon_char_parse(user,&user_size,":"); - config_str parsed_shadow = yon_char_parse(shadow,&shadow_size,":"); - - char *optionals = yon_char_unite(user_size>5? parsed[5]:"",user_size>5?" ":"",user_size>6?parsed[6]:"",NULL); - char *config_user = yon_char_unite(parsed[0],":", - user_size>4?parsed[4]:"",":", - user_size>2?parsed[2]:"",":", - user_size>3?parsed[3]:"",":", - !yon_char_is_empty(optionals)?optionals:"",":", - user_size>1&&strcmp(parsed[1],"x")?yon_char_return_if_exist(parsed[1],""):yon_char_return_if_exist(parsed_shadow[1],""),NULL); - char *config_shadow = yon_char_unite(yon_char_return_if_exist(parsed[2],""),":", - user_size>3?parsed[3]:"",":", - user_size>4?parsed[4]:"",":", - user_size>5?parsed[5]:"",":", - user_size>6?parsed[6]:"",":", - user_size>7?parsed[7]:"",":",NULL); - - if (!yon_char_is_empty(config_user)){ - char *user_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",USERADD(target)); - yon_config_register(USERADD(target),user_command,config_user); - } - if (!yon_char_is_empty(config_shadow)){ - char *shadow_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",USERSHADOW(target)); - yon_config_register(USERSHADOW(target),shadow_command,config_shadow); - } + + if (yon_system_user_sync(target)) { + yon_system_group_sync(group); yon_interface_update(widgets); + } } - yon_interface_update((main_window*)widgets); - }break; + }break; case 3:{ GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore1); GtkTreeIter iter,child; @@ -693,26 +759,11 @@ void on_user_sync_with_config(GtkWidget *,main_window *widgets){ if (yon_confirmation_dialog_call(widgets->Window,data)!=GTK_RESPONSE_ACCEPT){ return; } - char *group = yon_char_parsed_check_exist_begins_with(main_config.groups,main_config.groups_size,target); - char *group_shadow = yon_char_parsed_check_exist_begins_with(main_config.group_shadow,main_config.group_shadow_size,target); - yon_char_remove_last_symbol(group,'\n'); - yon_char_remove_last_symbol(group_shadow,'\n'); - int group_size=0; - int group_shadow_size=0; - config_str parsed = yon_char_parse(group,&group_size,":"); - config_str parsed_shadow = yon_char_parse(group_shadow,&group_shadow_size,":"); - char *config_group = yon_char_unite(yon_char_return_if_exist(parsed[3],""), - ":",yon_char_return_if_exist(parsed[2],""), - "::",yon_char_return_if_exist(parsed_shadow[2],""), - ":",strcmp(parsed[1],"x")?yon_char_return_if_exist(parsed[1],""):yon_char_return_if_exist(parsed_shadow[1],""), - NULL); - - if (!yon_char_is_empty(config_group)){ - char *group_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",GROUPADD(target)); - yon_config_register(GROUPADD(target),group_command,config_group); + if (yon_system_group_sync(target)){ yon_interface_update(widgets); } } + }break; } } \ No newline at end of file diff --git a/source/ubl-settings-usergroups.h b/source/ubl-settings-usergroups.h index 2297dbf..0f8aa38 100644 --- a/source/ubl-settings-usergroups.h +++ b/source/ubl-settings-usergroups.h @@ -621,4 +621,7 @@ void on_user_info_print(GtkWidget *,yon_user_info_window *window); void yon_shutdown_toggled(GtkWidget *self,ubl_settings_usergroups_additional_settings_window *window); void yon_gtk_tree_view_select_first(GtkTreeView *target); void on_date_format_changed(GtkWidget *, main_window *widgets); +char *yon_user_get_system_groups(char *target_login); +int yon_system_group_sync(char *group); +int yon_system_user_sync(char *user); #endif \ No newline at end of file diff --git a/ubl-settings-usergroups-user.glade b/ubl-settings-usergroups-user.glade index ebd884c..c8bec76 100644 --- a/ubl-settings-usergroups-user.glade +++ b/ubl-settings-usergroups-user.glade @@ -1,5 +1,5 @@ - + @@ -542,7 +542,6 @@ Temporary deactivation - True True False start