From ea464151a7cc4c4f533f71bcacb7985447ecfdcb Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Mon, 8 Sep 2025 14:42:09 +0600 Subject: [PATCH] Fixed system user syncing with config --- source/ubl-settings-usergroups-user.c | 47 ++++++++++++++++++++++++--- source/ubl-settings-usergroups.h | 1 + 2 files changed, 43 insertions(+), 5 deletions(-) diff --git a/source/ubl-settings-usergroups-user.c b/source/ubl-settings-usergroups-user.c index c1cf7dc..60bc6c5 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? 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]:"",":", + char *login = parsed[0]; + char *uid = parsed[2]; + char *gid = parsed[3]; + char *gecos = parsed[4]; + char *groups_string = yon_user_get_system_groups(login); + char *optionals = yon_char_unite(user_size>5? "--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],""),":", @@ -659,14 +692,18 @@ void on_user_sync_with_config(GtkWidget *,main_window *widgets){ 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)); yon_config_register(USERADD(target),user_command,config_user); + free(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); + free(config_shadow); } yon_interface_update(widgets); } diff --git a/source/ubl-settings-usergroups.h b/source/ubl-settings-usergroups.h index 2297dbf..178627a 100644 --- a/source/ubl-settings-usergroups.h +++ b/source/ubl-settings-usergroups.h @@ -621,4 +621,5 @@ 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); #endif \ No newline at end of file