#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->MainNotebook=yon_gtk_builder_get_widget(builder,"MainNotebook"); 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); gtk_notebook_set_current_page(GTK_NOTEBOOK(window->MainNotebook),0); 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); gtk_notebook_set_current_page(GTK_NOTEBOOK(window->MainNotebook),0); 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); gtk_notebook_set_current_page(GTK_NOTEBOOK(window->MainNotebook),0); 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); gtk_notebook_set_current_page(GTK_NOTEBOOK(window->MainNotebook),0); 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)&&!yon_char_is_empty(useradd_shutdown)?",":"",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(yon_char_return_if_exist(parsed[3],""), ":",yon_char_return_if_exist(parsed[2],""), "::",yon_char_return_if_exist(parsed_shadow[2],""), ":",strcmp(parsed[1],"x")?yon_char_return_if_exist(parsed[1],""):yon_char_return_if_exist(parsed_shadow[1],""), NULL); if (!yon_char_is_empty(config_group)){ char *group_command = yon_config_parameter_prepare_command(dull_parameter_get_command,NULL,"users",GROUPADD(target)); yon_config_register(GROUPADD(target),group_command,config_group); yon_interface_update(widgets); } } }break; } }