diff --git a/csv/shell_list.csv b/csv/shell_list.csv new file mode 100644 index 0000000..5cb00f0 --- /dev/null +++ b/csv/shell_list.csv @@ -0,0 +1,10 @@ +Shell +/bin/bash +/bin/sh +/bin/ksh +/bin/csh +/bin/tcsh +/bin/dash +/usr/bin/nologin +/usr/bin/git-shell +/usr/bin/zsh \ No newline at end of file diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 33d015f..3e6ddde 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -86,8 +86,9 @@ set(LIBRARIES ${GTK_LIBRARIES} ${WEBKIT_LIBRARIES} ${VTE291_LIBRARIES} - ubl-utils - ublsettings-ui + ublsettings + ublsettings-gtk3 + ublsettingsui-gtk3 pthread) diff --git a/source/ubl-settings-usergroups.c b/source/ubl-settings-usergroups.c index 1843f6e..97d51a9 100644 --- a/source/ubl-settings-usergroups.c +++ b/source/ubl-settings-usergroups.c @@ -4,38 +4,111 @@ config main_config; //functions -void yon_load_proceed(char *command){ - +int yon_load_proceed(YON_CONFIG_TYPE type){ + if (yon_config_load_register(type,"logging","",NULL)){ + return 1; + } + } -void yon_save_proceed(char *section,YON_CONFIG_TYPE type){ -} +void on_config_save(){ + yon_save_proceed(NULL,YON_CONFIG_BOTH,"logging", "",NULL); + +} + +void on_config_global_save(){ + yon_save_proceed("global",YON_CONFIG_GLOBAL,"logging", "",NULL); +} + +void on_config_local_save(){ + yon_save_proceed("system",YON_CONFIG_LOCAL,"logging", "",NULL); +} + +void on_password_combo_changed(GtkComboBox *self, GtkWidget *target){ + gtk_widget_set_sensitive(target,gtk_combo_box_get_active(self)>1); +} + void on_filechooser_open(GtkWidget *self, GtkEntry *output_target){ + GtkWidget *dialog = gtk_file_chooser_dialog_new(TITLE_LABEL,NULL,GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,CANCEL_LABEL,GTK_RESPONSE_CANCEL,ACCEPT_LABEL,GTK_RESPONSE_ACCEPT,NULL); + int responce = gtk_dialog_run(GTK_DIALOG(dialog)); + if (responce==GTK_RESPONSE_ACCEPT){ + char *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); + gtk_entry_set_text(output_target,filename); + } + // 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_groups_save(GtkWidget *self, dictionary *dict){ + ubl_settings_usergroups_group_window *window = yon_dictionary_get_data(dict->first,ubl_settings_usergroups_group_window*); + GtkEntry *output = yon_dictionary_get_data(dict->first->next,GtkEntry*); + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(window->list); + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->GroupsTree)),&model,&iter)){ + char *name; + gtk_tree_model_get(model,&iter,1,&name,-1); + gtk_entry_set_text(output,name); + free(name); + } + on_subwindow_close(self); +} + void on_groups_clicked(GtkWidget *self, GtkEntry *output_target){ ubl_settings_usergroups_group_window *window = yon_ubl_settings_usergroups_group_new(); gtk_tree_view_column_set_visible(gtk_tree_view_get_column(GTK_TREE_VIEW(window->GroupsTree),0),0); - g_signal_connect(G_OBJECT(window->GroupsOkButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); + gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->GroupsTree)),GTK_SELECTION_SINGLE); + dictionary *dict = NULL; + yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); + yon_dictionary_add_or_create_if_exists_with_data(dict,"output",output_target); + + g_signal_connect(G_OBJECT(window->GroupsOkButton),"clicked",G_CALLBACK(on_groups_save),dict); gtk_widget_show(window->GroupsWindow); } +void on_groups_multiple_save(GtkWidget *self, dictionary *dict){ + ubl_settings_usergroups_group_window *window = yon_dictionary_get_data(dict->first,ubl_settings_usergroups_group_window*); + GtkEntry *output = yon_dictionary_get_data(dict->first->next,GtkEntry*); + GtkTreeIter iter; + int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(window->list),&iter); + char *full_groups=""; + for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(window->list),&iter)){ + char *name; + int status; + gtk_tree_model_get(GTK_TREE_MODEL(window->list),&iter,0,&status,1,&name,-1); + if (status){ + char *extend_groups = yon_char_unite(full_groups,!yon_char_is_empty(full_groups)?",":"",name,NULL); + if (!yon_char_is_empty(full_groups)) + free(full_groups); + full_groups=extend_groups; + } + } + gtk_entry_set_text(output,full_groups); + on_subwindow_close(self); +} + void on_groups_multiple_clicked(GtkWidget *self, GtkEntry *output_target){ ubl_settings_usergroups_group_window *window = yon_ubl_settings_usergroups_group_new(); - g_signal_connect(G_OBJECT(window->GroupsOkButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); + dictionary *dict = NULL; + yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); + yon_dictionary_add_or_create_if_exists_with_data(dict,"output",output_target); + g_signal_connect(G_OBJECT(window->GroupsOkButton),"clicked",G_CALLBACK(on_groups_multiple_save),dict); gtk_widget_show(window->GroupsWindow); } void on_password_change(GtkWidget *self, GtkEntry *output_target){ ubl_settings_usergroups_password_window *window = yon_ubl_settings_usergroups_password_new(); - g_signal_connect(G_OBJECT(window->UserOkButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); + dictionary *dict = NULL; + 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); } @@ -53,7 +126,36 @@ void on_expiration_clicked(GtkWidget *self, GtkEntry *output_target){ // standard functions - + void on_additional_settings_save(GtkWidget *self, ubl_settings_usergroups_additional_settings_window *window){ + const char *default_user = (char*)gtk_entry_get_text(GTK_ENTRY(window->DefaultUserNameEntry)); + if (!yon_char_is_empty(default_user)){ + yon_config_register("DEFAULTUSER","users",yon_char_new((char*)default_user)); + } else { + yon_config_remove_by_key("DEFAULTUSER"); + } + char *default_password = (char*)gtk_entry_get_text(GTK_ENTRY(window->DefaultPasswordEntry)); + if (!yon_char_is_empty(default_password)){ + yon_config_register("DEFAULTPASSWD","users",default_password); + } else { + yon_config_remove_by_key("DEFAULTPASSWD"); + } + char *root_password = (char*)gtk_entry_get_text(GTK_ENTRY(window->RootPasswordEntry)); + if (!yon_char_is_empty(root_password)){ + yon_config_register("DEFAULTROOTPASSWD","users",root_password); + } else { + yon_config_remove_by_key("DEFAULTROOTPASSWD"); + } + int user_k_admin = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->DefaultUserAdministratorCheck)); + if (user_k_admin){ + yon_config_register("ADDADM","users","yes"); + } else { + yon_config_register("ADDADM","users","no"); + } + char *hash = (char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->PasswordHashCombo)); + if (!yon_char_is_empty(hash)){ + yon_config_register("HASHPASSWD","users",hash); + } + } ubl_settings_usergroups_additional_settings_window *yon_ubl_settings_usergroups_additional_settings_new(){ ubl_settings_usergroups_additional_settings_window *window = malloc(sizeof(ubl_settings_usergroups_additional_settings_window)); @@ -64,12 +166,41 @@ ubl_settings_usergroups_additional_settings_window *yon_ubl_settings_usergroups_ window->DefaultUserAdministratorCheck=yon_gtk_builder_get_widget(builder,"DefaultUserAdministratorCheck"); window->DefaultPasswordCombo=yon_gtk_builder_get_widget(builder,"DefaultPasswordCombo"); window->DefaultPasswordEntry=yon_gtk_builder_get_widget(builder,"DefaultPasswordEntry"); + window->DefaultPasswordButton=yon_gtk_builder_get_widget(builder,"DefaultPasswordButton"); window->RootPasswordCombo=yon_gtk_builder_get_widget(builder,"RootPasswordCombo"); window->RootPasswordEntry=yon_gtk_builder_get_widget(builder,"RootPasswordEntry"); + window->RootPasswordButton=yon_gtk_builder_get_widget(builder,"RootPasswordButton"); window->PasswordHashCombo=yon_gtk_builder_get_widget(builder,"PasswordHashCombo"); window->CancelButton=yon_gtk_builder_get_widget(builder,"CancelButton"); window->AcceptButton=yon_gtk_builder_get_widget(builder,"AcceptButton"); + + char *default_user = yon_config_get_by_key("DEFAULTUSER"); + if (!yon_char_is_empty(default_user)) + gtk_entry_set_text(GTK_ENTRY(window->DefaultUserNameEntry),default_user); + char *default_password = yon_config_get_by_key("DEFAULTPASSWD"); + if (!yon_char_is_empty(default_password)) + gtk_entry_set_text(GTK_ENTRY(window->DefaultPasswordEntry),default_password); + char *root_password = yon_config_get_by_key("DEFAULTROOTPASSWD"); + if (!yon_char_is_empty(root_password)) + gtk_entry_set_text(GTK_ENTRY(window->RootPasswordEntry),root_password); + char *is_k_admin = yon_config_get_by_key("ADDADM"); + if (!yon_char_is_empty(is_k_admin)) + if (!strcmp(is_k_admin,"yes")) + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->DefaultUserAdministratorCheck),1); + char *hash = yon_config_get_by_key("HASHPASSWD"); + if (!yon_char_is_empty(hash)){ + gtk_combo_box_set_active(GTK_COMBO_BOX(window->PasswordHashCombo),yon_gtk_combo_box_text_find(window->PasswordHashCombo,hash)); + } + + g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); + g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_additional_settings_save),window); + g_signal_connect(G_OBJECT(window->DefaultPasswordButton),"clicked",G_CALLBACK(on_password_change),window->DefaultPasswordEntry); + g_signal_connect(G_OBJECT(window->RootPasswordButton),"clicked",G_CALLBACK(on_password_change),window->RootPasswordEntry); + + g_signal_connect(G_OBJECT(window->RootPasswordCombo),"changed",G_CALLBACK(on_password_combo_changed),window->RootPasswordButton); + g_signal_connect(G_OBJECT(window->DefaultPasswordCombo),"changed",G_CALLBACK(on_password_combo_changed),window->DefaultPasswordButton); + return window; } @@ -111,49 +242,136 @@ return window; } +void on_group_clicked(GtkCellRenderer *self, char *path, ubl_settings_usergroups_group_window *window){ + GtkTreeIter iter; + gboolean status; + gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->list),&iter,path); + gtk_tree_model_get(GTK_TREE_MODEL(window->list),&iter,0,&status,-1); + gtk_list_store_set(window->list,&iter,0,!status,-1); +} ubl_settings_usergroups_group_window *yon_ubl_settings_usergroups_group_new(){ ubl_settings_usergroups_group_window *window = malloc(sizeof(ubl_settings_usergroups_group_window)); GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_ubl_settings_usergroups_group); - window->groupsAdmGroupCheck=yon_gtk_builder_get_widget(builder,"groupsAdmGroupCheck"); - window->groupsAudioGroupCheck=yon_gtk_builder_get_widget(builder,"groupsAudioGroupCheck"); - window->groupsAutologinGroupCheck=yon_gtk_builder_get_widget(builder,"groupsAutologinGroupCheck"); - window->groupsAvahiGroupCheck=yon_gtk_builder_get_widget(builder,"groupsAvahiGroupCheck"); - window->groupsBinGroupCheck=yon_gtk_builder_get_widget(builder,"groupsBinGroupCheck"); - window->groupsBrlapiGroupCheck=yon_gtk_builder_get_widget(builder,"groupsBrlapiGroupCheck"); - window->groupsBrittyGroupCheck=yon_gtk_builder_get_widget(builder,"groupsBrittyGroupCheck"); - window->groupsBumblbeeGroupCheck=yon_gtk_builder_get_widget(builder,"groupsBumblbeeGroupCheck"); - window->groupsChronyGroupCheck=yon_gtk_builder_get_widget(builder,"groupsChronyGroupCheck"); - window->groupsClamavGroupCheck=yon_gtk_builder_get_widget(builder,"groupsClamavGroupCheck"); - window->groupsCockpitWsGroupCheck=yon_gtk_builder_get_widget(builder,"groupsCockpitWsGroupCheck"); - window->groupsCockpitWsinstanceGroupCheck=yon_gtk_builder_get_widget(builder,"groupsCockpitWsinstanceGroupCheck"); - window->groupsColordGroupCheck=yon_gtk_builder_get_widget(builder,"groupsColordGroupCheck"); window->GroupsWindow=yon_gtk_builder_get_widget(builder,"GroupsWindow"); window->GroupsTree=yon_gtk_builder_get_widget(builder,"GroupsTree"); window->GroupsCancelButton=yon_gtk_builder_get_widget(builder,"GroupsCancelButton"); window->GroupsOkButton=yon_gtk_builder_get_widget(builder,"GroupsOkButton"); + window->StatusCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"StatusCell")); + window->list = gtk_list_store_new(2,G_TYPE_BOOLEAN,G_TYPE_STRING); + + g_signal_connect(G_OBJECT(window->StatusCell),"toggled",G_CALLBACK(on_group_clicked),window); + GtkTreeIter iter; + gtk_tree_view_set_model(GTK_TREE_VIEW(window->GroupsTree),GTK_TREE_MODEL(window->list)); + for (int i=0;ilist,&iter); + gtk_list_store_set(window->list,&iter,0,0,1,group_name,-1); + } + g_signal_connect(G_OBJECT(window->GroupsCancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); return window; } +void on_standard_groups_accept(GtkWidget *self, ubl_settings_usergroups_group_window *window){ + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(window->list); + int valid = gtk_tree_model_get_iter_first(model,&iter); + char *standard_groups=""; + for (;valid;valid=gtk_tree_model_iter_next(model,&iter)){ + int status; + char *group; + gtk_tree_model_get(model,&iter,0,&status,1,&group,-1); + if (status){ + char *extend_groups = yon_char_unite(standard_groups,!yon_char_is_empty(standard_groups)?",":"",group,NULL); + if (!yon_char_is_empty(standard_groups)) + free(standard_groups); + standard_groups=extend_groups; + } + } + yon_config_register("USERGROUPS","users",standard_groups); + on_subwindow_close(self); +} + void on_standard_groups_open(GtkWidget *self, main_window *widgets){ ubl_settings_usergroups_group_window *window = yon_ubl_settings_usergroups_group_new(); - g_signal_connect(G_OBJECT(window->GroupsOkButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); + g_signal_connect(G_OBJECT(window->GroupsOkButton),"clicked",G_CALLBACK(on_standard_groups_accept),window); gtk_window_set_transient_for(GTK_WINDOW(window->GroupsWindow),GTK_WINDOW(widgets->Window)); + char *groups = yon_config_get_by_key("USERGROUPS"); + if (!yon_char_is_empty(groups)){ + GtkTreeIter iter; + int size; + config_str standard_groups = yon_char_parse(groups,&size,","); + int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(window->list),&iter); + for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(window->list),&iter)){ + char *cur_name; + gtk_tree_model_get(GTK_TREE_MODEL(window->list),&iter,1,&cur_name,-1); + for (int i=0;ilist,&iter,0,1,-1); + } + } + free(cur_name); + } + } gtk_widget_show(window->GroupsWindow); } +void on_password_show_hide(GtkEntry *self, GtkEntryIconPosition icon_pos, GdkEvent* event){ + 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_changed(GtkEntry *self, ubl_settings_usergroups_password_window *window){ + char *self_text = (char*)gtk_entry_get_text(GTK_ENTRY(window->PasswordEntry)); + char *pair_text = (char*)gtk_entry_get_text(GTK_ENTRY(window->RepeatPasswordEntry)); + if ((!yon_char_is_empty(self_text)&&!yon_char_is_empty(pair_text))&&strcmp(self_text,pair_text)){ + yon_ubl_status_box_spawn_infinite(GTK_CONTAINER(window->StatusBox),PASSWORD_MISMATCH_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); + } else { + yon_ubl_status_box_despawn_infinite(GTK_CONTAINER(window->StatusBox)); + } +} + +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 = yon_char_new((char*)gtk_entry_get_text(GTK_ENTRY(window->PasswordEntry))); + char *password_check = (char*)gtk_entry_get_text(GTK_ENTRY(window->PasswordEntry)); + if (strcmp(password,password_check)){ + + } + +} 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->UserCancelButton=yon_gtk_builder_get_widget(builder,"UserCancelButton"); window->UserOkButton=yon_gtk_builder_get_widget(builder,"UserOkButton"); 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); + g_signal_connect(G_OBJECT(window->PasswordEntry),"changed",G_CALLBACK(on_password_changed),window); + g_signal_connect(G_OBJECT(window->RepeatPasswordEntry),"changed",G_CALLBACK(on_password_changed),window); + gtk_window_set_title(GTK_WINDOW(window->CreateGroupWindow),TITLE_LABEL); + return window; } @@ -229,6 +447,10 @@ ubl_settings_usergroups_user_window *yon_ubl_settings_usergroups_user_new(){ g_signal_connect(G_OBJECT(window->userPasswordButton),"clicked",G_CALLBACK(on_password_change),window->userPasswordEntry); g_signal_connect(G_OBJECT(window->userAdditionalGroupsButton),"clicked",G_CALLBACK(on_groups_multiple_clicked),window->userAdditionalGroupsEntry); g_signal_connect(G_OBJECT(window->userPasswordExpirationButton),"clicked",G_CALLBACK(on_expiration_clicked),window->userPasswordExpirationEntry); + g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->userUIDEntry); + g_signal_connect(G_OBJECT(window->userHomeCombo),"changed",G_CALLBACK(on_password_combo_changed),window->userHomeEntry); + g_signal_connect(G_OBJECT(window->userHomeCombo),"changed",G_CALLBACK(on_password_combo_changed),window->userHomeButton); + g_signal_connect(G_OBJECT(window->userPasswordCombo),"changed",G_CALLBACK(on_password_combo_changed),window->userPasswordButton); return window; } @@ -312,7 +534,9 @@ void config_init(){ main_config.lock_help=0; main_config.lock_load_global=0; main_config.lock_save_global=0; - main_config.lock_save_local=0; + main_config.lock_save_local=0; + main_config.groups_size=0; + main_config.groups = yon_file_open(groups_path,&main_config.groups_size); } /**yon_main_window_complete(main_window *widgets) @@ -341,9 +565,6 @@ void yon_main_window_complete(main_window *widgets){ widgets->UsersTree=yon_gtk_builder_get_widget(builder,"UsersTree"); widgets->GroupsTree=yon_gtk_builder_get_widget(builder,"GroupsTree"); widgets->MainNotebook=yon_gtk_builder_get_widget(builder,"MainNotebook"); - - main_config.usersListStore = GTK_LIST_STORE(gtk_builder_get_object(builder,"UsersList")); - main_config.groupsListStore = GTK_LIST_STORE(gtk_builder_get_object(builder,"GroupsList")); if (main_config.lock_load_global == 1){ @@ -365,6 +586,9 @@ void yon_main_window_complete(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->button3),"clicked",G_CALLBACK(on_standard_groups_open),widgets); g_signal_connect(G_OBJECT(widgets->button2),"clicked",G_CALLBACK(on_ubl_settings_usergroups_additional_settings_open),widgets); g_signal_connect(G_OBJECT(widgets->button1),"clicked",G_CALLBACK(on_settings_usergroups_system_open),widgets); + g_signal_connect(G_OBJECT(widgets->SaveMenuItem),"activate",G_CALLBACK(on_config_save),widgets); + g_signal_connect(G_OBJECT(widgets->SaveGlobalMenuItem),"activate",G_CALLBACK(on_config_global_save),widgets); + g_signal_connect(G_OBJECT(widgets->SaveLocalMenuItem),"activate",G_CALLBACK(on_config_local_save),widgets); gtk_widget_show(widgets->Window); @@ -450,6 +674,7 @@ int main(int argc, char *argv[]){ yon_ubl_connect_config((_template_config*)&main_config); yon_ubl_window_init(TITLE_LABEL,TITLE_INFO_LABEL,LocaleName,CssPath,LocaleName,version_application,WIKI_LINK); template_main_window *widgets = yon_ubl_window_setup(); - yon_main_window_complete((main_window*)widgets); + yon_main_window_complete((main_window*)widgets); + yon_load_proceed(YON_CONFIG_LOCAL); gtk_main(); } \ No newline at end of file diff --git a/source/ubl-settings-usergroups.h b/source/ubl-settings-usergroups.h index 4ee3e97..cae69b7 100644 --- a/source/ubl-settings-usergroups.h +++ b/source/ubl-settings-usergroups.h @@ -7,8 +7,9 @@ #include #include #include -#include -#include +#include +#include +#include #include "../compile/ubl-cmake.h" #ifdef WEBKIT_FOUND #include @@ -38,6 +39,8 @@ #define clear_config_global_command "ubconfig --target global remove TEMP_SECTION TEMP_PATAMETER" #define clear_config_local_command "ubconfig --target system remove TEMP_SECTION TEMP_PATAMETER" +#define groups_path "/etc/passwd" + typedef char* string; string version_application; @@ -45,20 +48,22 @@ char *local; typedef struct { // Standard config. DO NOT EDIT - MUST BE SAME AS ublsettings-ui's template_config STRUCT { - int socket_id; - int load_socket_id; - int save_socket_id; - - int lock_help; - int lock_save_local; - int lock_save_global; - int lock_load_global; - - int always_open_documentation; + int socket_id; + int load_socket_id; + int save_socket_id; + + int lock_help; + int lock_save_local; + int lock_save_global; + int lock_load_global; + + int load_mode; + + int always_open_documentation; // } Standard config. DO NOT EDIT - MUST BE SAME AS ublsettings-ui's template_config STRUCT // Type custom parameters below: : - GtkListStore *usersListStore; - GtkListStore *groupsListStore; + config_str groups; + int groups_size; } config; @@ -126,8 +131,10 @@ typedef struct{ GtkWidget *DefaultUserAdministratorCheck; GtkWidget *DefaultPasswordCombo; GtkWidget *DefaultPasswordEntry; + GtkWidget *DefaultPasswordButton; GtkWidget *RootPasswordCombo; GtkWidget *RootPasswordEntry; + GtkWidget *RootPasswordButton; GtkWidget *PasswordHashCombo; GtkWidget *CancelButton; GtkWidget *AcceptButton; @@ -152,23 +159,12 @@ typedef struct{ } ubl_settings_usergroups_group_creation_window; typedef struct{ - GtkWidget *groupsAdmGroupCheck; - GtkWidget *groupsAudioGroupCheck; - GtkWidget *groupsAutologinGroupCheck; - GtkWidget *groupsAvahiGroupCheck; - GtkWidget *groupsBinGroupCheck; - GtkWidget *groupsBrlapiGroupCheck; - GtkWidget *groupsBrittyGroupCheck; - GtkWidget *groupsBumblbeeGroupCheck; - GtkWidget *groupsChronyGroupCheck; - GtkWidget *groupsClamavGroupCheck; - GtkWidget *groupsCockpitWsGroupCheck; - GtkWidget *groupsCockpitWsinstanceGroupCheck; - GtkWidget *groupsColordGroupCheck; GtkWidget *GroupsWindow; GtkWidget *GroupsTree; + GtkListStore *list; GtkWidget *GroupsCancelButton; GtkWidget *GroupsOkButton; + GtkCellRenderer *StatusCell; } ubl_settings_usergroups_group_window; typedef struct{ @@ -176,6 +172,9 @@ typedef struct{ GtkWidget *StatusBox; GtkWidget *UserCancelButton; GtkWidget *UserOkButton; + GtkWidget *PasswordEntry; + GtkWidget *RepeatPasswordEntry; + GtkWidget *PasswordHashEntry; } ubl_settings_usergroups_password_window; typedef struct{ @@ -240,4 +239,6 @@ ubl_settings_usergroups_system_window *yon_ubl_settings_usergroups_system_new(); void on_settings_usergroups_system_open(GtkWidget *self, main_window *widgets); -ubl_settings_usergroups_user_window *yon_ubl_settings_usergroups_user_new(); \ No newline at end of file +ubl_settings_usergroups_user_window *yon_ubl_settings_usergroups_user_new(); + +void on_password_accept(GtkWidget *self, dictionary *dict); \ No newline at end of file diff --git a/source/ubl-strings.h b/source/ubl-strings.h index cfe1e13..3b9ef8c 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -85,5 +85,5 @@ #define HOME_DIRECTORY_LABEL _("Home directory") #define GROUP_LABEL _("Group") -#define GROUP_LABEL _("Group") +#define PASSWORD_MISMATCH_LABEL _("Password mismatch") #define GROUP_LABEL _("Group") \ No newline at end of file diff --git a/ubl-settings-usergroups-additional-settings.glade b/ubl-settings-usergroups-additional-settings.glade index d088cc7..0dba5a6 100644 --- a/ubl-settings-usergroups-additional-settings.glade +++ b/ubl-settings-usergroups-additional-settings.glade @@ -13,6 +13,16 @@ False com.ublinux.ubl-settings-usergroups.accept-symbolic + + True + False + com.ublinux.ubl-settings-usergroups.edit-symbolic + + + True + False + com.ublinux.ubl-settings-usergroups.edit-symbolic + 600 350 @@ -60,7 +70,7 @@ True False 5 - 5 + 4 Default user name (if there's no another): 0 @@ -75,6 +85,7 @@ True True com.ublinux.ubl-settings-usergroups.profile-symbolic + superuser True @@ -118,8 +129,7 @@ True False - 5 - 5 + 4 Default user password: 0 @@ -150,6 +160,7 @@ True + False True 30 False @@ -164,6 +175,23 @@ 2 + + + True + False + True + True + image3 + + + + False + True + 3 + + False @@ -180,6 +208,7 @@ True False + 4 Root user password: 0 @@ -210,6 +239,7 @@ True + False True 30 False @@ -221,10 +251,26 @@ True True - end 2 + + + True + False + True + True + image4 + + + + False + True + 4 + + False @@ -249,7 +295,7 @@ True False 5 - 5 + 4 Password hash algorythm: 0 diff --git a/ubl-settings-usergroups-group.glade b/ubl-settings-usergroups-group.glade index ee79aea..b04bc10 100644 --- a/ubl-settings-usergroups-group.glade +++ b/ubl-settings-usergroups-group.glade @@ -3,193 +3,6 @@ - - True - False - vertical - - - adm - True - True - False - True - - - False - True - 0 - - - - - audio - True - True - False - True - - - False - True - 1 - - - - - autologin - True - True - False - True - - - False - True - 2 - - - - - avahi - True - True - False - True - - - False - True - 3 - - - - - bin - True - True - False - True - - - False - True - 4 - - - - - brlapi - True - True - False - True - - - False - True - 5 - - - - - britty - True - True - False - True - - - False - True - 6 - - - - - bumblbee - True - True - False - True - - - False - True - 7 - - - - - chrony - True - True - False - True - - - False - True - 8 - - - - - clamav - True - True - False - True - - - False - True - 9 - - - - - cockpit-ws - True - True - False - True - - - False - True - 10 - - - - - cockpit-wsinstance - True - True - False - True - - - False - True - 11 - - - - - colord - True - True - False - True - - - False - True - 12 - - - True False @@ -206,7 +19,7 @@ False False True - dialog-question-symbolic + com.ublinux.ubl-settings-usergroups True @@ -229,12 +42,14 @@ True True - + + none + - + 0 @@ -261,6 +76,42 @@ 0 + + + False + 5 + + + Add to new: + True + True + False + True + + + False + True + 0 + + + + + True + True + + + False + True + 1 + + + + + False + True + 1 + + True @@ -306,7 +157,7 @@ False True - 1 + 2 diff --git a/ubl-settings-usergroups-password.glade b/ubl-settings-usergroups-password.glade index cbe7be8..fcd4258 100644 --- a/ubl-settings-usergroups-password.glade +++ b/ubl-settings-usergroups-password.glade @@ -3,21 +3,6 @@ - - True - False - com.ublinux.ubl-settings-usergroups.view-symbolic - - - True - False - com.ublinux.ubl-settings-usergroups.view-symbolic - - - True - False - com.ublinux.ubl-settings-usergroups.view-symbolic - True False @@ -85,7 +70,7 @@ - Save + Accept True True True @@ -135,13 +120,15 @@ - + True True False * - com.ublinux.ubl-settings-usergroups.key-symbolic + True + com.ublinux.ubl-settings-usergroups.view-symbolic ******** + password True @@ -149,22 +136,6 @@ 1 - - - True - True - True - image3 - - - - False - True - 2 - - True @@ -191,13 +162,15 @@ - + True True False * - com.ublinux.ubl-settings-usergroups.key-symbolic + True + com.ublinux.ubl-settings-usergroups.view-symbolic ******** + password True @@ -205,22 +178,6 @@ 1 - - - True - True - True - image1 - - - - False - True - 2 - - True @@ -258,9 +215,12 @@ - + True True + False + * + com.ublinux.ubl-settings-usergroups.view-symbolic True @@ -268,22 +228,6 @@ 1 - - - True - True - True - image2 - - - - False - True - 2 - - True diff --git a/ubl-settings-usergroups-user.glade b/ubl-settings-usergroups-user.glade index a6c6d20..217655b 100644 --- a/ubl-settings-usergroups-user.glade +++ b/ubl-settings-usergroups-user.glade @@ -5,22 +5,22 @@ - 100 + 1e+21 1 10 - 100 + 1e+21 1 10 - 100 + 1e+21 1 10 - 100 + 1e+21 1 10 @@ -234,6 +234,7 @@ True + False True False * @@ -252,6 +253,7 @@ True + False True True image3 @@ -430,7 +432,7 @@ True False - 0 + 0.019999999552965164 in @@ -711,7 +713,7 @@ True False - 0 + 0.019999999552965164 in @@ -747,8 +749,19 @@ True False + 0 Default + /bin/bash + /bin/sh + /bin/ksh + /bin/csh + /bin/tcsh + /bin/dash + /usr/bin/nologin + /usr/bin/git-shell + /usr/bin/zsh + Set @@ -760,6 +773,7 @@ True + False True @@ -796,8 +810,11 @@ True False + 0 Default + Don't set + Set @@ -809,6 +826,7 @@ True + False True @@ -820,6 +838,7 @@ True + False True True image2 @@ -1094,4 +1113,18 @@ + + False + userPasswordExpirationButton + none + + + True + True + 2023 + 11 + 14 + + + diff --git a/ubl-settings-usergroups.css b/ubl-settings-usergroups.css index 8687d4a..6be07f0 100644 --- a/ubl-settings-usergroups.css +++ b/ubl-settings-usergroups.css @@ -105,4 +105,10 @@ background:transparent; .boxInfoMessOK{ background-color: #f3f0ac; +} + +.errorBox { + border-width: 2px; + border-color: #ea9999; + border-style:solid; } \ No newline at end of file