From 3bdac88ff0c06eff8c91cddd0d08bccedeb306eb Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Wed, 3 Apr 2024 17:19:22 +0600 Subject: [PATCH 1/7] Fixed data from /etc/shadow file at users and groups in system window --- source/ubl-settings-usergroups.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/ubl-settings-usergroups.c b/source/ubl-settings-usergroups.c index f91a70e..9fa5836 100644 --- a/source/ubl-settings-usergroups.c +++ b/source/ubl-settings-usergroups.c @@ -1662,7 +1662,7 @@ void yon_system_load(ubl_settings_usergroups_system_window *window){ if (shadow[i][strlen(shadow[i])-1]=='\n') shadow[i][strlen(shadow[i])-1]='\0'; int parsed_size=0; config_str parsed = yon_char_parse(shadow[i],&parsed_size,":"); - if (yon_gtk_list_store_find_text(window->liststore1,&iter,3,parsed[0])){ + if (yon_gtk_list_store_find_text(window->liststore1,&iter,2,parsed[0])){ GDateTime *date = g_date_time_new_from_unix_local(atol(parsed[2])); char *date_string; date_string = g_date_time_format(date,"%Y-%m-%d"); -- 2.35.1 From bd416565c4dc77a127553a12c44c4bb68a898262 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Wed, 3 Apr 2024 17:47:31 +0600 Subject: [PATCH 2/7] Test fix for password ripping --- source/ubl-settings-usergroups.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/ubl-settings-usergroups.c b/source/ubl-settings-usergroups.c index 9fa5836..983a806 100644 --- a/source/ubl-settings-usergroups.c +++ b/source/ubl-settings-usergroups.c @@ -1565,6 +1565,10 @@ void on_password_accept(GtkWidget *self, dictionary *dict){ char *pasted_hash = (char*)gtk_entry_get_text(GTK_ENTRY(window->PasswordHashEntry)); if (!yon_char_is_empty(pasted_hash)){ gtk_entry_set_text(entry,pasted_hash); + } else { + yon_ubl_status_highlight_incorrect(window->PasswordEntry); + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),PASSWORD_SHORT_LABEL(yon_char_from_int(main_config.password_min_length)),5,BACKGROUND_IMAGE_FAIL_TYPE); + return; } } else { -- 2.35.1 From e9eaa5c197aab59670fdc6e9f0943e3dd65c53b5 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Thu, 4 Apr 2024 11:22:07 +0600 Subject: [PATCH 3/7] Fixed dates on users and groups in system window --- source/ubl-settings-usergroups.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/source/ubl-settings-usergroups.c b/source/ubl-settings-usergroups.c index 983a806..9d6645b 100644 --- a/source/ubl-settings-usergroups.c +++ b/source/ubl-settings-usergroups.c @@ -1667,11 +1667,18 @@ void yon_system_load(ubl_settings_usergroups_system_window *window){ int parsed_size=0; config_str parsed = yon_char_parse(shadow[i],&parsed_size,":"); if (yon_gtk_list_store_find_text(window->liststore1,&iter,2,parsed[0])){ - GDateTime *date = g_date_time_new_from_unix_local(atol(parsed[2])); + GDateTime *date = g_date_time_new_from_unix_local(atol(parsed[2])*24*60*60); char *date_string; date_string = g_date_time_format(date,"%Y-%m-%d"); + g_date_time_unref(date); + char *expiration_string=""; + if (parsed_size>7&&!yon_char_is_empty(parsed[7])){ + date = g_date_time_new_from_unix_local(atol(parsed[7])*24*60*60); + expiration_string = g_date_time_format(date,"%Y-%m-%d"); + g_date_time_unref(date); + } - gtk_list_store_set(window->liststore1,&iter,8,parsed_size>2?date_string:"",9,parsed_size>7?parsed[7]:"",10,parsed_size>3?parsed[3]:"",11,parsed_size>4?parsed[4]:"",12,parsed_size>5?parsed[5]:"",13,parsed_size>2?parsed[6]:"",-1); + gtk_list_store_set(window->liststore1,&iter,8,parsed_size>2?date_string:"",9,expiration_string,10,parsed_size>3?parsed[3]:"",11,parsed_size>4?parsed[4]:"",12,parsed_size>5?parsed[5]:"",13,parsed_size>2?parsed[6]:"",-1); } } } -- 2.35.1 From 1a2e0925885d10e2e0aeac5438f1d96f7f88d17e Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Thu, 4 Apr 2024 15:46:27 +0600 Subject: [PATCH 4/7] Test fix for add source/ubl-settings-usergroups.c at password --- source/ubl-settings-usergroups.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/source/ubl-settings-usergroups.c b/source/ubl-settings-usergroups.c index 9d6645b..ac3537a 100644 --- a/source/ubl-settings-usergroups.c +++ b/source/ubl-settings-usergroups.c @@ -1890,7 +1890,7 @@ void on_user_save(GtkWidget *self, dictionary *dict){ char *old_password = NULL; if (window->old_password){ old_password = window->old_password; - if (old_password[0]=='!') free(yon_char_divide(old_password,0)); + if (old_password[0]=='!'||old_password[0]=='*') free(yon_char_divide(old_password,0)); } if (!old_password||old_password&&strcmp(old_password,password)){ time_t t = time(NULL); @@ -2497,8 +2497,9 @@ void on_main_edit(GtkWidget *self, main_window *widgets){ if (!yon_char_is_empty(window->old_password)&&strlen(window->old_password)&&window->old_password[0]=='!'&&window->old_password[1]=='*'){ free(yon_char_divide(window->old_password,1)); } + if (!strcmp(parameters[5],"!*")) parameters[5][1]='\0'; if (strcmp(parameters[5],"x")&&strcmp(parameters[5],"")){ - if (parameters[5][0]=='!'){ + if (parameters[5][0]=='!'||parameters[5][0]=='*'){ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->userDeactivatedCheck),1); } free(yon_char_divide(parameters[5],0)); -- 2.35.1 From 494c6feca44f009eb68f2c1dfb820a2f1ede7acc Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Fri, 5 Apr 2024 10:22:41 +0600 Subject: [PATCH 5/7] Test fix for add . at password beginning --- source/ubl-settings-usergroups.c | 68 +++++++++++++++++++++++++------- source/ubl-settings-usergroups.h | 1 + 2 files changed, 54 insertions(+), 15 deletions(-) diff --git a/source/ubl-settings-usergroups.c b/source/ubl-settings-usergroups.c index ac3537a..21837f0 100644 --- a/source/ubl-settings-usergroups.c +++ b/source/ubl-settings-usergroups.c @@ -104,6 +104,8 @@ void yon_interface_update(main_window *widgets){ if (!check_is_password_hash(parameters[5])&¶meters[5][0]!='%'&¶meters[5][1]!='%'){ pars = ENCRYPTED_LABEL; + } else if (!strcmp(parameters[5],"!*")){ + pars = NO_PASSWORD_LABEL; } else { pars = UNENCRYPTED_LABEL; @@ -113,7 +115,7 @@ void yon_interface_update(main_window *widgets){ } gtk_list_store_set(widgets->UsersList,&iter, - 0,parameters[5][0]=='!'||parameters[5][0]=='*', + 0,(parameters[5][0]=='!'||parameters[5][0]=='*')||(parameters[5][0]=='!'&¶meters[5][1]=='*'), 2,login, 3,parameters_size>0?parameters[0]:"", 1,parameters_size>1&&!yon_char_is_empty(parameters[1])?parameters[1]:"", @@ -394,6 +396,19 @@ void on_save_done(main_window *widgets, config_str output, int size){ yon_accept_changes(); yon_samba_sync_proceed(); } + textdomain(template_ui_LocaleName); + switch (main_config.save_config){ + case 0: + yon_ubl_status_box_render(GLOBAL_SAVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + break; + case 1: + yon_ubl_status_box_render(LOCAL_SAVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + break; + case 2: + yon_ubl_status_box_render(GLOBAL_LOCAL_SAVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + break; + } + textdomain(LocaleName); } @@ -401,6 +416,7 @@ void on_save_done(main_window *widgets, config_str output, int size){ void on_config_save(GtkWidget *self, main_window *widgets){ yon_accept_changes(); yon_samba_sync_proceed(); + main_config.save_config=2; template_saving_window *window = yon_save_proceed(NULL,YON_CONFIG_BOTH,config_get_command("global"),NULL); if (window){ if (main_config.load_mode==0){ @@ -459,6 +475,7 @@ void on_config_save(GtkWidget *self, main_window *widgets){ } void on_config_global_save(GtkWidget *self, main_window *widgets){ + main_config.save_config=0; template_saving_window *window = yon_save_proceed("global",YON_CONFIG_GLOBAL,config_get_command("global"),NULL); if (window){ yon_hide_passwords(window); @@ -466,6 +483,7 @@ void on_config_global_save(GtkWidget *self, main_window *widgets){ } void on_config_local_save(GtkWidget *self, main_window *widgets){ + main_config.save_config=1; int size; config_str keys = yon_config_get_all_by_key(USERADD_SEARCH_macro,&size); int passw_size; @@ -489,8 +507,6 @@ void on_config_local_save(GtkWidget *self, main_window *widgets){ } yon_accept_changes(); yon_samba_sync_proceed(); - // char *output = yon_config_save_simple(YON_CONFIG_LOCAL,"system"); - // if (output) puts(output); template_saving_window *window = yon_save_proceed("system",YON_CONFIG_LOCAL,config_get_command("system"),NULL); if (window){ yon_hide_passwords(window); @@ -503,6 +519,7 @@ void on_config_local_save(GtkWidget *self, main_window *widgets){ } void on_config_custom_save(GtkWidget *self, main_window *widgets){ + main_config.save_config=1; template_saving_window *window = yon_save_proceed(NULL,YON_CONFIG_CUSTOM,config_get_command("system"),NULL); if (window){ yon_hide_passwords(window); @@ -659,6 +676,25 @@ void yon_group_delete_confirmation_save(GtkWidget *self, dictionary *dict){ on_subwindow_close(self); } +int yon_check_password_blocked(char *password){ + if (!yon_char_is_empty(password)){ + if (!strcmp(password,"!*")){ + memset(password,0,strlen(password)); + return 1; + } else if (password[0]=='!'&&password[1]=='*'){ + char *copy = yon_char_new(password); + memcpy(copy,password+2,strlen(password+2)); + memset(password,0,strlen(password)); + memcpy(password,copy,strlen(copy)); + free(copy); + return 1; + } else if (password[0]=='!'||password[0]=='*'){ + free(yon_char_divide(password,0)); + return 1; + } + } else return 0; +} + yon_confirmation_window *yon_delete_confirmation_new(){ yon_confirmation_window *window = malloc(sizeof(yon_confirmation_window)); GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_ubl_settings_usergroups_confirmation); @@ -1883,14 +1919,16 @@ void on_user_save(GtkWidget *self, dictionary *dict){ yon_ubl_status_highlight_incorrect(window->userPasswordEntry); return; } - } else { - password=""; + } else if (password_active==1){ + password = "!*"; + } else { + password=""; } char *old_password = NULL; if (window->old_password){ old_password = window->old_password; - if (old_password[0]=='!'||old_password[0]=='*') free(yon_char_divide(old_password,0)); + yon_check_password_blocked(old_password); } if (!old_password||old_password&&strcmp(old_password,password)){ time_t t = time(NULL); @@ -2493,19 +2531,18 @@ void on_main_edit(GtkWidget *self, main_window *widgets){ } } if (parsed_size>5){ - window->old_password=yon_char_new(parameters[5]); - if (!yon_char_is_empty(window->old_password)&&strlen(window->old_password)&&window->old_password[0]=='!'&&window->old_password[1]=='*'){ - free(yon_char_divide(window->old_password,1)); - } - if (!strcmp(parameters[5],"!*")) parameters[5][1]='\0'; + window->old_password=yon_char_new(parameters[5]); if (strcmp(parameters[5],"x")&&strcmp(parameters[5],"")){ - if (parameters[5][0]=='!'||parameters[5][0]=='*'){ + if (yon_check_password_blocked(parameters[5])){ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->userDeactivatedCheck),1); } - free(yon_char_divide(parameters[5],0)); if (!yon_char_is_empty(parameters[5])){ - gtk_entry_set_text(GTK_ENTRY(window->userPasswordEntry),parameters[5]); - gtk_combo_box_set_active(GTK_COMBO_BOX(window->userPasswordCombo),2); + if (!strcmp(parameters[5],"!*")){ + gtk_combo_box_set_active(GTK_COMBO_BOX(window->userPasswordCombo),1); + } else { + gtk_entry_set_text(GTK_ENTRY(window->userPasswordEntry),parameters[5]); + gtk_combo_box_set_active(GTK_COMBO_BOX(window->userPasswordCombo),2); + } } } } @@ -2674,6 +2711,7 @@ void config_init(){ main_config.users_size=0; main_config.load_mode=1; main_config.hash_default_id=-1; + 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.users_list=NULL; diff --git a/source/ubl-settings-usergroups.h b/source/ubl-settings-usergroups.h index e14a39b..9a7fb76 100644 --- a/source/ubl-settings-usergroups.h +++ b/source/ubl-settings-usergroups.h @@ -130,6 +130,7 @@ typedef struct { config_str remove_homes; int homes_size; char *default_home; + int save_config; } config; typedef struct { -- 2.35.1 From f4fb72994af1bd9fa331ac59b45666c5172121a5 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Wed, 10 Apr 2024 16:31:37 +0600 Subject: [PATCH 6/7] Added 'upgrade to root' button --- source/ubl-settings-usergroups.c | 46 ++++++++++++++++++++++++++++++++ source/ubl-settings-usergroups.h | 2 ++ 2 files changed, 48 insertions(+) diff --git a/source/ubl-settings-usergroups.c b/source/ubl-settings-usergroups.c index 21837f0..34dc1ee 100644 --- a/source/ubl-settings-usergroups.c +++ b/source/ubl-settings-usergroups.c @@ -2721,6 +2721,8 @@ void config_init(){ main_config.sync_size=0; main_config.homes_size=0; main_config.remove_homes=NULL; + main_config.launch_arguments=NULL; + main_config.launch_size=0; int login_size; config_str login_defs = yon_file_open(uid_path,&login_size); for (int i=0;iWindow); + } + } +} + /**yon_main_window_complete(main_window *widgets) * [EN] * @@ -2884,6 +2909,25 @@ main_window *yon_main_window_complete(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->UsersTree),"button-press-event",G_CALLBACK(on_menu_open),widgets->UsersMenu); g_signal_connect(G_OBJECT(widgets->GroupsTree),"button-press-event",G_CALLBACK(on_menu_open),widgets->GroupsMenu); + + GtkWidget *root_item = gtk_menu_item_new(); + gtk_style_context_add_class(gtk_widget_get_style_context(root_item),"menuitemtop"); + gtk_style_context_add_class(gtk_widget_get_style_context(widgets->DocumentationMenuItem),"menuitemmiddle"); + gtk_style_context_remove_class(gtk_widget_get_style_context(widgets->DocumentationMenuItem),"menuitemtop"); + GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,5); + GtkWidget *root_label = gtk_label_new(ROOT_CHECK_LABEL); + GtkWidget *root_check = gtk_check_button_new(); + gtk_menu_shell_prepend(GTK_MENU_SHELL(gtk_widget_get_parent(widgets->DocumentationMenuItem)),root_item); + gtk_box_pack_start(GTK_BOX(box),root_label,1,1,0); + gtk_box_pack_start(GTK_BOX(box),root_check,0,0,0); + gtk_container_add(GTK_CONTAINER(root_item),box); + gtk_widget_show_all(root_item); + g_signal_connect(G_OBJECT(root_item),"activate", G_CALLBACK(on_root_access),widgets); + if (getuid()==0) { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(root_check),1); + gtk_widget_set_sensitive(root_item,0); + } + yon_gtk_tree_view_minimal_fixed_size_set_full(GTK_TREE_VIEW(widgets->UsersTree)); yon_gtk_tree_view_minimal_fixed_size_set_full(GTK_TREE_VIEW(widgets->GroupsTree)); yon_load_proceed(YON_CONFIG_LOCAL); @@ -2919,5 +2963,7 @@ int main(int argc, char *argv[]){ template_main_window *widgets = yon_ubl_window_setup(); yon_main_window_complete((main_window*)widgets); yon_window_config_load(config_path); + main_config.launch_arguments=yon_char_parsed_copy(argv,argc); + main_config.launch_size=argc; gtk_main(); } \ No newline at end of file diff --git a/source/ubl-settings-usergroups.h b/source/ubl-settings-usergroups.h index 9a7fb76..527fb6e 100644 --- a/source/ubl-settings-usergroups.h +++ b/source/ubl-settings-usergroups.h @@ -131,6 +131,8 @@ typedef struct { int homes_size; char *default_home; int save_config; + int launch_size; + config_str launch_arguments; } config; typedef struct { -- 2.35.1 From 8464cc725ca02bc5aa740be3716f80fd6d45cfb0 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Wed, 10 Apr 2024 17:24:43 +0600 Subject: [PATCH 7/7] Replaced root button functions to library call --- source/ubl-settings-usergroups.c | 41 +------------------------------- 1 file changed, 1 insertion(+), 40 deletions(-) diff --git a/source/ubl-settings-usergroups.c b/source/ubl-settings-usergroups.c index 34dc1ee..d4af80d 100644 --- a/source/ubl-settings-usergroups.c +++ b/source/ubl-settings-usergroups.c @@ -2827,29 +2827,6 @@ gboolean on_menu_open(GtkWidget *self,GdkEventButton *event, rmb_menu_window *wi return 0; } -void on_root_get_root(char *argline){ - yon_launch(argline); -} - -void on_root_access(GtkWidget *self, main_window *widgets){ - if (self){}; - if (getuid()){ - char *argline = LocaleName; - for (int i=1;iWindow); - } - } -} - /**yon_main_window_complete(main_window *widgets) * [EN] * @@ -2910,23 +2887,7 @@ main_window *yon_main_window_complete(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->UsersTree),"button-press-event",G_CALLBACK(on_menu_open),widgets->UsersMenu); g_signal_connect(G_OBJECT(widgets->GroupsTree),"button-press-event",G_CALLBACK(on_menu_open),widgets->GroupsMenu); - GtkWidget *root_item = gtk_menu_item_new(); - gtk_style_context_add_class(gtk_widget_get_style_context(root_item),"menuitemtop"); - gtk_style_context_add_class(gtk_widget_get_style_context(widgets->DocumentationMenuItem),"menuitemmiddle"); - gtk_style_context_remove_class(gtk_widget_get_style_context(widgets->DocumentationMenuItem),"menuitemtop"); - GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,5); - GtkWidget *root_label = gtk_label_new(ROOT_CHECK_LABEL); - GtkWidget *root_check = gtk_check_button_new(); - gtk_menu_shell_prepend(GTK_MENU_SHELL(gtk_widget_get_parent(widgets->DocumentationMenuItem)),root_item); - gtk_box_pack_start(GTK_BOX(box),root_label,1,1,0); - gtk_box_pack_start(GTK_BOX(box),root_check,0,0,0); - gtk_container_add(GTK_CONTAINER(root_item),box); - gtk_widget_show_all(root_item); - g_signal_connect(G_OBJECT(root_item),"activate", G_CALLBACK(on_root_access),widgets); - if (getuid()==0) { - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(root_check),1); - gtk_widget_set_sensitive(root_item,0); - } + yon_root_button_setup((template_main_window*)widgets,main_config.launch_arguments,main_config.launch_size); yon_gtk_tree_view_minimal_fixed_size_set_full(GTK_TREE_VIEW(widgets->UsersTree)); yon_gtk_tree_view_minimal_fixed_size_set_full(GTK_TREE_VIEW(widgets->GroupsTree)); -- 2.35.1