From b04152b21140441532343733cd662cfb2fc6ba4c Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Thu, 26 Dec 2024 16:55:23 +0600 Subject: [PATCH] Group adding from system implemented --- source/ubl-settings-usergroups.c | 36 +++++++++++++++++++------------- source/ubl-settings-usergroups.h | 7 +++++++ 2 files changed, 29 insertions(+), 14 deletions(-) diff --git a/source/ubl-settings-usergroups.c b/source/ubl-settings-usergroups.c index 589e7a9..0b677cb 100644 --- a/source/ubl-settings-usergroups.c +++ b/source/ubl-settings-usergroups.c @@ -161,9 +161,9 @@ void yon_interface_update(main_window *widgets){ } gtk_list_store_set(widgets->GroupsList,&iter, 1,login, - 0,parameters_size>1?parameters[1]:"", - 2,parameters_size>0?parameters[0]:"", - 3,parameters_size>2?parameters[2]:"", + 0,parameters_size>2?parameters[2]:"", + 2,parameters_size>1?parameters[1]:"", + 3,parameters_size>3?parameters[3]:"", 4,pars, -1); if(parameters) @@ -2854,28 +2854,34 @@ void on_user_sync_with_config(GtkWidget *,main_window *widgets){ gtk_tree_model_get(model,&iter,1,&target,-1); dialog_confirmation_data data; if (config(USERADD(target))){ - data.action_text = SYSTEM_GROUP_SYNC_CONFIRMATION_LABEL(target); + data.action_text = SYSTEM_GROUP_ADD_CONFIRMATION_LABEL(target); data.data=NULL; data.function=NULL; } else { - data.action_text = SYSTEM_GROUP_ADD_CONFIRMATION_LABEL(target); + data.action_text = SYSTEM_GROUP_SYNC_CONFIRMATION_LABEL(target); data.data=NULL; data.function=NULL; } if (yon_confirmation_dialog_call(widgets->Window,&data)!=GTK_RESPONSE_ACCEPT){ return; } - int group_size; - config_str group = yon_config_load(get_system_group_command(target),&group_size); - if (group_size>0){ - yon_char_remove_last_symbol(group[0],'\n'); - free(yon_char_divide_search(group[0],"=",-1)); - yon_char_remove_brackets(group[0]); - char *group_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",USERADD(target)); - yon_config_register(GROUPADD(target),group_command,group[0]); + 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(parsed[0],":",parsed[3],":",parsed[2],"::",parsed_shadow[2],":",strcmp(parsed[1],"x")?parsed[1]: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); + yon_interface_update(widgets); } } - }break; + }break; } } @@ -2905,6 +2911,8 @@ void config_init(){ main_config.save_config=0; main_config.groups = yon_file_open(groups_path,&main_config.groups_size); main_config.users = yon_file_open(users_path,&main_config.users_size); + main_config.shadow = yon_file_open(shadow_path,&main_config.shadow_size); + main_config.group_shadow = yon_file_open(group_shadow_path,&main_config.group_shadow_size); main_config.users_list=NULL; main_config.groups_list=NULL; main_config.password_min_length=6; diff --git a/source/ubl-settings-usergroups.h b/source/ubl-settings-usergroups.h index b2c05c9..e75ed76 100644 --- a/source/ubl-settings-usergroups.h +++ b/source/ubl-settings-usergroups.h @@ -54,6 +54,7 @@ #define groups_path "/etc/group" #define users_path "/etc/passwd" #define shadow_path "/etc/shadow" +#define group_shadow_path "/etc/gshadow" #define uid_path "/etc/login.defs" #define password_limits_path "/etc/security/pwquiality.conf" #define get_user_info_command(target) yon_char_unite("getent passwd \"",target,"\"",NULL) @@ -143,10 +144,16 @@ char *local; typedef struct { template_config_fields + config_str groups; int groups_size; config_str users; int users_size; + config_str shadow; + int shadow_size; + config_str group_shadow; + int group_shadow_size; + GtkListStore *users_list; GtkListStore *groups_list;