Fixed system user syncing with config

pull/276/head
parent 3ea866ba5e
commit ea464151a7
No known key found for this signature in database
GPG Key ID: FF1D842BF4DDE92B

@ -1,5 +1,32 @@
#include "ubl-settings-usergroups.h" #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;i<main_config.shadow_size;i++){
if (strstr(main_config.shadow[i],target_login)){
shadow_parsed = yon_char_parse(main_config.shadow[i],&shadow_parsed_size,":");
break;
}
}
}
int target_pos=0;
for (;target_pos<main_config.shadow_size;target_pos++){
int parsed_gr_size;
config_str parsed_group = yon_char_parse(main_config.groups[target_pos],&parsed_gr_size,":");
if (shadow_parsed_size&&strstr(parsed_group[3],shadow_parsed[0])){
groups_string = yon_char_unite(groups_string,!yon_char_is_empty(groups_string)?",":"",parsed_group[0],NULL);
}
yon_char_parsed_free(parsed_group,parsed_gr_size);
}
yon_char_parsed_free(shadow_parsed,shadow_parsed_size);
if (yon_char_is_empty(groups_string)) return NULL;
return groups_string;
}
void on_login_insert_custom_restricted_check(GtkEditable *editable, const gchar *text, gint length, gint *position){ void on_login_insert_custom_restricted_check(GtkEditable *editable, const gchar *text, gint length, gint *position){
gchar *new_text = g_new(gchar, length + 1); gchar *new_text = g_new(gchar, length + 1);
memset(new_text,0,length+1); memset(new_text,0,length+1);
@ -646,11 +673,17 @@ void on_user_sync_with_config(GtkWidget *,main_window *widgets){
config_str parsed = yon_char_parse(user,&user_size,":"); config_str parsed = yon_char_parse(user,&user_size,":");
config_str parsed_shadow = yon_char_parse(shadow,&shadow_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 *login = parsed[0];
char *config_user = yon_char_unite(parsed[0],":", char *uid = parsed[2];
user_size>4?parsed[4]:"",":", char *gid = parsed[3];
user_size>2?parsed[2]:"",":", char *gecos = parsed[4];
user_size>3?parsed[3]:"",":", 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:"",":", !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); 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],""),":", 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>5?parsed[5]:"",":",
user_size>6?parsed[6]:"",":", user_size>6?parsed[6]:"",":",
user_size>7?parsed[7]:"",":",NULL); user_size>7?parsed[7]:"",":",NULL);
free(groups_string);
free(optionals);
if (!yon_char_is_empty(config_user)){ if (!yon_char_is_empty(config_user)){
char *user_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",USERADD(target)); 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); yon_config_register(USERADD(target),user_command,config_user);
free(config_user);
} }
if (!yon_char_is_empty(config_shadow)){ if (!yon_char_is_empty(config_shadow)){
char *shadow_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",USERSHADOW(target)); 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); yon_config_register(USERSHADOW(target),shadow_command,config_shadow);
free(config_shadow);
} }
yon_interface_update(widgets); yon_interface_update(widgets);
} }

@ -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_shutdown_toggled(GtkWidget *self,ubl_settings_usergroups_additional_settings_window *window);
void yon_gtk_tree_view_select_first(GtkTreeView *target); void yon_gtk_tree_view_select_first(GtkTreeView *target);
void on_date_format_changed(GtkWidget *, main_window *widgets); void on_date_format_changed(GtkWidget *, main_window *widgets);
char *yon_user_get_system_groups(char *target_login);
#endif #endif
Loading…
Cancel
Save