diff --git a/gresource.xml b/gresource.xml index 4a731e5..f5e3ee7 100644 --- a/gresource.xml +++ b/gresource.xml @@ -15,6 +15,9 @@ ubl-settings-usergroups.css + + sync_parameters.csv + ubl-settings-usergroups-banner.png diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 125f652..24cb0e2 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -39,6 +39,7 @@ set(DEPENDFILES ../ubl-settings-usergroups-savesettings.glade ../ubl-settings-usergroups-confirmation.glade ../ubl-settings-usergroups-system-deletion-confirmation.glade + ../sync_parameters.csv ../gresource.xml ../ubl-settings-usergroups-banner.png ../ubl-settings-usergroups.css @@ -83,6 +84,9 @@ set(SOURCE_FILES ubl-settings-usergroups-settings.c ubl-settings-usergroups-user.c ubl-settings-usergroups-system.c + ubl-settings-usergroups-additional-config.c + ubl-settings-usergroups-group.c + ubl-settings-usergroups-password.c ubl-settings-usergroups.h ubl-strings.h ) diff --git a/source/ubl-cmake.in b/source/ubl-cmake.in deleted file mode 100644 index d4623a7..0000000 --- a/source/ubl-cmake.in +++ /dev/null @@ -1 +0,0 @@ -#cmakedefine WEBKIT_FOUND diff --git a/source/ubl-settings-usergroups-additional-config.c b/source/ubl-settings-usergroups-additional-config.c new file mode 100644 index 0000000..e99741d --- /dev/null +++ b/source/ubl-settings-usergroups-additional-config.c @@ -0,0 +1,31 @@ +#include "ubl-settings-usergroups.h" + + + + void on_hash_changed(GtkWidget *, ubl_settings_usergroups_additional_settings_window *window){ + + int hash_size=0; + config_str hash_algos = yon_file_open(hash_list_path,&hash_size); + for (int i=1;iPasswordHashCombo,parsed[1]); + yon_char_parsed_free(parsed,parsed_size); + } + yon_char_parsed_free(hash_algos,hash_size); + } + +void on_additional_settings_clicked(GtkWidget *, GtkEntry *){ + ubl_settings_usergroups_additional_settings_window *window = yon_ubl_settings_usergroups_additional_settings_new(); + g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); + gtk_widget_show(window->Window); + +} + +void on_passwords_encrypt(){ + int pid = fork(); + if (!pid){ + exit(system(encrypt_passwords_command)); + } +} \ No newline at end of file diff --git a/source/ubl-settings-usergroups-group.c b/source/ubl-settings-usergroups-group.c new file mode 100644 index 0000000..52e367e --- /dev/null +++ b/source/ubl-settings-usergroups-group.c @@ -0,0 +1,283 @@ +#include "ubl-settings-usergroups.h" + + + + +ubl_settings_usergroups_group_creation_window *yon_ubl_settings_usergroups_group_creation_new(){ + ubl_settings_usergroups_group_creation_window *window = malloc(sizeof(ubl_settings_usergroups_group_creation_window)); + GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_ubl_settings_usergroups_group_creation); + window->CreateGroupWindow=yon_gtk_builder_get_widget(builder,"CreateGroupWindow"); + window->StatusBox=yon_gtk_builder_get_widget(builder,"StatusBox"); + window->userUIDAutoCheck=yon_gtk_builder_get_widget(builder,"GIDAutoCheck"); + window->userUIDEntry=yon_gtk_builder_get_widget(builder,"userUIDEntry"); + window->userLoginEntry=yon_gtk_builder_get_widget(builder,"userLoginEntry"); + window->userGroupsEntry=yon_gtk_builder_get_widget(builder,"userGroupsEntry"); + window->UserAdditionalGroupsButton=yon_gtk_builder_get_widget(builder,"AdditionalGroupsButton"); + window->UserCancelButton=yon_gtk_builder_get_widget(builder,"UserCancelButton"); + window->UserOkButton=yon_gtk_builder_get_widget(builder,"UserOkButton"); + window->AdditionalGroupsButton=yon_gtk_builder_get_widget(builder,"AdditionalGroupsButton"); + window->UnuniqueGIDCheck=yon_gtk_builder_get_widget(builder,"UnuniqueGIDCheck"); + window->SystemGroupCheck=yon_gtk_builder_get_widget(builder,"SystemGroupCheck"); + window->PasswordCombo=yon_gtk_builder_get_widget(builder,"PasswordCombo"); + window->PasswordEntry=yon_gtk_builder_get_widget(builder,"PasswordEntry"); + window->ChangePasswordButton=yon_gtk_builder_get_widget(builder,"ChangePasswordButton"); + window->userTitleNameLabel=yon_gtk_builder_get_widget(builder,"userTitleNameLabel"); + window->AdminGroupsEntry=yon_gtk_builder_get_widget(builder,"AdminGroupsEntry"); + window->AdminGroupsButton=yon_gtk_builder_get_widget(builder,"AdminGroupsButton"); + window->GroupaddShutdownCheck=yon_gtk_builder_get_widget(builder,"GroupaddShutdownCheck"); + window->groupExtraOptionsEntry=yon_gtk_builder_get_widget(builder,"groupExtraOptionsEntry"); + window->MainNotebook=yon_gtk_builder_get_widget(builder,"MainNotebook"); + window->last_gid=NULL; + + gtk_window_set_title(GTK_WINDOW(window->CreateGroupWindow),GROUPS_TITLE_LABEL); + + on_GID_update(NULL,window); + dictionary *entry_dict=NULL; + yon_dictionary_add_or_create_if_exists_with_data(entry_dict,"combo",window->PasswordCombo); + yon_dictionary_add_or_create_if_exists_with_data(entry_dict,"entry",window->PasswordEntry); + yon_window_config_custom_window_setup(GTK_WINDOW(window->CreateGroupWindow),"GroupAddWindow"); + g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"clicked",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->userUIDEntry); + g_signal_connect(G_OBJECT(window->ChangePasswordButton),"clicked",G_CALLBACK(on_password_change),entry_dict); + g_signal_connect(G_OBJECT(window->PasswordCombo),"changed",G_CALLBACK(on_password_combo_changed),window->ChangePasswordButton); + g_signal_connect(G_OBJECT(window->UserCancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); + g_signal_connect(G_OBJECT(window->UserAdditionalGroupsButton),"clicked",G_CALLBACK(on_user_choose),window->userGroupsEntry); + g_signal_connect(G_OBJECT(window->AdminGroupsButton),"clicked",G_CALLBACK(on_user_choose),window->AdminGroupsEntry); + g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(on_GID_update),window); + g_signal_connect(G_OBJECT(window->SystemGroupCheck),"toggled",G_CALLBACK(on_GID_update),window); + g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(yon_gtk_toggle_button_set_inactive_from_toggle_button),window->SystemGroupCheck); + g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->SystemGroupCheck); + g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(yon_gtk_toggle_button_set_inactive_from_toggle_button_inversed),window->UnuniqueGIDCheck); + g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->UnuniqueGIDCheck); + g_signal_connect(G_OBJECT(window->UnuniqueGIDCheck),"toggled",G_CALLBACK(on_system_parameter_changed),window); + g_signal_connect(G_OBJECT(window->SystemGroupCheck),"toggled",G_CALLBACK(on_system_parameter_changed),window); + g_signal_connect(G_OBJECT(window->userUIDEntry),"insert-text",G_CALLBACK(yon_on_text_insert_only_digits),NULL); +return window; +} + + + +void on_GID_update(GtkWidget *, ubl_settings_usergroups_group_creation_window *window){ + if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userUIDAutoCheck))){ + if (window->last_gid){ + gtk_entry_set_text(GTK_ENTRY(window->userUIDEntry),window->last_gid); + } else { + int config_size=0; + int final_size=0; + config_str config_groups = yon_config_get_all_by_key(GROUPADD_parameter,&config_size); + yon_char_parsed_prepend_strings(config_groups,config_size,":"); + config_str final = yon_char_parsed_merge(main_config.groups,main_config.groups_size,config_groups,config_size,&final_size); + long prev_busy=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->SystemGroupCheck))?0:main_config.MINGID; + + int minimum = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->SystemGroupCheck))?0:main_config.MINGID; + int maximum = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->SystemGroupCheck))?68000:main_config.MAXGID; + for (int i=0;i2&&minimumprev_busy){ + prev_busy=atol(parsed[2]); + } + } + yon_char_parsed_free(parsed, parsed_size); + } + gtk_entry_set_text(GTK_ENTRY(window->userUIDEntry),yon_char_from_long(prev_busy+1)); + } + } else { + gtk_entry_set_text(GTK_ENTRY(window->userUIDEntry),""); + } +} + +void on_group_save(GtkWidget *self, dictionary *dict){ + main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); + ubl_settings_usergroups_group_creation_window *window = yon_dictionary_get_data(dict->first->next,ubl_settings_usergroups_group_creation_window*); + char *final_string = NULL; + char *group_name = NULL; + char *group_users = NULL; + char *gid = NULL; + char *non_unique = NULL; + char *gsystem = NULL; + char *admins = NULL; + char *password = NULL; + int gid_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userUIDAutoCheck)); + if (gid_active){ + gid="x"; + } else { + gid = (char*)gtk_entry_get_text(GTK_ENTRY(window->userUIDEntry)); + if (yon_char_is_empty(gid)){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + gtk_notebook_set_current_page(GTK_NOTEBOOK(window->MainNotebook),0); + yon_ubl_status_highlight_incorrect(window->userUIDEntry); + return; + } + + + if (!yon_char_is_empty(window->last_gid)&&strcmp(gid,window->last_gid)){ + int config_size=0; + int final_size=0; + config_str config_users = yon_config_get_all_by_key(GROUPADD_SEARCH_macro,&config_size); + config_str final = yon_char_parsed_merge(main_config.groups,main_config.groups_size,config_users,config_size,&final_size); + if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->UnuniqueGIDCheck))){ + int found=0; + char *uid_string = (char*)gtk_entry_get_text(GTK_ENTRY(window->userUIDEntry)); + for (int i=0;i2&&!strcmp(parsed[2],uid_string)){ + if (yon_char_is_empty(window->last_gid)||(!yon_char_is_empty(window->last_gid)&&strcmp(parsed[2],window->last_gid))){ + found = yon_char_parsed_check_exist(config_users,config_size,final[i])>-1?1:2; + break; + } + } + if (parsed_size) yon_char_parsed_free(parsed,parsed_size); + } + if (found){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),found==1?GID_ALREADY_EXIST_CONFIG_LABEL:GID_ALREADY_EXIST_SYSTEM_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + yon_ubl_status_highlight_incorrect(window->userUIDEntry); + gtk_notebook_set_current_page(GTK_NOTEBOOK(window->MainNotebook),0); + return; + } + } + } + } + + group_name = (char*)gtk_entry_get_text(GTK_ENTRY(window->userLoginEntry)); + if (group_name[0]>'0'&&group_name[0]<'9'){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),GROUP_BEGINS_WITH_DIGIT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + yon_ubl_status_highlight_incorrect(window->userLoginEntry); + return; + } + if (yon_char_is_empty(group_name)){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + gtk_notebook_set_current_page(GTK_NOTEBOOK(window->MainNotebook),0); + yon_ubl_status_highlight_incorrect(window->userLoginEntry); + return; + } + { + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(widgets->GroupsList); + for_iter(model,&iter){ + char *cur; + gtk_tree_model_get(model,&iter,1, &cur,-1); + if (!yon_char_is_empty(cur)&&!strcmp(cur,group_name)){ + if (!gtk_tree_selection_iter_is_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->GroupsTree)),&iter)){ + + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),GROUP_EXIST_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + yon_ubl_status_highlight_incorrect(window->userLoginEntry); + gtk_notebook_set_current_page(GTK_NOTEBOOK(window->MainNotebook),0); + return; + } + } + } + } + + group_users = (char*)gtk_entry_get_text(GTK_ENTRY(window->userGroupsEntry)); + + admins = (char*)gtk_entry_get_text(GTK_ENTRY(window->AdminGroupsEntry)); + int non_unique_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->UnuniqueGIDCheck)); + if(non_unique_active){ + non_unique="--non-unique"; + } else non_unique=""; + + int gsystem_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->SystemGroupCheck)); + if(gsystem_active){ + gsystem="--system"; + } else gsystem=""; + + int shutdown_sync_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->GroupaddShutdownCheck)); + if (shutdown_sync_active){ + char *final_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",GROUPADD_SYNC(group_name)); + yon_config_register(GROUPADD_SYNC(group_name),final_command,"shutdown"); + yon_config_compare_ignore_set(GROUPADD_SYNC(group_name),1); + } else { + yon_config_remove_by_key(GROUPADD_SYNC(group_name)); + } + + + int password_active = gtk_combo_box_get_active(GTK_COMBO_BOX(window->PasswordCombo)); + if (password_active == 1) { + password = "!*"; + } else if (password_active == 2){ + password = (char*)gtk_entry_get_text(GTK_ENTRY(window->PasswordEntry)); + if (yon_char_is_empty(password)){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + gtk_notebook_set_current_page(GTK_NOTEBOOK(window->MainNotebook),0); + yon_ubl_status_highlight_incorrect(window->PasswordEntry); + return; + } + } else { + password=""; + } + final_string = yon_char_unite(yon_char_return_if_exist(group_users,""), + ":",yon_char_return_if_exist(gid,"x"), + ":",yon_char_return_if_exist(non_unique,""), + yon_char_return_if_exist(gsystem,""), + ":",yon_char_return_if_exist(admins,""), + ":",yon_char_return_if_exist(password,"x"), + NULL); + char *final_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",GROUPADD_SYNC(group_name)); + yon_config_register(GROUPADD(group_name),final_command,final_string); + yon_interface_update(widgets); + on_subwindow_close(self); +} + + +void yon_group_delete_confirmation_open(main_window *widgets){ + yon_confirmation_window *window = yon_delete_confirmation_new(); + gtk_window_set_transient_for(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window)); + GtkTreeIter iter,itar; + dictionary *dict = NULL; + gtk_label_set_text(GTK_LABEL(window->TitleLabel),DELETE_GROUP_CONFIRMATION_CONFIRM_LABEL); + gtk_tree_view_column_set_title(window->UserCell,GROUP_LABEL); + gtk_label_set_text(GTK_LABEL(window->HatLabel),DELETE_GROUP_CONFIRMATION_TITLE_LABEL); + gtk_tree_view_column_set_visible(gtk_tree_view_get_column(GTK_TREE_VIEW(window->DeletionTree),2),0); + gtk_tree_view_column_set_visible(gtk_tree_view_get_column(GTK_TREE_VIEW(window->DeletionTree),3),0); + gtk_tree_view_column_set_visible(gtk_tree_view_get_column(GTK_TREE_VIEW(window->DeletionTree),4),0); + yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); + yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); + g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(yon_group_delete_confirmation_save),dict); + GtkTreeModel *model = GTK_TREE_MODEL(widgets->GroupsList); + GList *list = gtk_tree_selection_get_selected_rows(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->GroupsTree)),&model); + int chosen_size=0; + config_str chosen = NULL; + for (guint i=0;iGroupsList),&iter); + for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->GroupsList),&iter)){ + char *name; + gtk_tree_model_get(GTK_TREE_MODEL(widgets->GroupsList),&iter,1,&name,-1); + gtk_list_store_append(window->list,&itar); + gtk_list_store_set(window->list,&itar,0,yon_char_parsed_check_exist(chosen,chosen_size,name)>-1?1:0,1,name,-1); + free(name); + } + gtk_widget_show(window->Window); +} + +void yon_group_delete_confirmation_save(GtkWidget *self, dictionary *dict){ + GtkTreeIter iter,itar; + main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); + yon_confirmation_window *window = yon_dictionary_get_data(dict->first->next,yon_confirmation_window*); + int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->GroupsList),&iter); + for (;valid;valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->GroupsList),&iter)){ + char *name; + gtk_tree_model_get(GTK_TREE_MODEL(widgets->GroupsList),&iter,1,&name,-1); + int valid2 = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(window->list),&itar); + for (;valid2;valid2 = gtk_tree_model_iter_next(GTK_TREE_MODEL(window->list),&itar)){ + char *name_check; + int delete; + gtk_tree_model_get(GTK_TREE_MODEL(window->list),&itar,0,&delete,1,&name_check,-1); + if (!strcmp(name,name_check)&&delete){ + yon_config_remove_by_key(GROUPADD(name)); + yon_config_remove_by_key(GROUPADD_SYNC(name)); + valid=0; + break; + } + } + } + yon_interface_update(widgets); + + on_subwindow_close(self); +} \ No newline at end of file diff --git a/source/ubl-settings-usergroups-password.c b/source/ubl-settings-usergroups-password.c new file mode 100644 index 0000000..8eef247 --- /dev/null +++ b/source/ubl-settings-usergroups-password.c @@ -0,0 +1,152 @@ +#include "ubl-settings-usergroups.h" + + + +void on_password_user_changed(GtkComboBox *,ubl_settings_usergroups_user_window *window){ + char *passw = (char*)gtk_entry_get_text(GTK_ENTRY(window->userPasswordEntry)); + if ((passw[0]=='$')){ + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->userSyncSAMBACheck),0); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->userSyncSAMBAPasswordCheck),0); + gtk_widget_set_sensitive(GTK_WIDGET(window->userSyncSAMBAPasswordCheck),0); + } else { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->userSyncSAMBACheck),0); + gtk_widget_set_sensitive(GTK_WIDGET(window->userSyncSAMBACheck),1); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->userSyncSAMBAPasswordCheck),0); + gtk_widget_set_sensitive(GTK_WIDGET(window->userSyncSAMBAPasswordCheck),1); + + } +} + + + +void on_password_change(GtkWidget *, dictionary *entry_dict){ + GtkEntry *output_target = yon_dictionary_get_data(entry_dict->first->next,GtkEntry*); + ubl_settings_usergroups_password_window *window = yon_ubl_settings_usergroups_password_new(); + dictionary *dict = NULL; + char *password = (char*)gtk_entry_get_text(output_target); + if (!yon_char_is_empty(password)){ + if (main_config.load_mode==0){ + password = yon_char_new(password); + if (!check_is_password_hash(password)){ + gtk_entry_set_text(GTK_ENTRY(window->PasswordHashEntry),password); + } else { + if (password[0]=='%'&&password[1]=='%'){ + free(yon_char_divide(password,1)); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->NoEncriptionCheck),1); + } + gtk_entry_set_text(GTK_ENTRY(window->PasswordEntry),password); + } + } + } + yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); + yon_dictionary_add_or_create_if_exists_with_data(dict,"target",output_target); + g_signal_connect(G_OBJECT(window->UserOkButton),"clicked",G_CALLBACK(on_password_accept),dict); + g_signal_connect(G_OBJECT(window->UserCancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); + gtk_window_set_transient_for(GTK_WINDOW(window->CreateGroupWindow),GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(output_target)))); + gtk_widget_show(window->CreateGroupWindow); + +} + +void on_password_show_hide(GtkEntry *self, GtkEntryIconPosition icon_pos, GdkEvent*){ + if (icon_pos == GTK_ENTRY_ICON_SECONDARY){ + int visible = gtk_entry_get_visibility(self); + if (!visible){ + gtk_entry_set_visibility(self,1); + } else { + gtk_entry_set_visibility(self,0); + gtk_entry_set_invisible_char(self,'*'); + } + } +} + +void on_password_accept(GtkWidget *self, dictionary *dict){ + ubl_settings_usergroups_password_window *window = yon_dictionary_get_data(dict->first,ubl_settings_usergroups_password_window*); + GtkEntry *entry = yon_dictionary_get_data(dict->first->next,GtkEntry*); + char *password = (char*)gtk_entry_get_text(GTK_ENTRY(window->PasswordEntry)); + char *password_check = (char*)gtk_entry_get_text(GTK_ENTRY(window->RepeatPasswordEntry)); + if (yon_char_is_empty(password)){ + 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 { + for (size_t i=0;iStatusBox),RESTRICTED_SYMBOLS_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + return; + } + } + if (yon_char_is_empty(password)){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + return; + } else if (password[0]=='%'&&password[1]=='%'){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + return; + } + if (strlen(password)StatusBox),PASSWORD_SHORT_LABEL(yon_char_from_int(main_config.password_min_length)),5,BACKGROUND_IMAGE_FAIL_TYPE); + return; + } + if (!strcmp(password,password_check)){ + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->NoEncriptionCheck))){ + char *pasw=yon_char_append("%%",password); + password=pasw; + } + gtk_entry_set_text(GTK_ENTRY(entry),password); + } else { + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),PASSWORD_MISMATCH_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + return; + } + } + on_subwindow_close(self); +} + +ubl_settings_usergroups_password_window *yon_ubl_settings_usergroups_password_new(){ + ubl_settings_usergroups_password_window *window = malloc(sizeof(ubl_settings_usergroups_password_window)); + GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_ubl_settings_usergroups_password); + window->CreateGroupWindow=yon_gtk_builder_get_widget(builder,"CreateGroupWindow"); + window->StatusBox=yon_gtk_builder_get_widget(builder,"StatusBox"); + window->PasswordEntry=yon_gtk_builder_get_widget(builder,"PasswordEntry"); + window->RepeatPasswordEntry=yon_gtk_builder_get_widget(builder,"RepeatPasswordEntry"); + window->PasswordHashEntry=yon_gtk_builder_get_widget(builder,"PasswordHashEntry"); + window->HashBox=yon_gtk_builder_get_widget(builder,"HashBox"); + window->PasswordBox=yon_gtk_builder_get_widget(builder,"PasswordBox"); + window->NoEncriptionCheck=yon_gtk_builder_get_widget(builder,"NoEncriptionCheck"); + + window->UserCancelButton=yon_gtk_builder_get_widget(builder,"UserCancelButton"); + window->UserOkButton=yon_gtk_builder_get_widget(builder,"UserOkButton"); + + yon_window_config_custom_window_setup(GTK_WINDOW(window->CreateGroupWindow),"PasswordWindow"); + g_signal_connect(G_OBJECT(window->UserCancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); + g_signal_connect(G_OBJECT(window->PasswordEntry),"icon-press",G_CALLBACK(on_password_show_hide),NULL); + g_signal_connect(G_OBJECT(window->RepeatPasswordEntry),"icon-press",G_CALLBACK(on_password_show_hide),NULL); + g_signal_connect(G_OBJECT(window->PasswordHashEntry),"icon-press",G_CALLBACK(on_password_show_hide),NULL); + gtk_window_set_title(GTK_WINDOW(window->CreateGroupWindow),PASSWORD_TITLE_LABEL); + +return window; +} + + +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; + } + } + return 0; +} \ No newline at end of file diff --git a/source/ubl-settings-usergroups-settings.c b/source/ubl-settings-usergroups-settings.c index dad7996..9a64078 100644 --- a/source/ubl-settings-usergroups-settings.c +++ b/source/ubl-settings-usergroups-settings.c @@ -200,6 +200,29 @@ ubl_settings_usergroups_additional_settings_window *yon_ubl_settings_usergroups_ gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->PasswordHashCombo),hash); } + char *parameter = config(USERADD_SYNC_parameter); + { + int size; + config_str parsed = yon_char_parse(parameter,&size,","); + int sync_parameters_size; + config_str sync_parameters = yon_resource_open_file(sync_parameters_path,&sync_parameters_size); + for(int i=0;iCancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_additional_settings_save),window); dictionary *default_dict=NULL; @@ -246,4 +269,90 @@ void on_ubl_settings_usergroups_additional_settings_open(GtkWidget *, main_windo g_signal_connect(G_OBJECT(window->UsersShutdownSwitch),"activate",G_CALLBACK(on_additional_settings_changed),window); gtk_widget_show(window->Window); +} + +config_str yon_parameter_parse(char *parameter, int *size){ + if (yon_char_is_empty(parameter)) return NULL; + char *cur; + (*size)=0; + if ((cur = strstr(parameter,"<"))){ + config_str parsed = yon_char_parse(parameter,size,">"); + for (int i=0;i<(*size);i++){ + char *tag = strstr(parsed[i],">"); + int length = strlen(parsed[i])-strlen(tag+1); + free(yon_char_divide(parsed[i],length)); + } + return parsed; + } else { + config_str parsed = yon_char_parsed_new(size,parameter,NULL); + return parsed; + } +} + +int yon_parameter_check_tag(char *parameter, char *pattern){ + char *tag_template = "<([^>]+)>"; + char *converted = ""; + char *current = pattern; + while (!yon_char_is_empty(current)){ + if ((*current)=='<'){ + char *end = strchr(current,'>'); + if (end){ + converted = yon_char_append(converted,tag_template); + current = end+1; + } else { + // закрытие тэга не найдено + } + } else { + char *temp = yon_char_append_c(converted,*current); + if (!yon_char_is_empty(converted)) free(converted); + converted = temp; + current++; + } + } + + GRegex *regex = g_regex_new(converted,G_REGEX_EXTENDED,0,NULL); + if (regex){ + GMatchInfo *match; + if (g_regex_match(regex,parameter,0,&match)){ + return 1; + } + } + + + return 0; +} + +config_str yon_parameter_get_by_template(char *parameter, char *pattern, int *size){ + config_str final = NULL; + char *tag_template = "<([^>]+)>"; + char *converted = ""; + char *current = pattern; + while (!yon_char_is_empty(current)){ + if ((*current)=='<'){ + char *end = strchr(current,'>'); + if (end){ + converted = yon_char_append(converted,tag_template); + current = end+1; + } else { + // закрытие тэга не найдено + } + } else { + yon_char_append_c(converted,*current); + current++; + } + } + GRegex *regex = g_regex_new(converted,G_REGEX_EXTENDED,0,NULL); + if (regex){ + GMatchInfo *match; + if (g_regex_match(regex,parameter,0,&match)){ + int match_count = g_match_info_get_match_count(match); + for (int i=0;iuserDontCheckCheck)); + if (do_not_check_actve) + do_not_check = "--badnames"; + + login = (char*)gtk_entry_get_text(GTK_ENTRY(window->userLoginEntry)); + if (login[0]>'0'&&login[0]<'9'&&!do_not_check_actve){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),USER_BEGINS_WITH_DIGIT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + gtk_notebook_set_current_page(GTK_NOTEBOOK(window->MainNotebook),0); + yon_ubl_status_highlight_incorrect(window->userLoginEntry); + return; + } + if (yon_char_is_empty(login)){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + gtk_notebook_set_current_page(GTK_NOTEBOOK(window->MainNotebook),0); + yon_ubl_status_highlight_incorrect(window->userLoginEntry); + return; + } + + int user_shell_active = gtk_combo_box_get_active(GTK_COMBO_BOX(window->userShellCombo)); + if (user_shell_active>0){ + user_shell = yon_char_unite("--shell ",!strcmp(gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->userShellCombo)),"Set")?(char*)gtk_entry_get_text(GTK_ENTRY(window->userShellEntry)):(char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->userShellCombo)),NULL); + + } else user_shell=""; + + int user_home_active = gtk_combo_box_get_active(GTK_COMBO_BOX(window->userHomeCombo)); + if (user_home_active==2){ + char *path = (char*)gtk_entry_get_text(GTK_ENTRY(window->userHomeEntry)); + if (!yon_char_is_empty(path)) + user_home=yon_char_unite("--home-dir ",path,NULL); + else user_home = ""; + } else if (user_home_active==1){ + user_home="--no-create-home"; + } else user_home = ""; + + int system_user_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userCreateSystemCheck)); + if (system_user_active) + create_system_user = "--system"; + + int create_ununique_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userCreateUnuniqueCheck)); + if (create_ununique_active) + create_ununique = "--non-unique"; + int main_group_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userGroupsCheck)); + if (!main_group_active){ + main_group = (char*)gtk_entry_get_text(GTK_ENTRY(window->userGroupsEntry)); + if (yon_char_is_empty(main_group)){ + no_user_group="--no-user-group"; + } + } else { + main_group = ""; + } + char *final_string = user_home; + final_string = yon_char_unite(final_string,!yon_char_is_empty(final_string)?" ":"", + yon_char_return_if_exist(user_shell,""), + !yon_char_is_empty(user_shell)?" ":"", + yon_char_return_if_exist(create_system_user,""), + !yon_char_is_empty(create_system_user)?" ":"", + yon_char_return_if_exist(create_ununique,""), + !yon_char_is_empty(create_ununique)?" ":"", + yon_char_return_if_exist(do_not_check,""), + !yon_char_is_empty(do_not_check)?" ":"", + yon_char_return_if_exist(no_user_group,""), + NULL); + if (final_string&&strlen(final_string)){ + if (final_string[strlen(final_string)-1]==' ') final_string[strlen(final_string)-1]='\0'; + gtk_entry_set_text(GTK_ENTRY(window->userExtraOptionsEntry),final_string); + free(final_string); + } else { + gtk_entry_set_text(GTK_ENTRY(window->userExtraOptionsEntry),""); + } +} ubl_settings_usergroups_user_window *yon_ubl_settings_usergroups_user_new(){ ubl_settings_usergroups_user_window *window = malloc(sizeof(ubl_settings_usergroups_user_window)); @@ -194,12 +274,6 @@ void on_user_save(GtkWidget *self, dictionary *dict){ char *password_change_interval_maximum = NULL; char *warning_days = NULL; char *no_activity_days = NULL; - // char *force_at_next_login = NULL; - char *user_shell = NULL; - char *user_home = NULL; - char *create_system_user = NULL; - char *create_ununique = NULL; - char *do_not_check = NULL; int samba_sync = 0; int samba_password_sync = 0; int deactivate = 0; @@ -254,9 +328,6 @@ void on_user_save(GtkWidget *self, dictionary *dict){ } int do_not_check_actve = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userDontCheckCheck)); - if (do_not_check_actve) - do_not_check = "--badnames"; - login = (char*)gtk_entry_get_text(GTK_ENTRY(window->userLoginEntry)); if (login[0]>'0'&&login[0]<'9'&&!do_not_check_actve){ yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),USER_BEGINS_WITH_DIGIT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); @@ -368,31 +439,6 @@ void on_user_save(GtkWidget *self, dictionary *dict){ no_activity_days = yon_char_from_long(no_activity_days_active); } - int user_shell_active = gtk_combo_box_get_active(GTK_COMBO_BOX(window->userShellCombo)); - if (user_shell_active>0){ - char *shell_string = (char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->userShellCombo)); - if (strcmp(shell_string,SET_LABEL)){ - user_shell = yon_char_unite("--shell ",shell_string," ",NULL); - } else { - user_shell = yon_char_unite("--shell ",(char*)gtk_entry_get_text(GTK_ENTRY(window->userShellEntry)),NULL); - } - } else user_shell=""; - - int user_home_active = gtk_combo_box_get_active(GTK_COMBO_BOX(window->userHomeCombo)); - if (user_home_active==2){ - user_home=yon_char_unite("--home-dir ",(char*)gtk_entry_get_text(GTK_ENTRY(window->userHomeEntry)),NULL); - } else if (user_home_active==1){ - user_home="--no-create-home"; - } else user_home = ""; - - int system_user_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userCreateSystemCheck)); - if (system_user_active) - create_system_user = "--system"; - - int create_ununique_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userCreateUnuniqueCheck)); - if (create_ununique_active) - create_ununique = "--non-unique"; - samba_sync = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userSyncSAMBACheck)); samba_password_sync = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userSyncSAMBAPasswordCheck)); if (samba_sync){ @@ -491,25 +537,8 @@ void on_user_save(GtkWidget *self, dictionary *dict){ } else { yon_config_remove_by_key(USERSHADOW_SYNC(window->old_username)); } - GtkTreeIter iter; - GtkTreeModel *model = GTK_TREE_MODEL(widgets->UsersList); - char *password_status=NULL; - if (password_active==0) password_status = DEFAULT_USER_LABEL; - else if (password_active==1) password_status = NO_PASSWORD_LABEL; - else if (password[0]=='%'&&password[1]=='%') password_status = UNENCRYPTED_LABEL; - else password_status = ENCRYPTED_LABEL; - if (!gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->UsersTree)),&model,&iter)) - gtk_list_store_append(widgets->UsersList,&iter); - gtk_list_store_set(widgets->UsersList,&iter, - 0,deactivate, - 1,yon_char_return_if_exist(uid_string,""), - 2,yon_char_return_if_exist(login,""), - 3,yon_char_return_if_exist(username,""), - 4,yon_char_return_if_exist(main_group,login), - 5,yon_char_return_if_exist(additional_groups,yon_config_get_by_key(USERGROUPS_parameter)), - 6,yon_char_unite(yon_char_return_if_exist(user_home,""),yon_char_return_if_exist(user_shell,""),yon_char_return_if_exist(create_system_user,""),yon_char_return_if_exist(create_ununique,""),yon_char_return_if_exist(do_not_check,""),NULL), - 7,password_status, - -1); + yon_interface_update(widgets); + on_subwindow_close(self); } diff --git a/source/ubl-settings-usergroups.c b/source/ubl-settings-usergroups.c index b20d96d..5f9c672 100644 --- a/source/ubl-settings-usergroups.c +++ b/source/ubl-settings-usergroups.c @@ -182,6 +182,43 @@ void yon_interface_update(main_window *widgets){ } yon_system_load(widgets); + + + if (!yon_window_config_check_exist("window","UserColumn1")){ + yon_gtk_tree_view_set_fixed_size(GTK_TREE_VIEW(widgets->UsersTree), 1,-1); + + } + if (!yon_window_config_check_exist("window","UserColumn2")){ + yon_gtk_tree_view_set_fixed_size(GTK_TREE_VIEW(widgets->UsersTree), 2,-1); + } + if (!yon_window_config_check_exist("window","UserColumn3")){ + yon_gtk_tree_view_set_fixed_size(GTK_TREE_VIEW(widgets->UsersTree), 3,-1); + } + + if (!yon_window_config_check_exist("window","GroupColumn1")){ + yon_gtk_tree_view_set_fixed_size(GTK_TREE_VIEW(widgets->GroupsTree),1,-1); + } + if (!yon_window_config_check_exist("window","GroupColumn2")){ + yon_gtk_tree_view_set_fixed_size(GTK_TREE_VIEW(widgets->GroupsTree),2,-1); + } + + if (!yon_window_config_check_exist("window","SystemUserColumn1")){ + yon_gtk_tree_view_set_fixed_size(GTK_TREE_VIEW(widgets->SystemTree),1,-1); + } + if (!yon_window_config_check_exist("window","SystemUserColumn2")){ + yon_gtk_tree_view_set_fixed_size(GTK_TREE_VIEW(widgets->SystemTree),2,-1); + } + if (!yon_window_config_check_exist("window","SystemUserColumn3")){ + yon_gtk_tree_view_set_fixed_size(GTK_TREE_VIEW(widgets->SystemTree),3,-1); + } + + if (!yon_window_config_check_exist("window","SystemGroupColumn2")){ + yon_gtk_tree_view_set_fixed_size(GTK_TREE_VIEW(widgets->SystemGroupsTree),1,-1); + } + if (!yon_window_config_check_exist("window","SystemGroupColumn2")){ + yon_gtk_tree_view_set_fixed_size(GTK_TREE_VIEW(widgets->SystemGroupsTree),2,-1); + } + } void on_config_local_load(GtkWidget *, main_window *widgets){ @@ -606,51 +643,6 @@ void yon_delete_confirmation_save(GtkWidget *self, dictionary *dict){ on_subwindow_close(self); } -void yon_group_delete_confirmation_save(GtkWidget *self, dictionary *dict){ - GtkTreeIter iter,itar; - main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); - yon_confirmation_window *window = yon_dictionary_get_data(dict->first->next,yon_confirmation_window*); - int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->GroupsList),&iter); - for (;valid;valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->GroupsList),&iter)){ - char *name; - gtk_tree_model_get(GTK_TREE_MODEL(widgets->GroupsList),&iter,1,&name,-1); - int valid2 = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(window->list),&itar); - for (;valid2;valid2 = gtk_tree_model_iter_next(GTK_TREE_MODEL(window->list),&itar)){ - char *name_check; - int delete; - gtk_tree_model_get(GTK_TREE_MODEL(window->list),&itar,0,&delete,1,&name_check,-1); - if (!strcmp(name,name_check)&&delete){ - yon_config_remove_by_key(GROUPADD(name)); - yon_config_remove_by_key(GROUPADD_SYNC(name)); - valid=0; - break; - } - } - } - yon_interface_update(widgets); - - 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; - } - } - return 0; -} yon_confirmation_window *yon_delete_confirmation_new(){ yon_confirmation_window *window = malloc(sizeof(yon_confirmation_window)); @@ -760,41 +752,6 @@ void yon_delete_confirmation_open(main_window *widgets){ gtk_widget_show(window->Window); } -void yon_group_delete_confirmation_open(main_window *widgets){ - yon_confirmation_window *window = yon_delete_confirmation_new(); - gtk_window_set_transient_for(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window)); - GtkTreeIter iter,itar; - dictionary *dict = NULL; - gtk_label_set_text(GTK_LABEL(window->TitleLabel),DELETE_GROUP_CONFIRMATION_CONFIRM_LABEL); - gtk_tree_view_column_set_title(window->UserCell,GROUP_LABEL); - gtk_label_set_text(GTK_LABEL(window->HatLabel),DELETE_GROUP_CONFIRMATION_TITLE_LABEL); - gtk_tree_view_column_set_visible(gtk_tree_view_get_column(GTK_TREE_VIEW(window->DeletionTree),2),0); - gtk_tree_view_column_set_visible(gtk_tree_view_get_column(GTK_TREE_VIEW(window->DeletionTree),3),0); - gtk_tree_view_column_set_visible(gtk_tree_view_get_column(GTK_TREE_VIEW(window->DeletionTree),4),0); - yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); - yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); - g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(yon_group_delete_confirmation_save),dict); - GtkTreeModel *model = GTK_TREE_MODEL(widgets->GroupsList); - GList *list = gtk_tree_selection_get_selected_rows(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->GroupsTree)),&model); - int chosen_size=0; - config_str chosen = NULL; - for (guint i=0;iGroupsList),&iter); - for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->GroupsList),&iter)){ - char *name; - gtk_tree_model_get(GTK_TREE_MODEL(widgets->GroupsList),&iter,1,&name,-1); - gtk_list_store_append(window->list,&itar); - gtk_list_store_set(window->list,&itar,0,yon_char_parsed_check_exist(chosen,chosen_size,name)>-1?1:0,1,name,-1); - free(name); - } - gtk_widget_show(window->Window); -} - yon_savasettings_window *yon_saving_settings_new(){ GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_ubl_settings_usergroups_savesettings); yon_savasettings_window *window = malloc(sizeof(yon_savasettings_window)); @@ -1005,67 +962,11 @@ void on_groups_multiple_clicked(GtkWidget *, GtkEntry *output_target){ } -void on_passwords_encrypt(){ - int pid = fork(); - if (!pid){ - exit(system(encrypt_passwords_command)); - } -} - -void on_password_change(GtkWidget *, dictionary *entry_dict){ - GtkEntry *output_target = yon_dictionary_get_data(entry_dict->first->next,GtkEntry*); - ubl_settings_usergroups_password_window *window = yon_ubl_settings_usergroups_password_new(); - dictionary *dict = NULL; - char *password = (char*)gtk_entry_get_text(output_target); - if (!yon_char_is_empty(password)){ - if (main_config.load_mode==0){ - password = yon_char_new(password); - if (!check_is_password_hash(password)){ - gtk_entry_set_text(GTK_ENTRY(window->PasswordHashEntry),password); - } else { - if (password[0]=='%'&&password[1]=='%'){ - free(yon_char_divide(password,1)); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->NoEncriptionCheck),1); - } - gtk_entry_set_text(GTK_ENTRY(window->PasswordEntry),password); - } - } - } - yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); - yon_dictionary_add_or_create_if_exists_with_data(dict,"target",output_target); - g_signal_connect(G_OBJECT(window->UserOkButton),"clicked",G_CALLBACK(on_password_accept),dict); - g_signal_connect(G_OBJECT(window->UserCancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); - gtk_window_set_transient_for(GTK_WINDOW(window->CreateGroupWindow),GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(output_target)))); - gtk_widget_show(window->CreateGroupWindow); - -} - -void on_additional_settings_clicked(GtkWidget *, GtkEntry *){ - ubl_settings_usergroups_additional_settings_window *window = yon_ubl_settings_usergroups_additional_settings_new(); - g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); - gtk_widget_show(window->Window); - -} - void on_expiration_clicked(GtkWidget *, ubl_settings_usergroups_user_window *window){ gtk_popover_popup(GTK_POPOVER(window->CalendarPopup)); } // standard functions - - void on_hash_changed(GtkWidget *, ubl_settings_usergroups_additional_settings_window *window){ - - int hash_size=0; - config_str hash_algos = yon_file_open(hash_list_path,&hash_size); - for (int i=1;iPasswordHashCombo,parsed[1]); - yon_char_parsed_free(parsed,parsed_size); - } - yon_char_parsed_free(hash_algos,hash_size); - } void on_user_choose(GtkWidget *, GtkEntry *target){ ubl_settings_usergroups_group_window *window = yon_ubl_settings_usergroups_group_new(1); @@ -1117,187 +1018,6 @@ void on_user_choose(GtkWidget *, GtkEntry *target){ gtk_widget_show(window->GroupsWindow); } -void on_GID_update(GtkWidget *, ubl_settings_usergroups_group_creation_window *window){ - if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userUIDAutoCheck))){ - if (window->last_gid){ - gtk_entry_set_text(GTK_ENTRY(window->userUIDEntry),window->last_gid); - } else { - int config_size=0; - int final_size=0; - config_str config_groups = yon_config_get_all_by_key(GROUPADD_parameter,&config_size); - yon_char_parsed_prepend_strings(config_groups,config_size,":"); - config_str final = yon_char_parsed_merge(main_config.groups,main_config.groups_size,config_groups,config_size,&final_size); - long prev_busy=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->SystemGroupCheck))?0:main_config.MINGID; - - int minimum = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->SystemGroupCheck))?0:main_config.MINGID; - int maximum = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->SystemGroupCheck))?68000:main_config.MAXGID; - for (int i=0;i2&&minimumprev_busy){ - prev_busy=atol(parsed[2]); - } - } - yon_char_parsed_free(parsed, parsed_size); - } - gtk_entry_set_text(GTK_ENTRY(window->userUIDEntry),yon_char_from_long(prev_busy+1)); - } - } else { - gtk_entry_set_text(GTK_ENTRY(window->userUIDEntry),""); - } -} - -void on_group_save(GtkWidget *self, dictionary *dict){ - main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); - ubl_settings_usergroups_group_creation_window *window = yon_dictionary_get_data(dict->first->next,ubl_settings_usergroups_group_creation_window*); - char *final_string = NULL; - char *group_name = NULL; - char *group_users = NULL; - char *gid = NULL; - char *non_unique = NULL; - char *gsystem = NULL; - char *admins = NULL; - char *password = NULL; - int gid_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userUIDAutoCheck)); - if (gid_active){ - gid="x"; - } else { - gid = (char*)gtk_entry_get_text(GTK_ENTRY(window->userUIDEntry)); - if (yon_char_is_empty(gid)){ - yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - gtk_notebook_set_current_page(GTK_NOTEBOOK(window->MainNotebook),0); - yon_ubl_status_highlight_incorrect(window->userUIDEntry); - return; - } - - - if (!yon_char_is_empty(window->last_gid)&&strcmp(gid,window->last_gid)){ - int config_size=0; - int final_size=0; - config_str config_users = yon_config_get_all_by_key(GROUPADD_SEARCH_macro,&config_size); - config_str final = yon_char_parsed_merge(main_config.groups,main_config.groups_size,config_users,config_size,&final_size); - if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->UnuniqueGIDCheck))){ - int found=0; - char *uid_string = (char*)gtk_entry_get_text(GTK_ENTRY(window->userUIDEntry)); - for (int i=0;i2&&!strcmp(parsed[2],uid_string)){ - if (yon_char_is_empty(window->last_gid)||(!yon_char_is_empty(window->last_gid)&&strcmp(parsed[2],window->last_gid))){ - found = yon_char_parsed_check_exist(config_users,config_size,final[i])>-1?1:2; - break; - } - } - if (parsed_size) yon_char_parsed_free(parsed,parsed_size); - } - if (found){ - yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),found==1?GID_ALREADY_EXIST_CONFIG_LABEL:GID_ALREADY_EXIST_SYSTEM_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - yon_ubl_status_highlight_incorrect(window->userUIDEntry); - gtk_notebook_set_current_page(GTK_NOTEBOOK(window->MainNotebook),0); - return; - } - } - } - } - - group_name = (char*)gtk_entry_get_text(GTK_ENTRY(window->userLoginEntry)); - if (group_name[0]>'0'&&group_name[0]<'9'){ - yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),GROUP_BEGINS_WITH_DIGIT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - yon_ubl_status_highlight_incorrect(window->userLoginEntry); - return; - } - if (yon_char_is_empty(group_name)){ - yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - gtk_notebook_set_current_page(GTK_NOTEBOOK(window->MainNotebook),0); - yon_ubl_status_highlight_incorrect(window->userLoginEntry); - return; - } - { - GtkTreeIter iter; - GtkTreeModel *model = GTK_TREE_MODEL(widgets->GroupsList); - for_iter(model,&iter){ - char *cur; - gtk_tree_model_get(model,&iter,1, &cur,-1); - if (!yon_char_is_empty(cur)&&!strcmp(cur,group_name)){ - if (!gtk_tree_selection_iter_is_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->GroupsTree)),&iter)){ - - yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),GROUP_EXIST_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - yon_ubl_status_highlight_incorrect(window->userLoginEntry); - gtk_notebook_set_current_page(GTK_NOTEBOOK(window->MainNotebook),0); - return; - } - } - } - } - - group_users = (char*)gtk_entry_get_text(GTK_ENTRY(window->userGroupsEntry)); - - admins = (char*)gtk_entry_get_text(GTK_ENTRY(window->AdminGroupsEntry)); - int non_unique_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->UnuniqueGIDCheck)); - if(non_unique_active){ - non_unique="--non-unique"; - } else non_unique=""; - - int gsystem_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->SystemGroupCheck)); - if(gsystem_active){ - gsystem="--system"; - } else gsystem=""; - - int shutdown_sync_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->GroupaddShutdownCheck)); - if (shutdown_sync_active){ - char *final_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",GROUPADD_SYNC(group_name)); - yon_config_register(GROUPADD_SYNC(group_name),final_command,"shutdown"); - yon_config_compare_ignore_set(GROUPADD_SYNC(group_name),1); - } else { - yon_config_remove_by_key(GROUPADD_SYNC(group_name)); - } - - - int password_active = gtk_combo_box_get_active(GTK_COMBO_BOX(window->PasswordCombo)); - if (password_active == 1) { - password = "!*"; - } else if (password_active == 2){ - password = (char*)gtk_entry_get_text(GTK_ENTRY(window->PasswordEntry)); - if (yon_char_is_empty(password)){ - yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - gtk_notebook_set_current_page(GTK_NOTEBOOK(window->MainNotebook),0); - yon_ubl_status_highlight_incorrect(window->PasswordEntry); - return; - } - } else { - password=""; - } - final_string = yon_char_unite(yon_char_return_if_exist(group_users,""), - ":",yon_char_return_if_exist(gid,"x"), - ":",yon_char_return_if_exist(non_unique,""), - yon_char_return_if_exist(gsystem,""), - ":",yon_char_return_if_exist(admins,""), - ":",yon_char_return_if_exist(password,"x"), - NULL); - char *final_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",GROUPADD_SYNC(group_name)); - yon_config_register(GROUPADD(group_name),final_command,final_string); - GtkTreeIter iter; - GtkTreeModel *model = GTK_TREE_MODEL(widgets->GroupsList); - if (!gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->GroupsTree)),&model,&iter)) - gtk_list_store_append(widgets->GroupsList,&iter); - char *passwor = (char*)gtk_entry_get_text(GTK_ENTRY(window->PasswordEntry)); - char *password_status=NULL; - if (password_active==0) - password_status=DEFAULT_USER_LABEL; - else if (password_active==1) - password_status = NO_PASSWORD_LABEL; - else if (password_active == 2){ - if (check_is_password_hash(passwor)){ - password_status=UNENCRYPTED_LABEL; - } else { - password_status=UNENCRYPTED_LABEL; - } - } - gtk_list_store_set(widgets->GroupsList,&iter,0,strcmp(gid,"x")?gid:"",1,group_name,2,group_users,3,yon_char_append(non_unique,gsystem),4,password_status,-1); - on_subwindow_close(self); -} - void on_system_parameter_changed(GtkWidget *, ubl_settings_usergroups_group_creation_window *window){ char *non_unique = NULL; @@ -1321,58 +1041,6 @@ void on_system_parameter_changed(GtkWidget *, ubl_settings_usergroups_group_crea gtk_entry_set_text(GTK_ENTRY(window->groupExtraOptionsEntry),final_str); free(final_str); } - -ubl_settings_usergroups_group_creation_window *yon_ubl_settings_usergroups_group_creation_new(){ - ubl_settings_usergroups_group_creation_window *window = malloc(sizeof(ubl_settings_usergroups_group_creation_window)); - GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_ubl_settings_usergroups_group_creation); - window->CreateGroupWindow=yon_gtk_builder_get_widget(builder,"CreateGroupWindow"); - window->StatusBox=yon_gtk_builder_get_widget(builder,"StatusBox"); - window->userUIDAutoCheck=yon_gtk_builder_get_widget(builder,"GIDAutoCheck"); - window->userUIDEntry=yon_gtk_builder_get_widget(builder,"userUIDEntry"); - window->userLoginEntry=yon_gtk_builder_get_widget(builder,"userLoginEntry"); - window->userGroupsEntry=yon_gtk_builder_get_widget(builder,"userGroupsEntry"); - window->UserAdditionalGroupsButton=yon_gtk_builder_get_widget(builder,"AdditionalGroupsButton"); - window->UserCancelButton=yon_gtk_builder_get_widget(builder,"UserCancelButton"); - window->UserOkButton=yon_gtk_builder_get_widget(builder,"UserOkButton"); - window->AdditionalGroupsButton=yon_gtk_builder_get_widget(builder,"AdditionalGroupsButton"); - window->UnuniqueGIDCheck=yon_gtk_builder_get_widget(builder,"UnuniqueGIDCheck"); - window->SystemGroupCheck=yon_gtk_builder_get_widget(builder,"SystemGroupCheck"); - window->PasswordCombo=yon_gtk_builder_get_widget(builder,"PasswordCombo"); - window->PasswordEntry=yon_gtk_builder_get_widget(builder,"PasswordEntry"); - window->ChangePasswordButton=yon_gtk_builder_get_widget(builder,"ChangePasswordButton"); - window->userTitleNameLabel=yon_gtk_builder_get_widget(builder,"userTitleNameLabel"); - window->AdminGroupsEntry=yon_gtk_builder_get_widget(builder,"AdminGroupsEntry"); - window->AdminGroupsButton=yon_gtk_builder_get_widget(builder,"AdminGroupsButton"); - window->GroupaddShutdownCheck=yon_gtk_builder_get_widget(builder,"GroupaddShutdownCheck"); - window->groupExtraOptionsEntry=yon_gtk_builder_get_widget(builder,"groupExtraOptionsEntry"); - window->MainNotebook=yon_gtk_builder_get_widget(builder,"MainNotebook"); - window->last_gid=NULL; - - gtk_window_set_title(GTK_WINDOW(window->CreateGroupWindow),GROUPS_TITLE_LABEL); - - on_GID_update(NULL,window); - dictionary *entry_dict=NULL; - yon_dictionary_add_or_create_if_exists_with_data(entry_dict,"combo",window->PasswordCombo); - yon_dictionary_add_or_create_if_exists_with_data(entry_dict,"entry",window->PasswordEntry); - yon_window_config_custom_window_setup(GTK_WINDOW(window->CreateGroupWindow),"GroupAddWindow"); - g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"clicked",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->userUIDEntry); - g_signal_connect(G_OBJECT(window->ChangePasswordButton),"clicked",G_CALLBACK(on_password_change),entry_dict); - g_signal_connect(G_OBJECT(window->PasswordCombo),"changed",G_CALLBACK(on_password_combo_changed),window->ChangePasswordButton); - g_signal_connect(G_OBJECT(window->UserCancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); - g_signal_connect(G_OBJECT(window->UserAdditionalGroupsButton),"clicked",G_CALLBACK(on_user_choose),window->userGroupsEntry); - g_signal_connect(G_OBJECT(window->AdminGroupsButton),"clicked",G_CALLBACK(on_user_choose),window->AdminGroupsEntry); - g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(on_GID_update),window); - g_signal_connect(G_OBJECT(window->SystemGroupCheck),"toggled",G_CALLBACK(on_GID_update),window); - g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(yon_gtk_toggle_button_set_inactive_from_toggle_button),window->SystemGroupCheck); - g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->SystemGroupCheck); - g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(yon_gtk_toggle_button_set_inactive_from_toggle_button_inversed),window->UnuniqueGIDCheck); - g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->UnuniqueGIDCheck); - g_signal_connect(G_OBJECT(window->UnuniqueGIDCheck),"toggled",G_CALLBACK(on_system_parameter_changed),window); - g_signal_connect(G_OBJECT(window->SystemGroupCheck),"toggled",G_CALLBACK(on_system_parameter_changed),window); - g_signal_connect(G_OBJECT(window->userUIDEntry),"insert-text",G_CALLBACK(yon_on_text_insert_only_digits),NULL); -return window; -} - void on_group_clicked(GtkCellRenderer *, char *path, ubl_settings_usergroups_group_window *window){ GtkTreeIter iter; gboolean status; @@ -1504,89 +1172,6 @@ void on_standard_groups_open(GtkWidget *, main_window *widgets){ gtk_widget_show(window->GroupsWindow); } -void on_password_show_hide(GtkEntry *self, GtkEntryIconPosition icon_pos, GdkEvent*){ - if (icon_pos == GTK_ENTRY_ICON_SECONDARY){ - int visible = gtk_entry_get_visibility(self); - if (!visible){ - gtk_entry_set_visibility(self,1); - } else { - gtk_entry_set_visibility(self,0); - gtk_entry_set_invisible_char(self,'*'); - } - } -} - -void on_password_accept(GtkWidget *self, dictionary *dict){ - ubl_settings_usergroups_password_window *window = yon_dictionary_get_data(dict->first,ubl_settings_usergroups_password_window*); - GtkEntry *entry = yon_dictionary_get_data(dict->first->next,GtkEntry*); - char *password = (char*)gtk_entry_get_text(GTK_ENTRY(window->PasswordEntry)); - char *password_check = (char*)gtk_entry_get_text(GTK_ENTRY(window->RepeatPasswordEntry)); - if (yon_char_is_empty(password)){ - 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 { - for (size_t i=0;iStatusBox),RESTRICTED_SYMBOLS_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - return; - } - } - if (yon_char_is_empty(password)){ - yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - return; - } else if (password[0]=='%'&&password[1]=='%'){ - yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - return; - } - if (strlen(password)StatusBox),PASSWORD_SHORT_LABEL(yon_char_from_int(main_config.password_min_length)),5,BACKGROUND_IMAGE_FAIL_TYPE); - return; - } - if (!strcmp(password,password_check)){ - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->NoEncriptionCheck))){ - char *pasw=yon_char_append("%%",password); - password=pasw; - } - gtk_entry_set_text(GTK_ENTRY(entry),password); - } else { - yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),PASSWORD_MISMATCH_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - return; - } - } - on_subwindow_close(self); -} - -ubl_settings_usergroups_password_window *yon_ubl_settings_usergroups_password_new(){ - ubl_settings_usergroups_password_window *window = malloc(sizeof(ubl_settings_usergroups_password_window)); - GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_ubl_settings_usergroups_password); - window->CreateGroupWindow=yon_gtk_builder_get_widget(builder,"CreateGroupWindow"); - window->StatusBox=yon_gtk_builder_get_widget(builder,"StatusBox"); - window->PasswordEntry=yon_gtk_builder_get_widget(builder,"PasswordEntry"); - window->RepeatPasswordEntry=yon_gtk_builder_get_widget(builder,"RepeatPasswordEntry"); - window->PasswordHashEntry=yon_gtk_builder_get_widget(builder,"PasswordHashEntry"); - window->HashBox=yon_gtk_builder_get_widget(builder,"HashBox"); - window->PasswordBox=yon_gtk_builder_get_widget(builder,"PasswordBox"); - window->NoEncriptionCheck=yon_gtk_builder_get_widget(builder,"NoEncriptionCheck"); - - window->UserCancelButton=yon_gtk_builder_get_widget(builder,"UserCancelButton"); - window->UserOkButton=yon_gtk_builder_get_widget(builder,"UserOkButton"); - - yon_window_config_custom_window_setup(GTK_WINDOW(window->CreateGroupWindow),"PasswordWindow"); - g_signal_connect(G_OBJECT(window->UserCancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); - g_signal_connect(G_OBJECT(window->PasswordEntry),"icon-press",G_CALLBACK(on_password_show_hide),NULL); - g_signal_connect(G_OBJECT(window->RepeatPasswordEntry),"icon-press",G_CALLBACK(on_password_show_hide),NULL); - g_signal_connect(G_OBJECT(window->PasswordHashEntry),"icon-press",G_CALLBACK(on_password_show_hide),NULL); - gtk_window_set_title(GTK_WINDOW(window->CreateGroupWindow),PASSWORD_TITLE_LABEL); - -return window; -} - void yon_system_load(main_window *window){ gtk_list_store_clear(window->liststore1); gtk_list_store_clear(window->liststore2); @@ -1707,13 +1292,6 @@ void on_system_update(GtkWidget *, main_window *window){ yon_system_load(window); } - - - - - - - void on_toggle_button_set_active_from_combo_box(GtkComboBox *self,ubl_settings_usergroups_user_window *window){ char *passw = (char*)gtk_entry_get_text(GTK_ENTRY(window->userPasswordEntry)); if (gtk_combo_box_get_active(self)<=1||(passw[0]=='$')){ @@ -1729,21 +1307,6 @@ void on_toggle_button_set_active_from_combo_box(GtkComboBox *self,ubl_settings_u } } -void on_password_user_changed(GtkComboBox *,ubl_settings_usergroups_user_window *window){ - char *passw = (char*)gtk_entry_get_text(GTK_ENTRY(window->userPasswordEntry)); - if ((passw[0]=='$')){ - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->userSyncSAMBACheck),0); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->userSyncSAMBAPasswordCheck),0); - gtk_widget_set_sensitive(GTK_WIDGET(window->userSyncSAMBAPasswordCheck),0); - } else { - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->userSyncSAMBACheck),0); - gtk_widget_set_sensitive(GTK_WIDGET(window->userSyncSAMBACheck),1); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->userSyncSAMBAPasswordCheck),0); - gtk_widget_set_sensitive(GTK_WIDGET(window->userSyncSAMBAPasswordCheck),1); - - } -} - void on_toggle_button_set_active_from_toggle_button_inversed(GtkToggleButton *, ubl_settings_usergroups_user_window *window){ char *passw = (char*)gtk_entry_get_text(GTK_ENTRY(window->userPasswordEntry)); if ((passw[0]!='$')&>k_combo_box_get_active(GTK_COMBO_BOX(window->userPasswordCombo))>1){ @@ -1786,87 +1349,6 @@ void on_date_selected(GtkWidget *, ubl_settings_usergroups_user_window *window){ free(yr); } -void on_parameter_changed(GtkWidget *,ubl_settings_usergroups_user_window *window){ - char *user_shell=NULL; - char *user_home=NULL; - char *login=NULL; - char *create_system_user=NULL; - char *create_ununique=NULL; - char *do_not_check=NULL; - char *main_group=NULL; - char *no_user_group=NULL; - - int do_not_check_actve = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userDontCheckCheck)); - if (do_not_check_actve) - do_not_check = "--badnames"; - - login = (char*)gtk_entry_get_text(GTK_ENTRY(window->userLoginEntry)); - if (login[0]>'0'&&login[0]<'9'&&!do_not_check_actve){ - yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),USER_BEGINS_WITH_DIGIT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - gtk_notebook_set_current_page(GTK_NOTEBOOK(window->MainNotebook),0); - yon_ubl_status_highlight_incorrect(window->userLoginEntry); - return; - } - if (yon_char_is_empty(login)){ - yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - gtk_notebook_set_current_page(GTK_NOTEBOOK(window->MainNotebook),0); - yon_ubl_status_highlight_incorrect(window->userLoginEntry); - return; - } - - int user_shell_active = gtk_combo_box_get_active(GTK_COMBO_BOX(window->userShellCombo)); - if (user_shell_active>0){ - user_shell = yon_char_unite("--shell ",!strcmp(gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->userShellCombo)),"Set")?(char*)gtk_entry_get_text(GTK_ENTRY(window->userShellEntry)):(char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->userShellCombo)),NULL); - - } else user_shell=""; - - int user_home_active = gtk_combo_box_get_active(GTK_COMBO_BOX(window->userHomeCombo)); - if (user_home_active==2){ - char *path = (char*)gtk_entry_get_text(GTK_ENTRY(window->userHomeEntry)); - if (!yon_char_is_empty(path)) - user_home=yon_char_unite("--home-dir ",path,NULL); - else user_home = ""; - } else if (user_home_active==1){ - user_home="--no-create-home"; - } else user_home = ""; - - int system_user_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userCreateSystemCheck)); - if (system_user_active) - create_system_user = "--system"; - - int create_ununique_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userCreateUnuniqueCheck)); - if (create_ununique_active) - create_ununique = "--non-unique"; - int main_group_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userGroupsCheck)); - if (!main_group_active){ - main_group = (char*)gtk_entry_get_text(GTK_ENTRY(window->userGroupsEntry)); - if (yon_char_is_empty(main_group)){ - no_user_group="--no-user-group"; - } - } else { - main_group = ""; - } - char *final_string = user_home; - final_string = yon_char_unite(final_string,!yon_char_is_empty(final_string)?" ":"", - yon_char_return_if_exist(user_shell,""), - !yon_char_is_empty(user_shell)?" ":"", - yon_char_return_if_exist(create_system_user,""), - !yon_char_is_empty(create_system_user)?" ":"", - yon_char_return_if_exist(create_ununique,""), - !yon_char_is_empty(create_ununique)?" ":"", - yon_char_return_if_exist(do_not_check,""), - !yon_char_is_empty(do_not_check)?" ":"", - yon_char_return_if_exist(no_user_group,""), - NULL); - if (final_string&&strlen(final_string)){ - if (final_string[strlen(final_string)-1]==' ') final_string[strlen(final_string)-1]='\0'; - gtk_entry_set_text(GTK_ENTRY(window->userExtraOptionsEntry),final_string); - free(final_string); - } else { - gtk_entry_set_text(GTK_ENTRY(window->userExtraOptionsEntry),""); - } -} - void on_remove_expired(GtkWidget *, GtkEntryIconPosition icon_pos, GdkEvent *, GtkEntry *target){ if (icon_pos == GTK_ENTRY_ICON_SECONDARY){ gtk_entry_set_text(target,""); @@ -2548,12 +2030,19 @@ main_window *yon_main_window_complete(main_window *widgets){ yon_window_config_add_listener((GtkWidget*)g_list_nth_data(list,i),yon_char_append("GroupColumn",yon_char_from_int(i)),"fixed-width",YON_TYPE_INT); } g_list_free(list); + list = gtk_tree_view_get_columns(GTK_TREE_VIEW(widgets->SystemTree)); + for (guint i=0;iSystemGroupsTree)); + for (guint i=0;iUsersTree),1,-1); - // yon_gtk_tree_view_set_fixed_size(GTK_TREE_VIEW(widgets->GroupsTree),1,2,-1); - - // yon_gtk_tree_view_set_fixed_size(GTK_TREE_VIEW(widgets->SystemTree),1,2,3,-1); - // yon_gtk_tree_view_set_fixed_size(GTK_TREE_VIEW(widgets->SystemGroupsTree),1,2,-1); yon_window_config_load(config_path); yon_save_window_set_postsave_function(on_save_done,widgets); diff --git a/source/ubl-settings-usergroups.h b/source/ubl-settings-usergroups.h index 7f9098e..2b94d1f 100644 --- a/source/ubl-settings-usergroups.h +++ b/source/ubl-settings-usergroups.h @@ -38,6 +38,7 @@ #define CssPath "/com/ublinux/css/ubl-settings-usergroups.css" #define config_path yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL) #define icon_path "com.ublinux.ubl-settings-usergroups" +#define sync_parameters_path "resource:///com/ublinux/csv/sync_parameters.csv" #define LocalePath "/usr/share/locale" #define LocaleName "ubl-settings-usergroups" @@ -534,4 +535,7 @@ system_remove_confirmation_window *yon_system_remove_confirmation_window_new(); void on_delete_system_user(GtkWidget *, dictionary *dict); void on_delete_system_group(GtkWidget *, dictionary *dict); char *yon_char_parsed_to_string_include_empty(config_str parsed, int parsed_size, char *divider); +config_str yon_parameter_parse(char *parameter, int *size); +int yon_parameter_check_tag(char *tag,char *string); +config_str yon_parameter_get_by_template(char *parameter, char *pattern, int *size); #endif \ No newline at end of file diff --git a/sync_parameters.csv b/sync_parameters.csv new file mode 100644 index 0000000..915b239 --- /dev/null +++ b/sync_parameters.csv @@ -0,0 +1,6 @@ +PARAMETER:DESCRIPTION +shutdown@all:When the system is shut down, synchronize all users in the system with the global configuration +shutdown@users:On system shutdown, synchronize users 1000<=UID<=6000 in the system with the global configuration +shutdown@systems:On system shutdown, synchronize system users 500<=UID<=999 in the system with the global configuration +shutdown@-:When the system is shut down, synchronize the range of UIDs of users in the system with the global configuration +shutdown@:When the system is shut down, synchronize the user UID in the system with the global configuration \ No newline at end of file