Merge pull request 'master' (#276) from YanTheKaller/ubl-settings-usergroups:master into master

Reviewed-on: #276
master v2.37
Dmitry Razumov 2 months ago
commit 51d0aa85de

@ -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)){ 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); yon_tree_model_sort_filter_get_model_iter(GTK_TREE_MODEL_SORT(model),&iter,&child);
char *name,*username,*homedir=NULL; 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_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_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); 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),3),0);
gtk_tree_view_column_set_visible(gtk_tree_view_get_column(GTK_TREE_VIEW(dialog->DeletionTree),4),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_append(dialog->list,&child);
gtk_list_store_set(dialog->list,&child,0,1,1,name,-1); gtk_list_store_set(dialog->list,&child,0,1,1,name,-1);
gtk_widget_show(dialog->Window); gtk_widget_show(dialog->Window);

@ -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);
@ -613,6 +640,74 @@ void on_user_save(GtkWidget *self, dictionary *dict){
on_subwindow_close(self); on_subwindow_close(self);
} }
int yon_system_user_sync(char *target_user){
char *user = yon_char_parsed_check_exist_begins_with(main_config.users,main_config.users_size,target_user);
char *shadow = yon_char_parsed_check_exist_begins_with(main_config.shadow,main_config.shadow_size,target_user);
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 *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],""),":",
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){ void on_user_sync_with_config(GtkWidget *,main_window *widgets){
int active = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook)); int active = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook));
switch (active){ switch (active){
@ -620,9 +715,9 @@ void on_user_sync_with_config(GtkWidget *,main_window *widgets){
GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore1); GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore1);
GtkTreeIter iter,child; GtkTreeIter iter,child;
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemTree)),&model,&iter)){ 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); 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(); dialog_confirmation_data *data = yon_confirmation_dialog_data_new();
if (config(USERADD(target))){ if (config(USERADD(target))){
data->action_text = SYSTEM_USER_SYNC_CONFIRMATION_LABEL(target); data->action_text = SYSTEM_USER_SYNC_CONFIRMATION_LABEL(target);
@ -637,41 +732,12 @@ void on_user_sync_with_config(GtkWidget *,main_window *widgets){
return; return;
} }
char *user = yon_char_parsed_check_exist_begins_with(main_config.users,main_config.users_size,target); if (yon_system_user_sync(target)) {
char *shadow = yon_char_parsed_check_exist_begins_with(main_config.shadow,main_config.shadow_size,target); yon_system_group_sync(group);
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);
}
yon_interface_update(widgets); yon_interface_update(widgets);
}
} }
yon_interface_update((main_window*)widgets); }break;
}break;
case 3:{ case 3:{
GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore1); GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore1);
GtkTreeIter iter,child; 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){ if (yon_confirmation_dialog_call(widgets->Window,data)!=GTK_RESPONSE_ACCEPT){
return; return;
} }
char *group = yon_char_parsed_check_exist_begins_with(main_config.groups,main_config.groups_size,target); if (yon_system_group_sync(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);
yon_interface_update(widgets); yon_interface_update(widgets);
} }
} }
}break; }break;
} }
} }

@ -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_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);
int yon_system_group_sync(char *group);
int yon_system_user_sync(char *user);
#endif #endif

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.40.0 --> <!-- Generated with glade 3.38.2 -->
<interface domain="ubl-settings-usergroups"> <interface domain="ubl-settings-usergroups">
<requires lib="gtk+" version="3.24"/> <requires lib="gtk+" version="3.24"/>
<!-- interface-css-provider-path ubl-settings-usergroups.css --> <!-- interface-css-provider-path ubl-settings-usergroups.css -->
@ -542,7 +542,6 @@
<child> <child>
<object class="GtkCheckButton" id="userDeactivatedCheck"> <object class="GtkCheckButton" id="userDeactivatedCheck">
<property name="label" translatable="yes">Temporary deactivation</property> <property name="label" translatable="yes">Temporary deactivation</property>
<property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="receives-default">False</property> <property name="receives-default">False</property>
<property name="halign">start</property> <property name="halign">start</property>

Loading…
Cancel
Save