diff --git a/gresource.xml b/gresource.xml
index c29a06f..4a731e5 100644
--- a/gresource.xml
+++ b/gresource.xml
@@ -10,6 +10,7 @@
ubl-settings-usergroups-system.glade
ubl-settings-usergroups-savesettings.glade
ubl-settings-usergroups-confirmation.glade
+ ubl-settings-usergroups-system-deletion-confirmation.glade
ubl-settings-usergroups.css
diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt
index b33f93b..94c2d57 100644
--- a/source/CMakeLists.txt
+++ b/source/CMakeLists.txt
@@ -38,6 +38,7 @@ set(DEPENDFILES
../ubl-settings-usergroups-group.glade
../ubl-settings-usergroups-savesettings.glade
../ubl-settings-usergroups-confirmation.glade
+ ../ubl-settings-usergroups-system-deletion-confirmation.glade
../gresource.xml
../ubl-settings-usergroups-banner.png
../ubl-settings-usergroups.css
@@ -79,6 +80,8 @@ endif()
set(SOURCE_FILES
ubl-settings-usergroups.c
+ ubl-settings-usergroups-user.c
+ ubl-settings-usergroups-system.c
ubl-settings-usergroups.h
ubl-strings.h
)
diff --git a/source/ubl-settings-usergroups-system.c b/source/ubl-settings-usergroups-system.c
new file mode 100644
index 0000000..54471e0
--- /dev/null
+++ b/source/ubl-settings-usergroups-system.c
@@ -0,0 +1,132 @@
+#include "ubl-settings-usergroups.h"
+
+void on_delete_system_user(GtkWidget *, yon_confirmation_window *dialog){
+ GtkTreeModel *model = GTK_TREE_MODEL(dialog->list);
+ GtkTreeIter iter;
+ char *command=NULL;
+ for_iter(model,&iter){
+ int status,delete_home_status;
+ char *target;
+ gtk_tree_model_get(model,&iter,0,&status,1,&target,3,&delete_home_status,-1);
+ if (command) command=yon_char_unite(command,"; ",delete_home_status?remove_user_and_homedir_from_system_command(target):remove_user_from_system_command(target),NULL);
+ else command = delete_home_status?remove_user_and_homedir_from_system_command(target):remove_user_from_system_command(target);
+ }
+ if (!yon_char_is_empty(command)){
+ yon_launch(command);
+ }
+}
+
+void on_delete_system_group(GtkWidget *, yon_confirmation_window *dialog){
+ GtkTreeModel *model = GTK_TREE_MODEL(dialog->list);
+ GtkTreeIter iter;
+ char *command=NULL;
+ for_iter(model,&iter){
+ int status,delete_home_status;
+ char *target;
+ gtk_tree_model_get(model,&iter,0,&status,1,&target,3,&delete_home_status,-1);
+ if (command) command=yon_char_unite(command,"; ",remove_group_from_system_command(target),NULL);
+ else command = remove_group_from_system_command(target);
+ }
+ if (!yon_char_is_empty(command)){
+ yon_launch(command);
+ }
+}
+
+void yon_remove_confirmation_window_accept_clicked(GtkWidget *self,dictionary *dict){
+ main_window *widgets = yon_dictionary_get_data(dict->first,main_window *);
+ system_remove_confirmation_window *window = yon_dictionary_get_data(dict->first->next,system_remove_confirmation_window *);
+ if (self == window->ConfigAcceptButton){
+ if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==2){
+ GtkTreeIter iter, itar;
+ GtkTreeModel *model;
+ char *target;
+ if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemTree)),&model,&iter)){
+ gtk_tree_model_get(model,&iter,2,&target,-1);
+ }
+ for_iter(GTK_TREE_MODEL(widgets->UsersList),&itar){
+ char *cur;
+ gtk_tree_model_get(GTK_TREE_MODEL(widgets->UsersList),&itar,2,&cur,-1);
+ if (!strcmp(target,cur)){
+ gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->UsersTree)),&itar);
+ break;
+ }
+ }
+ gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->MainNotebook),0);
+ yon_delete_confirmation_open(widgets);
+ } else {
+ GtkTreeIter iter, itar;
+ GtkTreeModel *model;
+ char *target;
+ if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemGroupsTree)),&model,&iter)){
+ gtk_tree_model_get(model,&iter,1,&target,-1);
+ }
+ for_iter(GTK_TREE_MODEL(widgets->GroupsList),&itar){
+ char *cur;
+ gtk_tree_model_get(GTK_TREE_MODEL(widgets->GroupsList),&itar,1,&cur,-1);
+ if (!strcmp(target,cur)){
+ gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->GroupsTree)),&itar);
+ break;
+ }
+ }
+ gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->MainNotebook),1);
+ yon_group_delete_confirmation_open(widgets);
+ }
+ } else {
+ yon_confirmation_window *dialog = yon_delete_confirmation_new();
+ g_signal_connect(G_OBJECT(dialog->AcceptButton),"clicked",G_CALLBACK(on_delete_system_user),dialog);
+ gtk_window_set_transient_for(GTK_WINDOW(dialog->Window),GTK_WINDOW(widgets->Window));
+ if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==2){
+ GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->SystemTree));
+ GtkTreeIter iter;
+ if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemTree)),&model,&iter)){
+ char *name,*username,*homedir=NULL;
+ gtk_tree_model_get(model,&iter,2,&name,3,&username,6,&homedir,-1);
+ gtk_list_store_append(dialog->list,&iter);
+ gtk_list_store_set(dialog->list,&iter,0,1,1,name,2,homedir,4,!yon_char_is_empty(homedir),5,username,-1);
+ gtk_widget_show(dialog->Window);
+ }
+
+ } else {
+ GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->SystemGroupsTree));
+ GtkTreeIter iter;
+ if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemGroupsTree)),&model,&iter)){
+ yon_confirmation_window *dialog = yon_delete_confirmation_new();
+ gtk_window_set_transient_for(GTK_WINDOW(dialog->Window),GTK_WINDOW(widgets->Window));
+ gtk_widget_show(window->AcceptButton);
+ gtk_widget_hide(window->ConfigAcceptButton);
+ gtk_widget_hide(window->SystemAcceptButton);
+ char *name;
+ gtk_label_set_text(GTK_LABEL(window->TitleLabel),DELETE_GROUP_CONFIRMATION_CONFIRM_LABEL);
+ gtk_tree_view_column_set_title(dialog->UserCell,GROUP_LABEL);
+ gtk_label_set_text(GTK_LABEL(dialog->HatLabel),DELETE_GROUP_CONFIRMATION_TITLE_LABEL);
+ gtk_tree_view_column_set_visible(gtk_tree_view_get_column(GTK_TREE_VIEW(dialog->DeletionTree),2),0);
+ gtk_tree_view_column_set_visible(gtk_tree_view_get_column(GTK_TREE_VIEW(dialog->DeletionTree),3),0);
+ gtk_tree_view_column_set_visible(gtk_tree_view_get_column(GTK_TREE_VIEW(dialog->DeletionTree),4),0);
+
+ gtk_tree_model_get(model,&iter,1,&name,-1);
+ gtk_list_store_append(dialog->list,&iter);
+ gtk_list_store_set(dialog->list,&iter,0,1,1,name,-1);
+ gtk_widget_show(dialog->Window);
+ }
+ }
+ }
+ on_subwindow_close(self);
+}
+
+system_remove_confirmation_window *yon_system_remove_confirmation_window_new(){
+ system_remove_confirmation_window *window = malloc(sizeof(system_remove_confirmation_window));
+ GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_ubl_settings_usergroups_system_deletion_confirmation);
+
+ window->Window = yon_gtk_builder_get_widget(builder,"Window");
+ window->HeaderLabel = yon_gtk_builder_get_widget(builder,"HeaderLabel");
+ window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton");
+ window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox");
+ window->TitleLabel = yon_gtk_builder_get_widget(builder,"TitleLabel");
+ window->AcceptButton = yon_gtk_builder_get_widget(builder,"AcceptButton");
+ window->ConfigAcceptButton = yon_gtk_builder_get_widget(builder,"ConfigAcceptButton");
+ window->SystemAcceptButton = yon_gtk_builder_get_widget(builder,"SystemAcceptButton");
+
+ g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
+
+ return window;
+}
\ No newline at end of file
diff --git a/source/ubl-settings-usergroups-user.c b/source/ubl-settings-usergroups-user.c
new file mode 100644
index 0000000..43e77aa
--- /dev/null
+++ b/source/ubl-settings-usergroups-user.c
@@ -0,0 +1,595 @@
+#include "ubl-settings-usergroups.h"
+
+
+ubl_settings_usergroups_user_window *yon_ubl_settings_usergroups_user_new(){
+ ubl_settings_usergroups_user_window *window = malloc(sizeof(ubl_settings_usergroups_user_window));
+ GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_ubl_settings_usergroups_user);
+ window->CreateUserWindow=yon_gtk_builder_get_widget(builder,"CreateUserWindow");
+ window->StatusBox=yon_gtk_builder_get_widget(builder,"StatusBox");
+ window->userUIDAutoCheck=yon_gtk_builder_get_widget(builder,"userUIDAutoCheck");
+ window->userUIDEntry=yon_gtk_builder_get_widget(builder,"userUIDEntry");
+ window->userLoginEntry=yon_gtk_builder_get_widget(builder,"userLoginEntry");
+ window->userPasswordCombo=yon_gtk_builder_get_widget(builder,"userPasswordCombo");
+ window->userPasswordEntry=yon_gtk_builder_get_widget(builder,"userPasswordEntry");
+ window->userPasswordButton=yon_gtk_builder_get_widget(builder,"userPasswordButton");
+ window->userUserNameEntry=yon_gtk_builder_get_widget(builder,"userUserNameEntry");
+ window->userGroupsCheck=yon_gtk_builder_get_widget(builder,"userGroupsCheck");
+ window->userGroupsEntry=yon_gtk_builder_get_widget(builder,"userGroupsEntry");
+ window->UserGroupsButton=yon_gtk_builder_get_widget(builder,"UserGroupsButton");
+ window->userAdditionalGroupsEntry=yon_gtk_builder_get_widget(builder,"userAdditionalGroupsEntry");
+ window->userAdditionalGroupsButton=yon_gtk_builder_get_widget(builder,"userAdditionalGroupsButton");
+ window->userPasswordChangedEntry=yon_gtk_builder_get_widget(builder,"userPasswordChangedEntry");
+ window->userPasswordExpirationEntry=yon_gtk_builder_get_widget(builder,"userPasswordExpirationEntry");
+ window->userPasswordExpirationButton=yon_gtk_builder_get_widget(builder,"userPasswordExpirationButton");
+ window->userPasswordChangeDelayMinimumSpin=yon_gtk_builder_get_widget(builder,"userPasswordChangeDelayMinimumSpin");
+ window->userPasswordChangeDelayMaximumSpin=yon_gtk_builder_get_widget(builder,"userPasswordChangeDelayMaximumSpin");
+ window->userWarningSpin=yon_gtk_builder_get_widget(builder,"userWarningSpin");
+ window->userActivitySpin=yon_gtk_builder_get_widget(builder,"userActivitySpin");
+ window->userForceChangeCheck=yon_gtk_builder_get_widget(builder,"userForceChangeCheck");
+ window->userShellCombo=yon_gtk_builder_get_widget(builder,"userShellCombo");
+ window->userShellEntry=yon_gtk_builder_get_widget(builder,"userShellEntry");
+ window->userHomeCombo=yon_gtk_builder_get_widget(builder,"userHomeCombo");
+ window->userHomeEntry=yon_gtk_builder_get_widget(builder,"userHomeEntry");
+ window->userHomeButton=yon_gtk_builder_get_widget(builder,"userHomeButton");
+ window->userCreateSystemCheck=yon_gtk_builder_get_widget(builder,"userCreateSystemCheck");
+ window->userCreateUnuniqueCheck=yon_gtk_builder_get_widget(builder,"userCreateUnuniqueCheck");
+ window->userDontCheckCheck=yon_gtk_builder_get_widget(builder,"userDontCheckCheck");
+ window->userSyncSAMBACheck=yon_gtk_builder_get_widget(builder,"userSyncSAMBACheck");
+ window->userSyncSAMBAPasswordCheck=yon_gtk_builder_get_widget(builder,"userSyncSAMBAPasswordCheck");
+ window->userDeactivatedCheck=yon_gtk_builder_get_widget(builder,"userDeactivatedCheck");
+ window->userExtraOptionsEntry=yon_gtk_builder_get_widget(builder,"userExtraOptionsEntry");
+ window->UserCancelButton=yon_gtk_builder_get_widget(builder,"UserCancelButton");
+ window->UserOkButton=yon_gtk_builder_get_widget(builder,"UserOkButton");
+ window->CalendarPopup=yon_gtk_builder_get_widget(builder,"CalendarPopover");
+ window->UseraddBootCheck=yon_gtk_builder_get_widget(builder,"UseraddBootCheck");
+ window->ExpirationCalendar=yon_gtk_builder_get_widget(builder,"ExpirationCalendar");
+ window->UseraddShutdownCheck=yon_gtk_builder_get_widget(builder,"UseraddShutdownCheck");
+ window->UsershadowBootCheck=yon_gtk_builder_get_widget(builder,"UsershadowBootCheck");
+ window->UsershadowShutdownCheck=yon_gtk_builder_get_widget(builder,"UsershadowShutdownCheck");
+ window->userTitleNameLabel=yon_gtk_builder_get_widget(builder,"userTitleNameLabel");
+ window->expiration_unix=NULL;
+ window->last_uid=NULL;
+
+ time_t t = time(NULL);
+ struct tm tm = *localtime(&t);
+ gtk_calendar_select_day(GTK_CALENDAR(window->ExpirationCalendar),tm.tm_mday);
+ gtk_calendar_select_month(GTK_CALENDAR(window->ExpirationCalendar),tm.tm_mon,1900+tm.tm_year);
+
+ on_UID_update(NULL,window);
+ int shell_size=0;
+ config_str shells = yon_file_open(shell_list_path,&shell_size);
+ for (int i=1;iuserShellCombo),parsed[0],parsed[0]);
+ yon_char_parsed_free(parsed,parsed_size);
+ }
+ }
+ gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->userShellCombo),"Set",SET_LABEL);
+ yon_char_parsed_free(shells,shell_size);
+ gtk_combo_box_set_active(GTK_COMBO_BOX(window->userShellCombo),0);
+ window->old_password=NULL;
+ window->old_username=NULL;
+ dictionary *entry_dict = NULL;
+ yon_window_config_custom_window_setup(GTK_WINDOW(window->CreateUserWindow),"UserWindow");
+ yon_dictionary_add_or_create_if_exists_with_data(entry_dict,"combo",window->userPasswordCombo);
+ yon_dictionary_add_or_create_if_exists_with_data(entry_dict,"entry",window->userPasswordEntry);
+ // char *password = yon_config_get_by_key(USERADD((char*)gtk_entry_get_text(GTK_ENTRY(window->userLoginEntry))));
+ g_signal_connect(G_OBJECT(window->UserCancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
+ 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->userHomeButton),"clicked",G_CALLBACK(on_filechooser_open),window->userHomeEntry);
+ g_signal_connect(G_OBJECT(window->UserGroupsButton),"clicked",G_CALLBACK(on_groups_clicked),window->userGroupsEntry);
+ g_signal_connect(G_OBJECT(window->userPasswordButton),"clicked",G_CALLBACK(on_password_change),entry_dict);
+ 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);
+ 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);
+ g_signal_connect(G_OBJECT(window->userGroupsCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->userGroupsEntry);
+ g_signal_connect(G_OBJECT(window->userGroupsCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->UserGroupsButton);
+ g_signal_connect(G_OBJECT(window->userShellCombo),"changed",G_CALLBACK(on_user_shell_changed),window);
+ g_signal_connect(G_OBJECT(window->ExpirationCalendar),"day-selected",G_CALLBACK(on_date_selected),window);
+ g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(on_UID_update),window);
+ g_signal_connect(G_OBJECT(window->userCreateSystemCheck),"toggled",G_CALLBACK(on_UID_update),window);
+ g_signal_connect(G_OBJECT(window->userGroupsCheck),"toggled",G_CALLBACK(on_user_login_update),window);
+ g_signal_connect(G_OBJECT(window->userLoginEntry),"changed",G_CALLBACK(on_user_login_update),window);
+ g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->userCreateSystemCheck);
+ g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(yon_gtk_toggle_button_set_inactive_from_toggle_button),window->userCreateSystemCheck);
+ g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->userCreateUnuniqueCheck);
+ g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(yon_gtk_toggle_button_set_inactive_from_toggle_button_inversed),window->userCreateUnuniqueCheck);
+ g_signal_connect(G_OBJECT(window->userSyncSAMBACheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->userSyncSAMBAPasswordCheck);
+ g_signal_connect(G_OBJECT(window->userSyncSAMBAPasswordCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->userSyncSAMBACheck);
+ g_signal_connect(G_OBJECT(window->userSyncSAMBACheck),"toggled",G_CALLBACK(on_toggle_button_set_active_from_toggle_button_inversed),window);
+ g_signal_connect(G_OBJECT(window->userSyncSAMBAPasswordCheck),"toggled",G_CALLBACK(on_toggle_button_set_active_from_toggle_button_inversed),window);
+ g_signal_connect(G_OBJECT(window->userPasswordCombo),"changed",G_CALLBACK(on_toggle_button_set_active_from_combo_box),window);
+ g_signal_connect(G_OBJECT(window->userPasswordCombo),"changed",G_CALLBACK(on_toggle_button_set_active_from_combo_box),window);
+ g_signal_connect(G_OBJECT(window->userPasswordEntry),"changed",G_CALLBACK(on_password_user_changed),window);
+ g_signal_connect(G_OBJECT(window->userHomeEntry),"changed",G_CALLBACK(on_parameter_changed),window);
+ g_signal_connect(G_OBJECT(window->userHomeCombo),"changed",G_CALLBACK(on_parameter_changed),window);
+ g_signal_connect(G_OBJECT(window->userShellCombo),"changed",G_CALLBACK(on_parameter_changed),window);
+ g_signal_connect(G_OBJECT(window->userShellEntry),"changed",G_CALLBACK(on_parameter_changed),window);
+ g_signal_connect(G_OBJECT(window->userCreateSystemCheck),"toggled",G_CALLBACK(on_parameter_changed),window);
+ g_signal_connect(G_OBJECT(window->userCreateUnuniqueCheck),"toggled",G_CALLBACK(on_parameter_changed),window);
+ g_signal_connect(G_OBJECT(window->userDontCheckCheck),"toggled",G_CALLBACK(on_parameter_changed),window);
+ g_signal_connect(G_OBJECT(window->userGroupsCheck),"toggled",G_CALLBACK(on_parameter_changed),window);
+ g_signal_connect(G_OBJECT(window->userGroupsEntry),"changed",G_CALLBACK(on_parameter_changed),window);
+ g_signal_connect(G_OBJECT(window->userPasswordExpirationEntry),"icon-press",G_CALLBACK(on_remove_expired),window->userPasswordExpirationEntry);
+ g_signal_connect(G_OBJECT(window->userUIDEntry),"insert-text",G_CALLBACK(yon_on_text_insert_only_digits),NULL);
+return window;
+}
+
+void on_UID_update(GtkWidget *, ubl_settings_usergroups_user_window *window){
+ if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userUIDAutoCheck))){
+ if (window->last_uid){
+ gtk_entry_set_text(GTK_ENTRY(window->userUIDEntry),window->last_uid);
+ } else {
+ int config_size=0;
+ int final_size=0;
+ config_str config_users = yon_config_get_all_by_key(USERADD_SEARCH_macro,&config_size);
+ yon_char_parsed_prepend_strings(config_users,config_size,":");
+ config_str final = yon_char_parsed_merge(main_config.users,main_config.users_size,config_users,config_size,&final_size);
+ long prev_busy=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userCreateSystemCheck))?0:main_config.MINGID;
+ for (int i=0;iuserCreateUnuniqueCheck))?0:main_config.MINGID;
+ int maximum = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userCreateUnuniqueCheck))?68000:main_config.MAXGID;
+ for (int i=0;iprev_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_user_shell_changed(GtkWidget *, ubl_settings_usergroups_user_window *window){
+ const char *current = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->userShellCombo));
+ if (!yon_char_is_empty(current)&&!strcmp(current,SET_LABEL)){
+ if(gtk_combo_box_get_active(GTK_COMBO_BOX(window->userShellCombo))>1){
+ gtk_widget_set_sensitive(window->userShellEntry,1);
+ } else {
+ gtk_widget_set_sensitive(window->userShellEntry,0);
+ }
+ } else {
+ gtk_widget_set_sensitive(window->userShellEntry,0);
+ }
+}
+
+void on_user_login_update(GtkWidget *, ubl_settings_usergroups_user_window *window){
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userGroupsCheck))){
+ gtk_entry_set_text(GTK_ENTRY(window->userGroupsEntry),gtk_entry_get_text(GTK_ENTRY(window->userLoginEntry)));
+ } else {
+ gtk_entry_set_text(GTK_ENTRY(window->userGroupsEntry),"");
+ }
+}
+
+void on_user_save(GtkWidget *self, dictionary *dict){
+ main_window *widgets = yon_dictionary_get_data(dict->first,main_window*);
+ ubl_settings_usergroups_user_window *window = yon_dictionary_get_data(dict->first->next,ubl_settings_usergroups_user_window*);
+ char *final_user="";
+ char *uid_string = NULL;
+ char *password = NULL;
+ char *login = NULL;
+ char *username = NULL;
+ char *main_group = NULL;
+ char *additional_groups = NULL;
+ char *password_changed_date = NULL;
+ char *password_expiration_date = NULL;
+ char *password_change_interval_minimum = NULL;
+ 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;
+ char *extra_options = NULL;
+ char *useradd_boot = "";
+ char *useradd_shutdown = "";
+ char *usershadow_boot = "";
+ char *usershadow_shutdown = "";
+
+
+ int uid_auto_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userUIDAutoCheck));
+ if (uid_auto_active){
+ uid_string="";
+ } else {
+ int config_size=0;
+ int final_size=0;
+ config_str config_users = yon_config_get_all_by_key(USERADD_SEARCH_macro,&config_size);
+ yon_char_parsed_prepend_strings(config_users,config_size,":");
+ config_str final = yon_char_parsed_merge(main_config.users,main_config.users_size,config_users,config_size,&final_size);
+
+ uid_string = (char*)gtk_entry_get_text(GTK_ENTRY(window->userUIDEntry));
+ if (strcmp(uid_string,window->last_uid)){
+ if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userCreateUnuniqueCheck))){
+ int found=0;
+ for (int i=0;i2&&!strcmp(parsed[2],uid_string)){
+ if (yon_char_is_empty(window->last_uid)||(!yon_char_is_empty(window->last_uid)&&strcmp(parsed[2],window->last_uid))){
+ 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?UID_ALREADY_EXIST_CONFIG_LABEL:UID_ALREADY_EXIST_SYSTEM_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE);
+ yon_ubl_status_highlight_incorrect(window->userUIDEntry);
+ return;
+ }
+ }
+ }
+
+ if (yon_char_is_empty(uid_string)){
+ yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE);
+ yon_ubl_status_highlight_incorrect(window->userUIDEntry);
+ return;
+ }
+ }
+
+ 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);
+ 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);
+ yon_ubl_status_highlight_incorrect(window->userLoginEntry);
+ return;
+ }
+
+ int password_active = gtk_combo_box_get_active(GTK_COMBO_BOX(window->userPasswordCombo));
+ if (password_active > 1){
+ password = (char*)gtk_entry_get_text(GTK_ENTRY(window->userPasswordEntry));
+ if (yon_char_is_empty(password)){
+ yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE);
+ yon_ubl_status_highlight_incorrect(window->userPasswordEntry);
+ return;
+ }
+ } else if (password_active==1){
+ password = "!*";
+ } else {
+ password="";
+ }
+
+ char *old_password = NULL;
+ if (window->old_password){
+ old_password = window->old_password;
+ yon_check_password_blocked(old_password);
+ }
+ if (!old_password||(old_password&&strcmp(old_password,password))){
+ time_t t = time(NULL);
+ struct tm tm = *localtime(&t);
+ char *month = yon_char_from_int(tm.tm_mon+1);
+ if (strlen(month)==1){
+ month=yon_char_append("0",month);
+ }
+ char *day = yon_char_from_int(tm.tm_mday);
+ if (strlen(day)<2){
+ day=yon_char_append("0",day);
+ }
+ password_changed_date = yon_char_unite(yon_char_from_int(1900+tm.tm_year),"-",month,"-",day,NULL);
+ } else {
+ password_changed_date = (char*)gtk_entry_get_text(GTK_ENTRY(window->userPasswordChangedEntry));
+ }
+
+ deactivate = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userDeactivatedCheck));
+ if (deactivate){
+ if (strlen(password)>1&&password[0]=='%'&&password[1]=='%'){
+ char *temp = yon_char_replace(password,"%%","!!");
+ password = yon_char_replace(temp,"!!","%%!");
+ } else {
+ password = yon_char_append("!",password);
+ }
+ }
+
+ username = (char*)gtk_entry_get_text(GTK_ENTRY(window->userUserNameEntry));
+ if (yon_char_is_empty(username)){
+ username="";
+ }
+
+ 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));
+ } else {
+ main_group = "";
+ }
+
+ additional_groups = (char*)gtk_entry_get_text(GTK_ENTRY(window->userAdditionalGroupsEntry));
+ char *default_groups = yon_config_get_by_key(USERGROUPS_parameter);
+ if (!yon_char_is_empty(default_groups)&&!strcmp(default_groups,additional_groups)){
+ additional_groups="";
+ }
+ long password_change_interval_minimum_active = gtk_spin_button_get_value(GTK_SPIN_BUTTON(window->userPasswordChangeDelayMinimumSpin));
+ if (password_change_interval_minimum_active>0){
+ password_change_interval_minimum = yon_char_from_long(password_change_interval_minimum_active);
+ } else password_change_interval_minimum = 0;
+
+ long password_change_interval_maximum_active = gtk_spin_button_get_value(GTK_SPIN_BUTTON(window->userPasswordChangeDelayMaximumSpin));
+ if (password_change_interval_minimum_active>0){
+ password_change_interval_maximum = yon_char_from_long(password_change_interval_maximum_active);
+ } else password_change_interval_maximum = 0;
+
+ password_expiration_date = (char*)gtk_entry_get_text(GTK_ENTRY(window->userPasswordExpirationEntry));
+ if (yon_char_is_empty(password_expiration_date)){
+ password_expiration_date="-1";
+ }
+
+ long warning_days_active = gtk_spin_button_get_value(GTK_SPIN_BUTTON(window->userWarningSpin));
+ if (warning_days_active>0)
+ warning_days = yon_char_from_long(warning_days_active);
+
+ int no_activity_days_active = gtk_spin_button_get_value(GTK_SPIN_BUTTON(window->userActivitySpin));
+ if (no_activity_days_active>0){
+ 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){
+ if (yon_samba_sync_get(login)==2)
+ yon_samba_sync_remove(login);
+ yon_samba_sync_add(login,NULL);
+ } else if (samba_password_sync){
+ if (yon_samba_sync_get(login)==1)
+ yon_samba_sync_remove(login);
+ yon_samba_sync_add(login,password);
+ } else {
+ yon_samba_sync_remove(login);
+ }
+
+ extra_options=(char*)gtk_entry_get_text(GTK_ENTRY(window->userExtraOptionsEntry));
+
+ int force_at_next_login_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userForceChangeCheck));
+ if (force_at_next_login_active){
+ password_changed_date = "0";
+ }
+
+ int useradd_boot_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->UseraddBootCheck));
+ if (useradd_boot_active){
+ useradd_boot = "boot";
+ }
+
+ int useradd_shutdown_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->UseraddShutdownCheck));
+ if (useradd_shutdown_active){
+ useradd_shutdown = "shutdown";
+ }
+
+ int usershadow_boot_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->UsershadowBootCheck));
+ if (usershadow_boot_active){
+ usershadow_boot = "boot";
+ }
+
+ int usershadow_shutdown_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->UsershadowShutdownCheck));
+ if (usershadow_shutdown_active){
+ usershadow_shutdown = "shutdown";
+ }
+
+
+ char *useradd_sync_string = NULL;
+ useradd_sync_string = yon_char_unite(useradd_boot,!yon_char_is_empty(useradd_boot)?",":"",useradd_shutdown,NULL);
+ char *usershadow_sync_string = NULL;
+ usershadow_sync_string = yon_char_unite(usershadow_boot,!yon_char_is_empty(usershadow_boot)?",":"",usershadow_shutdown,NULL);
+ char *shadow_string = NULL;
+ shadow_string = yon_char_unite(yon_char_return_if_exist(password_changed_date,""),
+ ":",yon_char_return_if_exist(password_change_interval_minimum,""),
+ ":",yon_char_return_if_exist(password_change_interval_maximum,""),
+ ":",yon_char_return_if_exist(warning_days,""),
+ ":",yon_char_return_if_exist(no_activity_days,""),
+ ":",yon_char_return_if_exist(password_expiration_date,""),
+ NULL);
+
+ final_user = yon_char_unite(yon_char_return_if_exist(username,"x"),
+ ":",yon_char_return_if_exist(uid_string,"x"),
+ ":",yon_char_return_if_exist(main_group,"x"),
+ ":",yon_char_return_if_exist(additional_groups,"x"),
+ ":",yon_char_return_if_exist(extra_options,""),
+ ":",yon_char_return_if_exist(password,""),
+ NULL);
+
+ char *final_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",USERADD(login));
+ yon_config_register(USERADD(login),final_command,final_user);
+ if (!yon_char_is_empty(window->old_username)&&strcmp(window->old_username,login)){
+ yon_config_remove_by_key(USERADD(window->old_username));
+ }
+ final_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",USERSHADOW(login));
+ yon_config_register(USERSHADOW(login),final_command,shadow_string);
+ if (!yon_char_is_empty(window->old_username)&&strcmp(window->old_username,login)){
+ yon_config_remove_by_key(USERSHADOW(window->old_username));
+ }
+ int home_delete = yon_char_parsed_check_exist(main_config.remove_homes,main_config.homes_size,login);
+ if (home_delete>-1){
+ yon_char_parsed_rip(main_config.remove_homes,&main_config.homes_size,home_delete);
+ }
+
+ if (!yon_char_is_empty(useradd_sync_string)){
+ final_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",USERADD_SYNC(login));
+ yon_config_register(USERADD_SYNC(login),final_command,useradd_sync_string);
+ if (!yon_char_is_empty(window->old_username)&&strcmp(window->old_username,login)){
+ yon_config_remove_by_key(USERADD_SYNC(window->old_username));
+ }
+ } else {
+ yon_config_remove_by_key(USERADD_SYNC(window->old_username));
+ }
+
+ if (!yon_char_is_empty(usershadow_sync_string)){
+ final_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",USERSHADOW_SYNC(login));
+ yon_config_register(USERSHADOW_SYNC(login),final_command,usershadow_sync_string);
+ if (!yon_char_is_empty(window->old_username)&&strcmp(window->old_username,login)){
+ yon_config_remove_by_key(USERSHADOW_SYNC(window->old_username));
+ }
+ } 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);
+ on_subwindow_close(self);
+}
+
+void on_user_sync_with_config(GtkWidget *,main_window *widgets){
+ int active = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook));
+ switch (active){
+ case 2:{
+ GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore1);
+ GtkTreeIter iter;
+ if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemTree)),&model,&iter)){
+ char *target;
+ gtk_tree_model_get(model,&iter,2,&target,-1);
+ dialog_confirmation_data data;
+ if (config(USERADD(target))){
+ data.action_text = SYSTEM_USER_SYNC_CONFIRMATION_LABEL(target);
+ data.data=NULL;
+ data.function=NULL;
+ } else {
+ data.action_text = SYSTEM_USER_ADD_CONFIRMATION_LABEL(target);
+ data.data=NULL;
+ data.function=NULL;
+ }
+ if (yon_confirmation_dialog_call(widgets->Window,&data)!=GTK_RESPONSE_ACCEPT){
+ return;
+ }
+
+ char *user = yon_char_parsed_check_exist_begins_with(main_config.groups,main_config.groups_size,target);
+ char *shadow = yon_char_parsed_check_exist_begins_with(main_config.group_shadow,main_config.group_shadow_size,target);
+ yon_char_remove_last_symbol(user,'\n');
+ yon_char_remove_last_symbol(shadow,'\n');
+ int user_size=0;
+ int shadow_size=0;
+ config_str parsed = yon_char_parse(user,&user_size,":");
+ config_str parsed_shadow = yon_char_parse(shadow,&shadow_size,":");
+
+ char *optionals = yon_char_unite(user_size>5? parsed[5]:"",user_size>5?" ":"",user_size>6?parsed[6]:"",NULL);
+ char *config_user = yon_char_unite(parsed[0],":",
+ user_size>4?parsed[4]:"",":",
+ user_size>2?parsed[2]:"",":",
+ user_size>3?parsed[3]:"",":",
+ !yon_char_is_empty(optionals)?optionals:"",":",
+ user_size>1&&strcmp(parsed[1],"x")?yon_char_return_if_exist(parsed[1],""):yon_char_return_if_exist(parsed_shadow[1],""),NULL);
+ char *config_shadow = yon_char_unite(yon_char_return_if_exist(parsed[2],""),":",
+ user_size>3?parsed[3]:"",":",
+ user_size>4?parsed[4]:"",":",
+ user_size>5?parsed[5]:"",":",
+ user_size>6?parsed[6]:"",":",
+ user_size>7?parsed[7]:"",":",NULL);
+
+ if (!yon_char_is_empty(config_user)){
+ char *user_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",USERADD(target));
+ yon_config_register(USERADD(target),user_command,config_user);
+ }
+ if (!yon_char_is_empty(config_shadow)){
+ char *shadow_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",USERSHADOW(target));
+ yon_config_register(USERSHADOW(target),shadow_command,config_shadow);
+ }
+ yon_interface_update(widgets);
+ }
+ yon_interface_update((main_window*)widgets);
+ }break;
+ case 3:{
+ GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore1);
+ GtkTreeIter iter;
+ if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemGroupsTree)),&model,&iter)){
+
+ char *target;
+ gtk_tree_model_get(model,&iter,1,&target,-1);
+ dialog_confirmation_data data;
+ if (config(GROUPADD(target))){
+ data.action_text = SYSTEM_GROUP_ADD_CONFIRMATION_LABEL(target);
+ data.data=NULL;
+ data.function=NULL;
+ } else {
+ data.action_text = SYSTEM_GROUP_SYNC_CONFIRMATION_LABEL(target);
+ data.data=NULL;
+ data.function=NULL;
+ }
+ if (yon_confirmation_dialog_call(widgets->Window,&data)!=GTK_RESPONSE_ACCEPT){
+ return;
+ }
+ char *group = yon_char_parsed_check_exist_begins_with(main_config.groups,main_config.groups_size,target);
+ char *group_shadow = yon_char_parsed_check_exist_begins_with(main_config.group_shadow,main_config.group_shadow_size,target);
+ yon_char_remove_last_symbol(group,'\n');
+ yon_char_remove_last_symbol(group_shadow,'\n');
+ int group_size=0;
+ int group_shadow_size=0;
+ config_str parsed = yon_char_parse(group,&group_size,":");
+ config_str parsed_shadow = yon_char_parse(group_shadow,&group_shadow_size,":");
+ char *config_group = yon_char_unite(parsed[0],":",parsed[3],":",parsed[2],"::",parsed_shadow[2],":",strcmp(parsed[1],"x")?parsed[1]:parsed_shadow[1],NULL);
+
+ if (!yon_char_is_empty(config_group)){
+ char *group_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",GROUPADD(target));
+ yon_config_register(GROUPADD(target),group_command,config_group);
+ yon_interface_update(widgets);
+ }
+ }
+ }break;
+ }
+}
\ No newline at end of file
diff --git a/source/ubl-settings-usergroups.c b/source/ubl-settings-usergroups.c
index 6e8c3ef..09b175e 100644
--- a/source/ubl-settings-usergroups.c
+++ b/source/ubl-settings-usergroups.c
@@ -1880,415 +1880,12 @@ void on_system_update(GtkWidget *, main_window *window){
yon_system_load(window);
}
-ubl_settings_usergroups_system_window *yon_ubl_settings_usergroups_system_new(){
- ubl_settings_usergroups_system_window *window = malloc(sizeof(ubl_settings_usergroups_system_window));
- GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_ubl_settings_usergroups_system);
- window->liststore1=GTK_LIST_STORE(gtk_builder_get_object(builder,"liststore1"));
- window->liststore2=GTK_LIST_STORE(gtk_builder_get_object(builder,"liststore2"));
- window->MonitorWindow=yon_gtk_builder_get_widget(builder,"MonitorWindow");
- window->ToggleAllButton=yon_gtk_builder_get_widget(builder,"ToggleAllButton");
- window->UpdateButton=yon_gtk_builder_get_widget(builder,"UpdateButton");
- window->SystemTree = yon_gtk_builder_get_widget(builder,"SystemTree");
- window->show_all=0;
- yon_window_config_custom_window_setup(GTK_WINDOW(window->MonitorWindow),"InspectorWindow");
- yon_gtk_tree_view_minimal_fixed_size_set_full(GTK_TREE_VIEW(window->SystemTree));
- GList *list = gtk_tree_view_get_columns(GTK_TREE_VIEW(window->SystemTree));
- for (guint i=0;iMonitorWindow),INSPECTOR_TITLE_LABEL);
-
- // g_signal_connect(G_OBJECT(window->ToggleAllButton),"clicked",G_CALLBACK(on_mode_changed),window);
- g_signal_connect(G_OBJECT(window->UpdateButton),"clicked",G_CALLBACK(on_system_update),window);
-return window;
-}
-
-void on_settings_usergroups_system_open(GtkWidget *, main_window *){
- ubl_settings_usergroups_system_window *window = yon_ubl_settings_usergroups_system_new();
- gtk_widget_show(window->MonitorWindow);
-}
-
-
-
-void on_user_shell_changed(GtkWidget *, ubl_settings_usergroups_user_window *window){
- const char *current = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->userShellCombo));
- if (!yon_char_is_empty(current)&&!strcmp(current,SET_LABEL)){
- if(gtk_combo_box_get_active(GTK_COMBO_BOX(window->userShellCombo))>1){
- gtk_widget_set_sensitive(window->userShellEntry,1);
- } else {
- gtk_widget_set_sensitive(window->userShellEntry,0);
- }
- } else {
- gtk_widget_set_sensitive(window->userShellEntry,0);
- }
-}
-
-void on_UID_update(GtkWidget *, ubl_settings_usergroups_user_window *window){
- if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userUIDAutoCheck))){
- if (window->last_uid){
- gtk_entry_set_text(GTK_ENTRY(window->userUIDEntry),window->last_uid);
- } else {
- int config_size=0;
- int final_size=0;
- config_str config_users = yon_config_get_all_by_key(USERADD_SEARCH_macro,&config_size);
- yon_char_parsed_prepend_strings(config_users,config_size,":");
- config_str final = yon_char_parsed_merge(main_config.users,main_config.users_size,config_users,config_size,&final_size);
- long prev_busy=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userCreateSystemCheck))?0:main_config.MINGID;
- for (int i=0;iuserCreateUnuniqueCheck))?0:main_config.MINGID;
- int maximum = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userCreateUnuniqueCheck))?68000:main_config.MAXGID;
- for (int i=0;iprev_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_user_login_update(GtkWidget *, ubl_settings_usergroups_user_window *window){
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userGroupsCheck))){
- gtk_entry_set_text(GTK_ENTRY(window->userGroupsEntry),gtk_entry_get_text(GTK_ENTRY(window->userLoginEntry)));
- } else {
- gtk_entry_set_text(GTK_ENTRY(window->userGroupsEntry),"");
- }
-}
-
-void on_user_save(GtkWidget *self, dictionary *dict){
- main_window *widgets = yon_dictionary_get_data(dict->first,main_window*);
- ubl_settings_usergroups_user_window *window = yon_dictionary_get_data(dict->first->next,ubl_settings_usergroups_user_window*);
- char *final_user="";
- char *uid_string = NULL;
- char *password = NULL;
- char *login = NULL;
- char *username = NULL;
- char *main_group = NULL;
- char *additional_groups = NULL;
- char *password_changed_date = NULL;
- char *password_expiration_date = NULL;
- char *password_change_interval_minimum = NULL;
- 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;
- char *extra_options = NULL;
- char *useradd_boot = "";
- char *useradd_shutdown = "";
- char *usershadow_boot = "";
- char *usershadow_shutdown = "";
-
- int uid_auto_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userUIDAutoCheck));
- if (uid_auto_active){
- uid_string="";
- } else {
- int config_size=0;
- int final_size=0;
- config_str config_users = yon_config_get_all_by_key(USERADD_SEARCH_macro,&config_size);
- yon_char_parsed_prepend_strings(config_users,config_size,":");
- config_str final = yon_char_parsed_merge(main_config.users,main_config.users_size,config_users,config_size,&final_size);
-
- uid_string = (char*)gtk_entry_get_text(GTK_ENTRY(window->userUIDEntry));
- if (strcmp(uid_string,window->last_uid)){
- if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userCreateUnuniqueCheck))){
- int found=0;
- for (int i=0;i2&&!strcmp(parsed[2],uid_string)){
- if (yon_char_is_empty(window->last_uid)||(!yon_char_is_empty(window->last_uid)&&strcmp(parsed[2],window->last_uid))){
- 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?UID_ALREADY_EXIST_CONFIG_LABEL:UID_ALREADY_EXIST_SYSTEM_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE);
- yon_ubl_status_highlight_incorrect(window->userUIDEntry);
- return;
- }
- }
- }
-
- if (yon_char_is_empty(uid_string)){
- yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE);
- yon_ubl_status_highlight_incorrect(window->userUIDEntry);
- return;
- }
- }
-
- 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);
- 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);
- yon_ubl_status_highlight_incorrect(window->userLoginEntry);
- return;
- }
-
- int password_active = gtk_combo_box_get_active(GTK_COMBO_BOX(window->userPasswordCombo));
- if (password_active > 1){
- password = (char*)gtk_entry_get_text(GTK_ENTRY(window->userPasswordEntry));
- if (yon_char_is_empty(password)){
- yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE);
- yon_ubl_status_highlight_incorrect(window->userPasswordEntry);
- return;
- }
- } else if (password_active==1){
- password = "!*";
- } else {
- password="";
- }
-
- char *old_password = NULL;
- if (window->old_password){
- old_password = window->old_password;
- yon_check_password_blocked(old_password);
- }
- if (!old_password||(old_password&&strcmp(old_password,password))){
- time_t t = time(NULL);
- struct tm tm = *localtime(&t);
- char *month = yon_char_from_int(tm.tm_mon+1);
- if (strlen(month)==1){
- month=yon_char_append("0",month);
- }
- char *day = yon_char_from_int(tm.tm_mday);
- if (strlen(day)<2){
- day=yon_char_append("0",day);
- }
- password_changed_date = yon_char_unite(yon_char_from_int(1900+tm.tm_year),"-",month,"-",day,NULL);
- } else {
- password_changed_date = (char*)gtk_entry_get_text(GTK_ENTRY(window->userPasswordChangedEntry));
- }
-
- deactivate = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userDeactivatedCheck));
- if (deactivate){
- if (strlen(password)>1&&password[0]=='%'&&password[1]=='%'){
- char *temp = yon_char_replace(password,"%%","!!");
- password = yon_char_replace(temp,"!!","%%!");
- } else {
- password = yon_char_append("!",password);
- }
- }
-
- username = (char*)gtk_entry_get_text(GTK_ENTRY(window->userUserNameEntry));
- if (yon_char_is_empty(username)){
- username="";
- }
-
- 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));
- } else {
- main_group = "";
- }
-
- additional_groups = (char*)gtk_entry_get_text(GTK_ENTRY(window->userAdditionalGroupsEntry));
- char *default_groups = yon_config_get_by_key(USERGROUPS_parameter);
- if (!yon_char_is_empty(default_groups)&&!strcmp(default_groups,additional_groups)){
- additional_groups="";
- }
- long password_change_interval_minimum_active = gtk_spin_button_get_value(GTK_SPIN_BUTTON(window->userPasswordChangeDelayMinimumSpin));
- if (password_change_interval_minimum_active>0){
- password_change_interval_minimum = yon_char_from_long(password_change_interval_minimum_active);
- } else password_change_interval_minimum = 0;
-
- long password_change_interval_maximum_active = gtk_spin_button_get_value(GTK_SPIN_BUTTON(window->userPasswordChangeDelayMaximumSpin));
- if (password_change_interval_minimum_active>0){
- password_change_interval_maximum = yon_char_from_long(password_change_interval_maximum_active);
- } else password_change_interval_maximum = 0;
-
- password_expiration_date = (char*)gtk_entry_get_text(GTK_ENTRY(window->userPasswordExpirationEntry));
- if (yon_char_is_empty(password_expiration_date)){
- password_expiration_date="-1";
- }
-
- long warning_days_active = gtk_spin_button_get_value(GTK_SPIN_BUTTON(window->userWarningSpin));
- if (warning_days_active>0)
- warning_days = yon_char_from_long(warning_days_active);
-
- int no_activity_days_active = gtk_spin_button_get_value(GTK_SPIN_BUTTON(window->userActivitySpin));
- if (no_activity_days_active>0){
- 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){
- if (yon_samba_sync_get(login)==2)
- yon_samba_sync_remove(login);
- yon_samba_sync_add(login,NULL);
- } else if (samba_password_sync){
- if (yon_samba_sync_get(login)==1)
- yon_samba_sync_remove(login);
- yon_samba_sync_add(login,password);
- } else {
- yon_samba_sync_remove(login);
- }
-
- extra_options=(char*)gtk_entry_get_text(GTK_ENTRY(window->userExtraOptionsEntry));
-
- int force_at_next_login_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userForceChangeCheck));
- if (force_at_next_login_active){
- password_changed_date = "0";
- }
-
- int useradd_boot_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->UseraddBootCheck));
- if (useradd_boot_active){
- useradd_boot = "boot";
- }
-
- int useradd_shutdown_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->UseraddShutdownCheck));
- if (useradd_shutdown_active){
- useradd_shutdown = "shutdown";
- }
-
- int usershadow_boot_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->UsershadowBootCheck));
- if (usershadow_boot_active){
- usershadow_boot = "boot";
- }
-
- int usershadow_shutdown_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->UsershadowShutdownCheck));
- if (usershadow_shutdown_active){
- usershadow_shutdown = "shutdown";
- }
-
-
- char *useradd_sync_string = NULL;
- useradd_sync_string = yon_char_unite(useradd_boot,!yon_char_is_empty(useradd_boot)?",":"",useradd_shutdown,NULL);
- char *usershadow_sync_string = NULL;
- usershadow_sync_string = yon_char_unite(usershadow_boot,!yon_char_is_empty(usershadow_boot)?",":"",usershadow_shutdown,NULL);
- char *shadow_string = NULL;
- shadow_string = yon_char_unite(yon_char_return_if_exist(password_changed_date,""),
- ":",yon_char_return_if_exist(password_change_interval_minimum,""),
- ":",yon_char_return_if_exist(password_change_interval_maximum,""),
- ":",yon_char_return_if_exist(warning_days,""),
- ":",yon_char_return_if_exist(no_activity_days,""),
- ":",yon_char_return_if_exist(password_expiration_date,""),
- NULL);
-
- final_user = yon_char_unite(yon_char_return_if_exist(username,"x"),
- ":",yon_char_return_if_exist(uid_string,"x"),
- ":",yon_char_return_if_exist(main_group,"x"),
- ":",yon_char_return_if_exist(additional_groups,"x"),
- ":",yon_char_return_if_exist(extra_options,""),
- ":",yon_char_return_if_exist(password,""),
- NULL);
-
- char *final_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",USERADD(login));
- yon_config_register(USERADD(login),final_command,final_user);
- if (!yon_char_is_empty(window->old_username)&&strcmp(window->old_username,login)){
- yon_config_remove_by_key(USERADD(window->old_username));
- }
- final_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",USERSHADOW(login));
- yon_config_register(USERSHADOW(login),final_command,shadow_string);
- if (!yon_char_is_empty(window->old_username)&&strcmp(window->old_username,login)){
- yon_config_remove_by_key(USERSHADOW(window->old_username));
- }
- int home_delete = yon_char_parsed_check_exist(main_config.remove_homes,main_config.homes_size,login);
- if (home_delete>-1){
- yon_char_parsed_rip(main_config.remove_homes,&main_config.homes_size,home_delete);
- }
-
- if (!yon_char_is_empty(useradd_sync_string)){
- final_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",USERADD_SYNC(login));
- yon_config_register(USERADD_SYNC(login),final_command,useradd_sync_string);
- if (!yon_char_is_empty(window->old_username)&&strcmp(window->old_username,login)){
- yon_config_remove_by_key(USERADD_SYNC(window->old_username));
- }
- } else {
- yon_config_remove_by_key(USERADD_SYNC(window->old_username));
- }
-
- if (!yon_char_is_empty(usershadow_sync_string)){
- final_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",USERSHADOW_SYNC(login));
- yon_config_register(USERSHADOW_SYNC(login),final_command,usershadow_sync_string);
- if (!yon_char_is_empty(window->old_username)&&strcmp(window->old_username,login)){
- yon_config_remove_by_key(USERSHADOW_SYNC(window->old_username));
- }
- } 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);
- on_subwindow_close(self);
-}
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));
@@ -2447,125 +2044,6 @@ void on_remove_expired(GtkWidget *, GtkEntryIconPosition icon_pos, GdkEvent *, G
}
}
-ubl_settings_usergroups_user_window *yon_ubl_settings_usergroups_user_new(){
- ubl_settings_usergroups_user_window *window = malloc(sizeof(ubl_settings_usergroups_user_window));
- GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_ubl_settings_usergroups_user);
- window->CreateUserWindow=yon_gtk_builder_get_widget(builder,"CreateUserWindow");
- window->StatusBox=yon_gtk_builder_get_widget(builder,"StatusBox");
- window->userUIDAutoCheck=yon_gtk_builder_get_widget(builder,"userUIDAutoCheck");
- window->userUIDEntry=yon_gtk_builder_get_widget(builder,"userUIDEntry");
- window->userLoginEntry=yon_gtk_builder_get_widget(builder,"userLoginEntry");
- window->userPasswordCombo=yon_gtk_builder_get_widget(builder,"userPasswordCombo");
- window->userPasswordEntry=yon_gtk_builder_get_widget(builder,"userPasswordEntry");
- window->userPasswordButton=yon_gtk_builder_get_widget(builder,"userPasswordButton");
- window->userUserNameEntry=yon_gtk_builder_get_widget(builder,"userUserNameEntry");
- window->userGroupsCheck=yon_gtk_builder_get_widget(builder,"userGroupsCheck");
- window->userGroupsEntry=yon_gtk_builder_get_widget(builder,"userGroupsEntry");
- window->UserGroupsButton=yon_gtk_builder_get_widget(builder,"UserGroupsButton");
- window->userAdditionalGroupsEntry=yon_gtk_builder_get_widget(builder,"userAdditionalGroupsEntry");
- window->userAdditionalGroupsButton=yon_gtk_builder_get_widget(builder,"userAdditionalGroupsButton");
- window->userPasswordChangedEntry=yon_gtk_builder_get_widget(builder,"userPasswordChangedEntry");
- window->userPasswordExpirationEntry=yon_gtk_builder_get_widget(builder,"userPasswordExpirationEntry");
- window->userPasswordExpirationButton=yon_gtk_builder_get_widget(builder,"userPasswordExpirationButton");
- window->userPasswordChangeDelayMinimumSpin=yon_gtk_builder_get_widget(builder,"userPasswordChangeDelayMinimumSpin");
- window->userPasswordChangeDelayMaximumSpin=yon_gtk_builder_get_widget(builder,"userPasswordChangeDelayMaximumSpin");
- window->userWarningSpin=yon_gtk_builder_get_widget(builder,"userWarningSpin");
- window->userActivitySpin=yon_gtk_builder_get_widget(builder,"userActivitySpin");
- window->userForceChangeCheck=yon_gtk_builder_get_widget(builder,"userForceChangeCheck");
- window->userShellCombo=yon_gtk_builder_get_widget(builder,"userShellCombo");
- window->userShellEntry=yon_gtk_builder_get_widget(builder,"userShellEntry");
- window->userHomeCombo=yon_gtk_builder_get_widget(builder,"userHomeCombo");
- window->userHomeEntry=yon_gtk_builder_get_widget(builder,"userHomeEntry");
- window->userHomeButton=yon_gtk_builder_get_widget(builder,"userHomeButton");
- window->userCreateSystemCheck=yon_gtk_builder_get_widget(builder,"userCreateSystemCheck");
- window->userCreateUnuniqueCheck=yon_gtk_builder_get_widget(builder,"userCreateUnuniqueCheck");
- window->userDontCheckCheck=yon_gtk_builder_get_widget(builder,"userDontCheckCheck");
- window->userSyncSAMBACheck=yon_gtk_builder_get_widget(builder,"userSyncSAMBACheck");
- window->userSyncSAMBAPasswordCheck=yon_gtk_builder_get_widget(builder,"userSyncSAMBAPasswordCheck");
- window->userDeactivatedCheck=yon_gtk_builder_get_widget(builder,"userDeactivatedCheck");
- window->userExtraOptionsEntry=yon_gtk_builder_get_widget(builder,"userExtraOptionsEntry");
- window->UserCancelButton=yon_gtk_builder_get_widget(builder,"UserCancelButton");
- window->UserOkButton=yon_gtk_builder_get_widget(builder,"UserOkButton");
- window->CalendarPopup=yon_gtk_builder_get_widget(builder,"CalendarPopover");
- window->UseraddBootCheck=yon_gtk_builder_get_widget(builder,"UseraddBootCheck");
- window->ExpirationCalendar=yon_gtk_builder_get_widget(builder,"ExpirationCalendar");
- window->UseraddShutdownCheck=yon_gtk_builder_get_widget(builder,"UseraddShutdownCheck");
- window->UsershadowBootCheck=yon_gtk_builder_get_widget(builder,"UsershadowBootCheck");
- window->UsershadowShutdownCheck=yon_gtk_builder_get_widget(builder,"UsershadowShutdownCheck");
- window->userTitleNameLabel=yon_gtk_builder_get_widget(builder,"userTitleNameLabel");
- window->expiration_unix=NULL;
- window->last_uid=NULL;
-
- time_t t = time(NULL);
- struct tm tm = *localtime(&t);
- gtk_calendar_select_day(GTK_CALENDAR(window->ExpirationCalendar),tm.tm_mday);
- gtk_calendar_select_month(GTK_CALENDAR(window->ExpirationCalendar),tm.tm_mon,1900+tm.tm_year);
-
- on_UID_update(NULL,window);
- int shell_size=0;
- config_str shells = yon_file_open(shell_list_path,&shell_size);
- for (int i=1;iuserShellCombo),parsed[0],parsed[0]);
- yon_char_parsed_free(parsed,parsed_size);
- }
- }
- gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->userShellCombo),"Set",SET_LABEL);
- yon_char_parsed_free(shells,shell_size);
- gtk_combo_box_set_active(GTK_COMBO_BOX(window->userShellCombo),0);
- window->old_password=NULL;
- window->old_username=NULL;
- dictionary *entry_dict = NULL;
- yon_window_config_custom_window_setup(GTK_WINDOW(window->CreateUserWindow),"UserWindow");
- yon_dictionary_add_or_create_if_exists_with_data(entry_dict,"combo",window->userPasswordCombo);
- yon_dictionary_add_or_create_if_exists_with_data(entry_dict,"entry",window->userPasswordEntry);
- // char *password = yon_config_get_by_key(USERADD((char*)gtk_entry_get_text(GTK_ENTRY(window->userLoginEntry))));
- g_signal_connect(G_OBJECT(window->UserCancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
- 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->userHomeButton),"clicked",G_CALLBACK(on_filechooser_open),window->userHomeEntry);
- g_signal_connect(G_OBJECT(window->UserGroupsButton),"clicked",G_CALLBACK(on_groups_clicked),window->userGroupsEntry);
- g_signal_connect(G_OBJECT(window->userPasswordButton),"clicked",G_CALLBACK(on_password_change),entry_dict);
- 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);
- 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);
- g_signal_connect(G_OBJECT(window->userGroupsCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->userGroupsEntry);
- g_signal_connect(G_OBJECT(window->userGroupsCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->UserGroupsButton);
- g_signal_connect(G_OBJECT(window->userShellCombo),"changed",G_CALLBACK(on_user_shell_changed),window);
- g_signal_connect(G_OBJECT(window->ExpirationCalendar),"day-selected",G_CALLBACK(on_date_selected),window);
- g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(on_UID_update),window);
- g_signal_connect(G_OBJECT(window->userCreateSystemCheck),"toggled",G_CALLBACK(on_UID_update),window);
- g_signal_connect(G_OBJECT(window->userGroupsCheck),"toggled",G_CALLBACK(on_user_login_update),window);
- g_signal_connect(G_OBJECT(window->userLoginEntry),"changed",G_CALLBACK(on_user_login_update),window);
- g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),window->userCreateSystemCheck);
- g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(yon_gtk_toggle_button_set_inactive_from_toggle_button),window->userCreateSystemCheck);
- g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->userCreateUnuniqueCheck);
- g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(yon_gtk_toggle_button_set_inactive_from_toggle_button_inversed),window->userCreateUnuniqueCheck);
- g_signal_connect(G_OBJECT(window->userSyncSAMBACheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->userSyncSAMBAPasswordCheck);
- g_signal_connect(G_OBJECT(window->userSyncSAMBAPasswordCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->userSyncSAMBACheck);
- g_signal_connect(G_OBJECT(window->userSyncSAMBACheck),"toggled",G_CALLBACK(on_toggle_button_set_active_from_toggle_button_inversed),window);
- g_signal_connect(G_OBJECT(window->userSyncSAMBAPasswordCheck),"toggled",G_CALLBACK(on_toggle_button_set_active_from_toggle_button_inversed),window);
- g_signal_connect(G_OBJECT(window->userPasswordCombo),"changed",G_CALLBACK(on_toggle_button_set_active_from_combo_box),window);
- g_signal_connect(G_OBJECT(window->userPasswordCombo),"changed",G_CALLBACK(on_toggle_button_set_active_from_combo_box),window);
- g_signal_connect(G_OBJECT(window->userPasswordEntry),"changed",G_CALLBACK(on_password_user_changed),window);
- g_signal_connect(G_OBJECT(window->userHomeEntry),"changed",G_CALLBACK(on_parameter_changed),window);
- g_signal_connect(G_OBJECT(window->userHomeCombo),"changed",G_CALLBACK(on_parameter_changed),window);
- g_signal_connect(G_OBJECT(window->userShellCombo),"changed",G_CALLBACK(on_parameter_changed),window);
- g_signal_connect(G_OBJECT(window->userShellEntry),"changed",G_CALLBACK(on_parameter_changed),window);
- g_signal_connect(G_OBJECT(window->userCreateSystemCheck),"toggled",G_CALLBACK(on_parameter_changed),window);
- g_signal_connect(G_OBJECT(window->userCreateUnuniqueCheck),"toggled",G_CALLBACK(on_parameter_changed),window);
- g_signal_connect(G_OBJECT(window->userDontCheckCheck),"toggled",G_CALLBACK(on_parameter_changed),window);
- g_signal_connect(G_OBJECT(window->userGroupsCheck),"toggled",G_CALLBACK(on_parameter_changed),window);
- g_signal_connect(G_OBJECT(window->userGroupsEntry),"changed",G_CALLBACK(on_parameter_changed),window);
- g_signal_connect(G_OBJECT(window->userPasswordExpirationEntry),"icon-press",G_CALLBACK(on_remove_expired),window->userPasswordExpirationEntry);
- g_signal_connect(G_OBJECT(window->userUIDEntry),"insert-text",G_CALLBACK(yon_on_text_insert_only_digits),NULL);
-return window;
-}
void on_main_add(GtkWidget *, main_window *widgets){
if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){
@@ -2851,30 +2329,55 @@ void on_main_delete(GtkWidget *, main_window *widgets){
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemTree)),&model,&iter)){
char *target;
gtk_tree_model_get(model,&iter,2,&target,-1);
- dialog_confirmation_data data;
- int found = !!config(USERADD(target));
- if (found){
- data.action_text = SYSTEM_USER_CONFIG_REMOVE_CONFIRMATION_LABEL(target);
- data.function=NULL;
- data.data=NULL;
+ if (config(USERADD(target))){
+ system_remove_confirmation_window *window = yon_system_remove_confirmation_window_new();
+ gtk_label_set_markup(GTK_LABEL(window->TitleLabel),SYSTEM_USER_SYSTEM_REMOVE_CONFIRMATION_LABEL(target));
+ dictionary *dict = NULL;
+ 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->ConfigAcceptButton),"clicked",G_CALLBACK(yon_remove_confirmation_window_accept_clicked),dict);
+ g_signal_connect(G_OBJECT(window->SystemAcceptButton),"clicked",G_CALLBACK(yon_remove_confirmation_window_accept_clicked),dict);
+ gtk_widget_show(window->Window);
} else {
+ dialog_confirmation_data data;
data.action_text = SYSTEM_USER_SYSTEM_REMOVE_CONFIRMATION_LABEL(target);
data.function=NULL;
data.data=NULL;
- }
- if (yon_confirmation_dialog_call(widgets->Window,&data)!=GTK_RESPONSE_ACCEPT){
- return;
- }
- if (found){
- yon_delete_confirmation_open(widgets);
- } else {
+ if (yon_confirmation_dialog_call(widgets->Window,&data)!=GTK_RESPONSE_ACCEPT){
+ return;
+ }
yon_system_delete_confirmation_open(widgets);
}
}
}break;
case 3:{
-
+ GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore2);
+ GtkTreeIter iter;
+ if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemGroupsTree)),&model,&iter)){
+ char *target;
+ gtk_tree_model_get(model,&iter,1,&target,-1);
+ if (config(USERADD(target))){
+ system_remove_confirmation_window *window = yon_system_remove_confirmation_window_new();
+ gtk_label_set_markup(GTK_LABEL(window->TitleLabel),SYSTEM_GROUP_SYSTEM_REMOVE_CONFIRMATION_LABEL(target));
+ dictionary *dict = NULL;
+ 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->ConfigAcceptButton),"clicked",G_CALLBACK(yon_remove_confirmation_window_accept_clicked),dict);
+ g_signal_connect(G_OBJECT(window->SystemAcceptButton),"clicked",G_CALLBACK(yon_remove_confirmation_window_accept_clicked),dict);
+ gtk_widget_show(window->Window);
+ } else {
+ dialog_confirmation_data data;
+ data.action_text = SYSTEM_GROUP_SYSTEM_REMOVE_CONFIRMATION_LABEL(target);
+ data.function=NULL;
+ data.data=NULL;
+
+ if (yon_confirmation_dialog_call(widgets->Window,&data)!=GTK_RESPONSE_ACCEPT){
+ return;
+ }
+ yon_system_delete_confirmation_open(widgets);
+ }
+ }
}break;
}
}
@@ -2889,103 +2392,6 @@ void on_config_update(GtkWidget *, main_window *widgets){
}
-void on_user_sync_with_config(GtkWidget *,main_window *widgets){
- int active = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook));
- switch (active){
- case 2:{
- GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore1);
- GtkTreeIter iter;
- if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemTree)),&model,&iter)){
- char *target;
- gtk_tree_model_get(model,&iter,2,&target,-1);
- dialog_confirmation_data data;
- if (config(USERADD(target))){
- data.action_text = SYSTEM_USER_SYNC_CONFIRMATION_LABEL(target);
- data.data=NULL;
- data.function=NULL;
- } else {
- data.action_text = SYSTEM_USER_ADD_CONFIRMATION_LABEL(target);
- data.data=NULL;
- data.function=NULL;
- }
- if (yon_confirmation_dialog_call(widgets->Window,&data)!=GTK_RESPONSE_ACCEPT){
- return;
- }
-
- char *user = yon_char_parsed_check_exist_begins_with(main_config.groups,main_config.groups_size,target);
- char *shadow = yon_char_parsed_check_exist_begins_with(main_config.group_shadow,main_config.group_shadow_size,target);
- yon_char_remove_last_symbol(user,'\n');
- yon_char_remove_last_symbol(shadow,'\n');
- int user_size=0;
- int shadow_size=0;
- config_str parsed = yon_char_parse(user,&user_size,":");
- config_str parsed_shadow = yon_char_parse(shadow,&shadow_size,":");
-
- char *optionals = yon_char_unite(user_size>5? parsed[5]:"",user_size>5?" ":"",user_size>6?parsed[6]:"",NULL);
- char *config_user = yon_char_unite(parsed[0],":",
- user_size>4?parsed[4]:"",":",
- user_size>2?parsed[2]:"",":",
- user_size>3?parsed[3]:"",":",
- !yon_char_is_empty(optionals)?optionals:"",":",
- user_size>1&&strcmp(parsed[1],"x")?yon_char_return_if_exist(parsed[1],""):yon_char_return_if_exist(parsed_shadow[1],""),NULL);
- char *config_shadow = yon_char_unite(yon_char_return_if_exist(parsed[2],""),":",
- user_size>3?parsed[3]:"",":",
- user_size>4?parsed[4]:"",":",
- user_size>5?parsed[5]:"",":",
- user_size>6?parsed[6]:"",":",
- user_size>7?parsed[7]:"",":",NULL);
-
- if (!yon_char_is_empty(config_user)){
- char *user_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",USERADD(target));
- yon_config_register(USERADD(target),user_command,config_user);
- }
- if (!yon_char_is_empty(config_shadow)){
- char *shadow_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",USERSHADOW(target));
- yon_config_register(USERSHADOW(target),shadow_command,config_shadow);
- }
- yon_interface_update(widgets);
- }
- yon_interface_update((main_window*)widgets);
- }break;
- case 3:{
- GtkTreeModel *model = GTK_TREE_MODEL(widgets->liststore1);
- GtkTreeIter iter;
- if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->SystemGroupsTree)),&model,&iter)){
-
- char *target;
- gtk_tree_model_get(model,&iter,1,&target,-1);
- dialog_confirmation_data data;
- if (config(GROUPADD(target))){
- data.action_text = SYSTEM_GROUP_ADD_CONFIRMATION_LABEL(target);
- data.data=NULL;
- data.function=NULL;
- } else {
- data.action_text = SYSTEM_GROUP_SYNC_CONFIRMATION_LABEL(target);
- data.data=NULL;
- data.function=NULL;
- }
- if (yon_confirmation_dialog_call(widgets->Window,&data)!=GTK_RESPONSE_ACCEPT){
- return;
- }
- char *group = yon_char_parsed_check_exist_begins_with(main_config.groups,main_config.groups_size,target);
- char *group_shadow = yon_char_parsed_check_exist_begins_with(main_config.group_shadow,main_config.group_shadow_size,target);
- yon_char_remove_last_symbol(group,'\n');
- yon_char_remove_last_symbol(group_shadow,'\n');
- int group_size=0;
- int group_shadow_size=0;
- config_str parsed = yon_char_parse(group,&group_size,":");
- config_str parsed_shadow = yon_char_parse(group_shadow,&group_shadow_size,":");
- char *config_group = yon_char_unite(parsed[0],":",parsed[3],":",parsed[2],"::",parsed_shadow[2],":",strcmp(parsed[1],"x")?parsed[1]:parsed_shadow[1],NULL);
-
- if (!yon_char_is_empty(config_group)){
- char *group_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",GROUPADD(target));
- yon_config_register(GROUPADD(target),group_command,config_group);
- yon_interface_update(widgets);
- }
- }
- }break;
- }
-}
int yon_element_chosen(GtkWidget *){
return (int)1;
@@ -3240,7 +2646,6 @@ return widgets;
}
int main(int argc, char *argv[]){
- local=setlocale(LC_ALL, "");
textdomain (LocaleName);
config_init();
yon_ubl_connect_config((_template_config*)&main_config);
diff --git a/source/ubl-settings-usergroups.h b/source/ubl-settings-usergroups.h
index f38b727..09982e0 100644
--- a/source/ubl-settings-usergroups.h
+++ b/source/ubl-settings-usergroups.h
@@ -1,3 +1,5 @@
+#ifndef USERGROUPS_H
+#define USERGROUPS_H
#include
#include
#include
@@ -30,6 +32,7 @@
#define glade_path_ubl_settings_usergroups_user "/com/ublinux/ui/ubl-settings-usergroups-user.glade"
#define glade_path_ubl_settings_usergroups_savesettings "/com/ublinux/ui/ubl-settings-usergroups-savesettings.glade"
#define glade_path_ubl_settings_usergroups_confirmation "/com/ublinux/ui/ubl-settings-usergroups-confirmation.glade"
+#define glade_path_ubl_settings_usergroups_system_deletion_confirmation "/com/ublinux/ui/ubl-settings-usergroups-system-deletion-confirmation.glade"
#define banner_path "/com/ublinux/images/ubl-settings-usergroups-banner.png"
#define CssPath "/com/ublinux/css/ubl-settings-usergroups.css"
@@ -52,8 +55,8 @@
#define get_system_group_command(target) yon_char_unite("/usr/lib/ublinux/functions get_conf_groupadd_from_system ",target,NULL)
#define remove_user_from_system_command(target) yon_char_append("userdel ",target)
-#define remove_user_and_homedir_from_system_command yon_char_append("userdel -r ",target)
-#define remove_group_from_system_command yon_char_append("groupdel ",target)
+#define remove_user_and_homedir_from_system_command(target) yon_char_append("userdel -r ",target)
+#define remove_group_from_system_command(target) yon_char_append("groupdel ",target)
#define groups_path "/etc/group"
#define users_path "/etc/passwd"
@@ -142,10 +145,10 @@
#define GROUPADD_parameter_command yon_char_unite("GROUPADD[",target,"]",NULL)
typedef char* string;
+
+__attribute__((unused)) static \
string version_application;
-
-char *local;
-
+
typedef struct {
template_config_fields
@@ -179,6 +182,7 @@ typedef struct {
int launch_size;
config_str launch_arguments;
} config;
+extern config main_config;
typedef struct {
template_window_fields
@@ -368,6 +372,18 @@ typedef struct{
GtkTreeViewColumn *UserCell;
} yon_confirmation_window;
+ typedef struct {
+ GtkWidget *Window;
+ GtkWidget *HeaderLabel;
+ GtkWidget *CancelButton;
+ GtkWidget *StatusBox;
+ GtkWidget *TitleLabel;
+ GtkWidget *AcceptButton;
+ GtkWidget *ConfigAcceptButton;
+ GtkWidget *SystemAcceptButton;
+
+ } system_remove_confirmation_window;
+
ubl_settings_usergroups_additional_settings_window *yon_ubl_settings_usergroups_additional_settings_new();
void on_ubl_settings_usergroups_additional_settings_open(GtkWidget *self, main_window *widgets);
@@ -476,4 +492,9 @@ void config_init();
void on_selection_changed(GtkWidget *self, main_window *widgets);
void on_notebook_page_changed(GtkWidget *self, GtkWidget *page, int num, main_window *widgets);
gboolean on_menu_open(GtkWidget *self,GdkEventButton *event, rmb_menu_window *window);
-main_window *yon_main_window_complete(main_window *widgets);
\ No newline at end of file
+main_window *yon_main_window_complete(main_window *widgets);
+void yon_remove_confirmation_window_accept_clicked(GtkWidget *self,dictionary *dict);
+system_remove_confirmation_window *yon_system_remove_confirmation_window_new();
+void on_delete_system_user(GtkWidget *, yon_confirmation_window *dialog);
+void on_delete_system_group(GtkWidget *, yon_confirmation_window *dialog);
+#endif
\ No newline at end of file
diff --git a/source/ubl-strings.h b/source/ubl-strings.h
index e2f969f..72e9d82 100644
--- a/source/ubl-strings.h
+++ b/source/ubl-strings.h
@@ -56,7 +56,7 @@
#define SYSTEM_GROUP_SYNC_CONFIRMATION_LABEL(target) yon_char_unite(_("This group doesn't exist in configuration. Are you sure want to add group")," ",target," ", _("to configuration?"),NULL)
#define SYSTEM_GROUP_ADD_CONFIRMATION_LABEL(target) yon_char_unite(_("This group exists in configuration. Are you sure want to update group")," ",target," ", _("data at configuration?"),NULL)
-#define SYSTEM_USER_SYSTEM_REMOVE_CONFIRMATION_LABEL(target) yon_char_unite(_("This user doesn't exist in configuration and will be removed from the system. Are you sure want to remove user")," ",target," ", _("from the system??"),NULL)
+#define SYSTEM_USER_SYSTEM_REMOVE_CONFIRMATION_LABEL(target) yon_char_unite(_("This user doesn't exist in configuration and will be removed from the system. Are you sure want to remove user")," ",target," ", _("from the system?"),NULL)
#define SYSTEM_USER_CONFIG_REMOVE_CONFIRMATION_LABEL(target) yon_char_unite(_("This user exists in configuration. Are you sure want to remove user")," ",target," ", _("?"),NULL)
#define SYSTEM_GROUP_SYSTEM_REMOVE_CONFIRMATION_LABEL(target) yon_char_unite(_("This group doesn't exist in configuration and will be removed from the system. Are you sure want to remove group")," ",target," ", _("from the system?"),NULL)
#define SYSTEM_GROUP_CONFIG_REMOVE_CONFIRMATION_LABEL(target) yon_char_unite(_("This group exists in configuration. Are you sure want to remove group")," ",target,"", _("?"),NULL)
diff --git a/ubl-settings-usergroups-system-deletion-confirmation.glade b/ubl-settings-usergroups-system-deletion-confirmation.glade
new file mode 100644
index 0000000..b3b12d3
--- /dev/null
+++ b/ubl-settings-usergroups-system-deletion-confirmation.glade
@@ -0,0 +1,226 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+