You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ubl-settings-usergroups/source/ubl-settings-usergroups.c

836 lines
40 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include "ubl-settings-usergroups.h"
config main_config;
//functions
int yon_load_proceed(YON_CONFIG_TYPE type){
if (yon_config_load_register(type,"logging","",NULL)){
return 1;
}
}
void on_config_save(){
yon_save_proceed(NULL,YON_CONFIG_BOTH,"logging", "",NULL);
}
void on_config_global_save(){
yon_save_proceed("global",YON_CONFIG_GLOBAL,"logging", "",NULL);
}
void on_config_local_save(){
yon_save_proceed("system",YON_CONFIG_LOCAL,"logging", "",NULL);
}
void on_password_combo_changed(GtkComboBox *self, GtkWidget *target){
gtk_widget_set_sensitive(target,gtk_combo_box_get_active(self)>1);
}
void on_filechooser_open(GtkWidget *self, GtkEntry *output_target){
GtkWidget *dialog = gtk_file_chooser_dialog_new(TITLE_LABEL,NULL,GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,CANCEL_LABEL,GTK_RESPONSE_CANCEL,ACCEPT_LABEL,GTK_RESPONSE_ACCEPT,NULL);
int responce = gtk_dialog_run(GTK_DIALOG(dialog));
if (responce==GTK_RESPONSE_ACCEPT){
char *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
gtk_entry_set_text(output_target,filename);
}
on_subwindow_close(dialog);
// ubl_settings_usergroups_additional_settings_window *window = yon_ubl_settings_usergroups_additional_settings_new();
// g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
// gtk_widget_show(window->Window);
}
void on_groups_save(GtkWidget *self, dictionary *dict){
ubl_settings_usergroups_group_window *window = yon_dictionary_get_data(dict->first,ubl_settings_usergroups_group_window*);
GtkEntry *output = yon_dictionary_get_data(dict->first->next,GtkEntry*);
GtkTreeIter iter;
GtkTreeModel *model = GTK_TREE_MODEL(window->list);
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->GroupsTree)),&model,&iter)){
char *name;
gtk_tree_model_get(model,&iter,1,&name,-1);
gtk_entry_set_text(output,name);
free(name);
}
on_subwindow_close(self);
}
void on_groups_clicked(GtkWidget *self, GtkEntry *output_target){
ubl_settings_usergroups_group_window *window = yon_ubl_settings_usergroups_group_new();
gtk_tree_view_column_set_visible(gtk_tree_view_get_column(GTK_TREE_VIEW(window->GroupsTree),0),0);
gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->GroupsTree)),GTK_SELECTION_SINGLE);
dictionary *dict = NULL;
yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window);
yon_dictionary_add_or_create_if_exists_with_data(dict,"output",output_target);
g_signal_connect(G_OBJECT(window->GroupsOkButton),"clicked",G_CALLBACK(on_groups_save),dict);
gtk_widget_show(window->GroupsWindow);
}
void on_groups_multiple_save(GtkWidget *self, dictionary *dict){
ubl_settings_usergroups_group_window *window = yon_dictionary_get_data(dict->first,ubl_settings_usergroups_group_window*);
GtkEntry *output = yon_dictionary_get_data(dict->first->next,GtkEntry*);
GtkTreeIter iter;
int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(window->list),&iter);
char *full_groups="";
for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(window->list),&iter)){
char *name;
int status;
gtk_tree_model_get(GTK_TREE_MODEL(window->list),&iter,0,&status,1,&name,-1);
if (status){
char *extend_groups = yon_char_unite(full_groups,!yon_char_is_empty(full_groups)?",":"",name,NULL);
if (!yon_char_is_empty(full_groups))
free(full_groups);
full_groups=extend_groups;
}
}
gtk_entry_set_text(output,full_groups);
on_subwindow_close(self);
}
void on_groups_multiple_clicked(GtkWidget *self, GtkEntry *output_target){
ubl_settings_usergroups_group_window *window = yon_ubl_settings_usergroups_group_new();
dictionary *dict = NULL;
yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window);
yon_dictionary_add_or_create_if_exists_with_data(dict,"output",output_target);
g_signal_connect(G_OBJECT(window->GroupsOkButton),"clicked",G_CALLBACK(on_groups_multiple_save),dict);
gtk_widget_show(window->GroupsWindow);
}
void on_password_change(GtkWidget *self, GtkEntry *output_target){
ubl_settings_usergroups_password_window *window = yon_ubl_settings_usergroups_password_new();
dictionary *dict = NULL;
yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window);
yon_dictionary_add_or_create_if_exists_with_data(dict,"target",output_target);
g_signal_connect(G_OBJECT(window->UserOkButton),"clicked",G_CALLBACK(on_password_accept),dict);
g_signal_connect(G_OBJECT(window->UserCancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
gtk_window_set_transient_for(GTK_WINDOW(window->CreateGroupWindow),GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(output_target))));
gtk_widget_show(window->CreateGroupWindow);
}
void on_additional_settings_clicked(GtkWidget *self, GtkEntry *output_target){
ubl_settings_usergroups_additional_settings_window *window = yon_ubl_settings_usergroups_additional_settings_new();
g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
gtk_widget_show(window->Window);
}
void on_expiration_clicked(GtkWidget *self, GtkEntry *output_target){
}
// standard functions
void on_additional_settings_save(GtkWidget *self, ubl_settings_usergroups_additional_settings_window *window){
const char *default_user = (char*)gtk_entry_get_text(GTK_ENTRY(window->DefaultUserNameEntry));
if (!yon_char_is_empty(default_user)){
yon_config_register("DEFAULTUSER","users",yon_char_new((char*)default_user));
} else {
yon_config_remove_by_key("DEFAULTUSER");
}
char *default_password = (char*)gtk_entry_get_text(GTK_ENTRY(window->DefaultPasswordEntry));
if (!yon_char_is_empty(default_password)){
yon_config_register("DEFAULTPASSWD","users",default_password);
} else {
yon_config_remove_by_key("DEFAULTPASSWD");
}
char *root_password = (char*)gtk_entry_get_text(GTK_ENTRY(window->RootPasswordEntry));
if (!yon_char_is_empty(root_password)){
yon_config_register("DEFAULTROOTPASSWD","users",root_password);
} else {
yon_config_remove_by_key("DEFAULTROOTPASSWD");
}
int user_k_admin = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->DefaultUserAdministratorCheck));
if (user_k_admin){
yon_config_register("ADDADM","users","yes");
} else {
yon_config_register("ADDADM","users","no");
}
char *hash = (char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->PasswordHashCombo));
if (!yon_char_is_empty(hash)){
yon_config_register("HASHPASSWD","users",hash);
}
}
ubl_settings_usergroups_additional_settings_window *yon_ubl_settings_usergroups_additional_settings_new(){
ubl_settings_usergroups_additional_settings_window *window = malloc(sizeof(ubl_settings_usergroups_additional_settings_window));
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_ubl_settings_usergroups_additional_settings);
window->Window=yon_gtk_builder_get_widget(builder,"Window");
window->StatusBox=yon_gtk_builder_get_widget(builder,"StatusBox");
window->DefaultUserNameEntry=yon_gtk_builder_get_widget(builder,"DefaultUserNameEntry");
window->DefaultUserAdministratorCheck=yon_gtk_builder_get_widget(builder,"DefaultUserAdministratorCheck");
window->DefaultPasswordCombo=yon_gtk_builder_get_widget(builder,"DefaultPasswordCombo");
window->DefaultPasswordEntry=yon_gtk_builder_get_widget(builder,"DefaultPasswordEntry");
window->DefaultPasswordButton=yon_gtk_builder_get_widget(builder,"DefaultPasswordButton");
window->RootPasswordCombo=yon_gtk_builder_get_widget(builder,"RootPasswordCombo");
window->RootPasswordEntry=yon_gtk_builder_get_widget(builder,"RootPasswordEntry");
window->RootPasswordButton=yon_gtk_builder_get_widget(builder,"RootPasswordButton");
window->PasswordHashCombo=yon_gtk_builder_get_widget(builder,"PasswordHashCombo");
window->CancelButton=yon_gtk_builder_get_widget(builder,"CancelButton");
window->AcceptButton=yon_gtk_builder_get_widget(builder,"AcceptButton");
char *default_user = yon_config_get_by_key("DEFAULTUSER");
if (!yon_char_is_empty(default_user))
gtk_entry_set_text(GTK_ENTRY(window->DefaultUserNameEntry),default_user);
char *default_password = yon_config_get_by_key("DEFAULTPASSWD");
if (!yon_char_is_empty(default_password))
gtk_entry_set_text(GTK_ENTRY(window->DefaultPasswordEntry),default_password);
char *root_password = yon_config_get_by_key("DEFAULTROOTPASSWD");
if (!yon_char_is_empty(root_password))
gtk_entry_set_text(GTK_ENTRY(window->RootPasswordEntry),root_password);
char *is_k_admin = yon_config_get_by_key("ADDADM");
if (!yon_char_is_empty(is_k_admin))
if (!strcmp(is_k_admin,"yes"))
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->DefaultUserAdministratorCheck),1);
char *hash = yon_config_get_by_key("HASHPASSWD");
if (!yon_char_is_empty(hash)){
gtk_combo_box_set_active(GTK_COMBO_BOX(window->PasswordHashCombo),yon_gtk_combo_box_text_find(window->PasswordHashCombo,hash));
}
g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_additional_settings_save),window);
g_signal_connect(G_OBJECT(window->DefaultPasswordButton),"clicked",G_CALLBACK(on_password_change),window->DefaultPasswordEntry);
g_signal_connect(G_OBJECT(window->RootPasswordButton),"clicked",G_CALLBACK(on_password_change),window->RootPasswordEntry);
g_signal_connect(G_OBJECT(window->RootPasswordCombo),"changed",G_CALLBACK(on_password_combo_changed),window->RootPasswordButton);
g_signal_connect(G_OBJECT(window->DefaultPasswordCombo),"changed",G_CALLBACK(on_password_combo_changed),window->DefaultPasswordButton);
return window;
}
void on_ubl_settings_usergroups_additional_settings_open(GtkWidget *self, main_window *widgets){
ubl_settings_usergroups_additional_settings_window *window = yon_ubl_settings_usergroups_additional_settings_new();
g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
gtk_window_set_transient_for(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window));
gtk_widget_show(window->Window);
}
ubl_settings_usergroups_group_creation_window *yon_ubl_settings_usergroups_group_creation_new(){
ubl_settings_usergroups_group_creation_window *window = malloc(sizeof(ubl_settings_usergroups_group_creation_window));
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_ubl_settings_usergroups_group_creation);
window->CreateGroupWindow=yon_gtk_builder_get_widget(builder,"CreateGroupWindow");
window->StatusBox=yon_gtk_builder_get_widget(builder,"StatusBox");
window->userUIDAutoCheck=yon_gtk_builder_get_widget(builder,"userUIDAutoCheck");
window->userUIDEntry=yon_gtk_builder_get_widget(builder,"userUIDEntry");
window->userLoginEntry=yon_gtk_builder_get_widget(builder,"userLoginEntry");
window->userGroupsEntry=yon_gtk_builder_get_widget(builder,"userGroupsEntry");
window->UserAdditionalGroupsButton=yon_gtk_builder_get_widget(builder,"UserAdditionalGroupsButton");
window->UserCancelButton=yon_gtk_builder_get_widget(builder,"UserCancelButton");
window->UserOkButton=yon_gtk_builder_get_widget(builder,"UserOkButton");
window->AdditionalGroupsButton=yon_gtk_builder_get_widget(builder,"AdditionalGroupsButton");
window->UnuniqueGIDCheck=yon_gtk_builder_get_widget(builder,"UnuniqueGIDCheck");
window->SystemGroupCheck=yon_gtk_builder_get_widget(builder,"SystemGroupCheck");
window->PasswordCombo=yon_gtk_builder_get_widget(builder,"PasswordCombo");
window->PasswordEntry=yon_gtk_builder_get_widget(builder,"PasswordEntry");
window->ChangePasswordButton=yon_gtk_builder_get_widget(builder,"ChangePasswordButton");
g_signal_connect(G_OBJECT(window->UnuniqueGIDCheck),"clicked",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->userLoginEntry);
g_signal_connect(G_OBJECT(window->AdditionalGroupsButton),"clicked",G_CALLBACK(on_groups_multiple_clicked),window->userGroupsEntry);
g_signal_connect(G_OBJECT(window->ChangePasswordButton),"clicked",G_CALLBACK(on_password_change),window->PasswordEntry);
g_signal_connect(G_OBJECT(window->UserCancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
return window;
}
void on_group_clicked(GtkCellRenderer *self, char *path, ubl_settings_usergroups_group_window *window){
GtkTreeIter iter;
gboolean status;
gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->list),&iter,path);
gtk_tree_model_get(GTK_TREE_MODEL(window->list),&iter,0,&status,-1);
gtk_list_store_set(window->list,&iter,0,!status,-1);
}
ubl_settings_usergroups_group_window *yon_ubl_settings_usergroups_group_new(){
ubl_settings_usergroups_group_window *window = malloc(sizeof(ubl_settings_usergroups_group_window));
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_ubl_settings_usergroups_group);
window->GroupsWindow=yon_gtk_builder_get_widget(builder,"GroupsWindow");
window->GroupsTree=yon_gtk_builder_get_widget(builder,"GroupsTree");
window->GroupsCancelButton=yon_gtk_builder_get_widget(builder,"GroupsCancelButton");
window->GroupsOkButton=yon_gtk_builder_get_widget(builder,"GroupsOkButton");
window->StatusCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"StatusCell"));
window->list = gtk_list_store_new(2,G_TYPE_BOOLEAN,G_TYPE_STRING);
g_signal_connect(G_OBJECT(window->StatusCell),"toggled",G_CALLBACK(on_group_clicked),window);
GtkTreeIter iter;
gtk_tree_view_set_model(GTK_TREE_VIEW(window->GroupsTree),GTK_TREE_MODEL(window->list));
for (int i=0;i<main_config.groups_size;i++){
char *group_record = yon_char_new(main_config.groups[i]);
char *group_name = yon_char_divide_search(group_record,":",-1);
gtk_list_store_append(window->list,&iter);
gtk_list_store_set(window->list,&iter,0,0,1,group_name,-1);
}
g_signal_connect(G_OBJECT(window->GroupsCancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
return window;
}
void on_standard_groups_accept(GtkWidget *self, ubl_settings_usergroups_group_window *window){
GtkTreeIter iter;
GtkTreeModel *model = GTK_TREE_MODEL(window->list);
int valid = gtk_tree_model_get_iter_first(model,&iter);
char *standard_groups="";
for (;valid;valid=gtk_tree_model_iter_next(model,&iter)){
int status;
char *group;
gtk_tree_model_get(model,&iter,0,&status,1,&group,-1);
if (status){
char *extend_groups = yon_char_unite(standard_groups,!yon_char_is_empty(standard_groups)?",":"",group,NULL);
if (!yon_char_is_empty(standard_groups))
free(standard_groups);
standard_groups=extend_groups;
}
}
yon_config_register("USERGROUPS","users",standard_groups);
on_subwindow_close(self);
}
void on_standard_groups_open(GtkWidget *self, main_window *widgets){
ubl_settings_usergroups_group_window *window = yon_ubl_settings_usergroups_group_new();
g_signal_connect(G_OBJECT(window->GroupsOkButton),"clicked",G_CALLBACK(on_standard_groups_accept),window);
gtk_window_set_transient_for(GTK_WINDOW(window->GroupsWindow),GTK_WINDOW(widgets->Window));
char *groups = yon_config_get_by_key("USERGROUPS");
if (!yon_char_is_empty(groups)){
GtkTreeIter iter;
int size;
config_str standard_groups = yon_char_parse(groups,&size,",");
int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(window->list),&iter);
for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(window->list),&iter)){
char *cur_name;
gtk_tree_model_get(GTK_TREE_MODEL(window->list),&iter,1,&cur_name,-1);
for (int i=0;i<size;i++){
if (!strcmp(standard_groups[i],cur_name)){
gtk_list_store_set(window->list,&iter,0,1,-1);
}
}
free(cur_name);
}
}
gtk_widget_show(window->GroupsWindow);
}
void on_password_show_hide(GtkEntry *self, GtkEntryIconPosition icon_pos, GdkEvent* event){
if (icon_pos == GTK_ENTRY_ICON_SECONDARY){
int visible = gtk_entry_get_visibility(self);
if (!visible){
gtk_entry_set_visibility(self,1);
} else {
gtk_entry_set_visibility(self,0);
gtk_entry_set_invisible_char(self,'*');
}
}
}
void on_password_changed(GtkEntry *self, ubl_settings_usergroups_password_window *window){
char *self_text = (char*)gtk_entry_get_text(GTK_ENTRY(window->PasswordEntry));
char *pair_text = (char*)gtk_entry_get_text(GTK_ENTRY(window->RepeatPasswordEntry));
if ((!yon_char_is_empty(self_text)&&!yon_char_is_empty(pair_text))&&strcmp(self_text,pair_text)){
yon_ubl_status_box_spawn_infinite(GTK_CONTAINER(window->StatusBox),PASSWORD_MISMATCH_LABEL,BACKGROUND_IMAGE_FAIL_TYPE);
} else {
yon_ubl_status_box_despawn_infinite(GTK_CONTAINER(window->StatusBox));
}
}
void on_password_accept(GtkWidget *self, dictionary *dict){
ubl_settings_usergroups_password_window *window = yon_dictionary_get_data(dict->first,ubl_settings_usergroups_password_window*);
GtkEntry *entry = yon_dictionary_get_data(dict->first->next,GtkEntry*);
char *password = yon_char_new((char*)gtk_entry_get_text(GTK_ENTRY(window->PasswordEntry)));
char *password_check = (char*)gtk_entry_get_text(GTK_ENTRY(window->PasswordEntry));
if (strcmp(password,password_check)){
}
}
ubl_settings_usergroups_password_window *yon_ubl_settings_usergroups_password_new(){
ubl_settings_usergroups_password_window *window = malloc(sizeof(ubl_settings_usergroups_password_window));
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_ubl_settings_usergroups_password);
window->CreateGroupWindow=yon_gtk_builder_get_widget(builder,"CreateGroupWindow");
window->StatusBox=yon_gtk_builder_get_widget(builder,"StatusBox");
window->PasswordEntry=yon_gtk_builder_get_widget(builder,"PasswordEntry");
window->RepeatPasswordEntry=yon_gtk_builder_get_widget(builder,"RepeatPasswordEntry");
window->PasswordHashEntry=yon_gtk_builder_get_widget(builder,"PasswordHashEntry");
window->UserCancelButton=yon_gtk_builder_get_widget(builder,"UserCancelButton");
window->UserOkButton=yon_gtk_builder_get_widget(builder,"UserOkButton");
g_signal_connect(G_OBJECT(window->UserCancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
g_signal_connect(G_OBJECT(window->PasswordEntry),"icon-press",G_CALLBACK(on_password_show_hide),NULL);
g_signal_connect(G_OBJECT(window->RepeatPasswordEntry),"icon-press",G_CALLBACK(on_password_show_hide),NULL);
g_signal_connect(G_OBJECT(window->PasswordHashEntry),"icon-press",G_CALLBACK(on_password_show_hide),NULL);
g_signal_connect(G_OBJECT(window->PasswordEntry),"changed",G_CALLBACK(on_password_changed),window);
g_signal_connect(G_OBJECT(window->RepeatPasswordEntry),"changed",G_CALLBACK(on_password_changed),window);
gtk_window_set_title(GTK_WINDOW(window->CreateGroupWindow),TITLE_LABEL);
return window;
}
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->SettingsBar=yon_gtk_builder_get_widget(builder,"SettingsBar");
return window;
}
void on_settings_usergroups_system_open(GtkWidget *self, main_window *widgets){
ubl_settings_usergroups_system_window *window = yon_ubl_settings_usergroups_system_new();
gtk_window_set_transient_for(GTK_WINDOW(window->MonitorWindow),GTK_WINDOW(widgets->Window));
gtk_widget_show(window->MonitorWindow);
}
void on_user_shell_changed(GtkWidget *self, ubl_settings_usergroups_user_window *window){
if (!strcmp(gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->userShellCombo)),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_save(GtkWidget *self, ubl_settings_usergroups_user_window *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;
char *samba_sync = NULL;
char *deactivate = NULL;
char *extra_options = NULL;
int uid_auto_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userUIDAutoCheck));
if (uid_auto_active){
uid_string="x";
} else {
uid_string = (char*)gtk_entry_get_text(GTK_ENTRY(window->userUIDEntry));
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;
}
}
login = (char*)gtk_entry_get_text(GTK_ENTRY(window->userLoginEntry));
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;
}
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;
}
username = (char*)gtk_entry_get_text(GTK_ENTRY(window->userUserNameEntry));
if (yon_char_is_empty(username)){
yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE);
yon_ubl_status_highlight_incorrect(window->userUserNameEntry);
return;
}
main_group = (char*)gtk_entry_get_text(GTK_ENTRY(window->userGroupsEntry));
if (yon_char_is_empty(main_group)){
yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE);
yon_ubl_status_highlight_incorrect(window->userGroupsEntry);
return;
}
additional_groups = (char*)gtk_entry_get_text(GTK_ENTRY(window->userAdditionalGroupsEntry));
if (yon_char_is_empty(additional_groups)){
yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE);
yon_ubl_status_highlight_incorrect(window->userAdditionalGroupsEntry);
return;
}
password_change_interval_minimum = yon_char_from_long(gtk_spin_button_get_value(GTK_SPIN_BUTTON(window->userPasswordChangeDelayMinimumSpin)));
if (yon_char_is_empty(password_change_interval_minimum)){
yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE);
yon_ubl_status_highlight_incorrect(window->userPasswordChangeDelayMinimumSpin);
return;
}
password_change_interval_maximum = yon_char_from_long(gtk_spin_button_get_value(GTK_SPIN_BUTTON(window->userPasswordChangeDelayMaximumSpin)));
if (yon_char_is_empty(password_change_interval_maximum)){
yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE);
yon_ubl_status_highlight_incorrect(window->userPasswordChangeDelayMaximumSpin);
return;
}
warning_days = yon_char_from_long(gtk_spin_button_get_value(GTK_SPIN_BUTTON(window->userWarningSpin)));
if (yon_char_is_empty(warning_days)){
yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE);
yon_ubl_status_highlight_incorrect(window->userWarningSpin);
return;
}
no_activity_days = yon_char_from_long(gtk_spin_button_get_value(GTK_SPIN_BUTTON(window->userActivitySpin)));
if (yon_char_is_empty(no_activity_days)){
yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE);
yon_ubl_status_highlight_incorrect(window->userActivitySpin);
return;
}
int force_at_next_login_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userForceChangeCheck));
if (force_at_next_login_active){
}
user_shell = (char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->userShellCombo));
if (!strcmp(user_shell,SET_LABEL)){
user_shell = (char*)gtk_entry_get_text(GTK_ENTRY(window->userShellCombo));
if (yon_char_is_empty(user_shell)){
yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE);
yon_ubl_status_highlight_incorrect(window->userShellEntry);
return;
}
}
int user_home_active = gtk_combo_box_get_active(GTK_COMBO_BOX(window->userHomeCombo));
if (user_home_active==2){
user_home=(char*)gtk_entry_get_text(GTK_ENTRY(window->userHomeEntry));
if (yon_char_is_empty(user_home)){
yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE);
yon_ubl_status_highlight_incorrect(window->userHomeCombo);
return;
}
}
int system_user_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userCreateSystemCheck));
if (system_user_active);
int create_ununique_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userCreateUnuniqueCheck));
if (create_ununique_active);
int do_not_check_actve = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userDontCheckCheck));
if (do_not_check);
int samba_sync_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userSyncSAMBACheck));
if (samba_sync_active);
int deactivate_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userDeactivatedCheck));
if (deactivate_active);
extra_options=(char*)gtk_entry_get_text(GTK_ENTRY(window->userExtraOptionsEntry));
}
ubl_settings_usergroups_user_window *yon_ubl_settings_usergroups_user_new(){
ubl_settings_usergroups_user_window *window = malloc(sizeof(ubl_settings_usergroups_user_window));
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->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");
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),window->userPasswordEntry);
g_signal_connect(G_OBJECT(window->userAdditionalGroupsButton),"clicked",G_CALLBACK(on_groups_multiple_clicked),window->userAdditionalGroupsEntry);
g_signal_connect(G_OBJECT(window->userPasswordExpirationButton),"clicked",G_CALLBACK(on_expiration_clicked),window->userPasswordExpirationEntry);
g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->userUIDEntry);
g_signal_connect(G_OBJECT(window->userHomeCombo),"changed",G_CALLBACK(on_password_combo_changed),window->userHomeEntry);
g_signal_connect(G_OBJECT(window->userHomeCombo),"changed",G_CALLBACK(on_password_combo_changed),window->userHomeButton);
g_signal_connect(G_OBJECT(window->userPasswordCombo),"changed",G_CALLBACK(on_password_combo_changed),window->userPasswordButton);
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->userShellCombo),"changed",G_CALLBACK(on_user_shell_changed),window);
return window;
}
void on_main_add(GtkWidget *self, main_window *widgets){
GtkTreeModel *model;
GtkWidget *cur_tree;
GtkTreeIter iter;
if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){
model = GTK_TREE_MODEL(widgets->UsersList);
ubl_settings_usergroups_user_window *window = yon_ubl_settings_usergroups_user_new();
g_signal_connect(G_OBJECT(window->UserOkButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
gtk_window_set_transient_for(GTK_WINDOW(window->CreateUserWindow),GTK_WINDOW(widgets->Window));
gtk_widget_show(window->CreateUserWindow);
} else {
model = GTK_TREE_MODEL(widgets->GroupsList);
ubl_settings_usergroups_group_creation_window *window = yon_ubl_settings_usergroups_group_creation_new();
g_signal_connect(G_OBJECT(window->UserOkButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
gtk_window_set_transient_for(GTK_WINDOW(window->CreateGroupWindow),GTK_WINDOW(widgets->Window));
gtk_widget_show(window->CreateGroupWindow);
}
}
void on_main_edit(GtkWidget *self, main_window *widgets){
GtkTreeModel *model;
GtkWidget *cur_tree;
GtkTreeIter iter;
if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){
model = GTK_TREE_MODEL(widgets->UsersList);
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->UsersTree)),&model,&iter)){
ubl_settings_usergroups_user_window *window = yon_ubl_settings_usergroups_user_new();
g_signal_connect(G_OBJECT(window->UserOkButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
gtk_window_set_transient_for(GTK_WINDOW(window->CreateUserWindow),GTK_WINDOW(widgets->Window));
gtk_widget_show(window->CreateUserWindow);
}
} else {
model = GTK_TREE_MODEL(widgets->GroupsList);
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->GroupsTree)),&model,&iter)){
ubl_settings_usergroups_group_creation_window *window = yon_ubl_settings_usergroups_group_creation_new();
g_signal_connect(G_OBJECT(window->UserOkButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
gtk_window_set_transient_for(GTK_WINDOW(window->CreateGroupWindow),GTK_WINDOW(widgets->Window));
gtk_widget_show(window->CreateGroupWindow);
}
}
}
void on_main_delete(GtkWidget *self, main_window *widgets){
GtkTreeModel *model;
GtkWidget *cur_tree;
GtkTreeIter iter;
if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){
model = GTK_TREE_MODEL(widgets->UsersList);
cur_tree=widgets->UsersTree;
} else {
model = GTK_TREE_MODEL(widgets->GroupsList);
cur_tree=widgets->GroupsTree;
}
if(gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(cur_tree)),&model,&iter)){
gtk_list_store_remove(GTK_LIST_STORE(model),&iter);
}
}
/**config_init()
* [EN]
*
* [RU]
* Функция инициализации всех параметров конфигурации
*/
void config_init(){
main_config.always_open_documentation=0;
main_config.socket_id=-1;
main_config.save_socket_id=-1;
main_config.load_socket_id=-1;
main_config.lock_help=0;
main_config.lock_help=0;
main_config.lock_load_global=0;
main_config.lock_save_global=0;
main_config.lock_save_local=0;
main_config.groups_size=0;
main_config.groups = yon_file_open(groups_path,&main_config.groups_size);
}
/**yon_main_window_complete(main_window *widgets)
* [EN]
*
* [RU]
* Функция настройки основного окна приложения. [widgets] - структура со стандартным интерфейсом.
*/
void yon_main_window_complete(main_window *widgets){
widgets = yon_remalloc(widgets,sizeof(main_window));
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path);
gtk_box_pack_start(GTK_BOX(widgets->InterfaceBox),yon_gtk_builder_get_widget(builder,"PlugBox"),1,1,0);
// Custom widgets configuration
widgets->CacheAlgList=GTK_LIST_STORE(gtk_builder_get_object(builder,"CacheAlgList"));
widgets->GroupsList=GTK_LIST_STORE(gtk_builder_get_object(builder,"GroupsList"));
widgets->UsersList=GTK_LIST_STORE(gtk_builder_get_object(builder,"UsersList"));
widgets->PlugBox=yon_gtk_builder_get_widget(builder,"PlugBox");
widgets->button1=yon_gtk_builder_get_widget(builder,"button1");
widgets->button2=yon_gtk_builder_get_widget(builder,"button2");
widgets->button3=yon_gtk_builder_get_widget(builder,"button3");
widgets->AddButton=yon_gtk_builder_get_widget(builder,"AddButton");
widgets->EditButton=yon_gtk_builder_get_widget(builder,"EditButton");
widgets->DeleteButton=yon_gtk_builder_get_widget(builder,"DeleteButton");
widgets->UpdateButton=yon_gtk_builder_get_widget(builder,"UpdateButton");
widgets->UsersTree=yon_gtk_builder_get_widget(builder,"UsersTree");
widgets->GroupsTree=yon_gtk_builder_get_widget(builder,"GroupsTree");
widgets->MainNotebook=yon_gtk_builder_get_widget(builder,"MainNotebook");
if (main_config.lock_load_global == 1){
gtk_widget_set_sensitive(widgets->LoadGlobalMenuItem,0);
}
if (main_config.lock_save_global == 1){
gtk_widget_set_sensitive(widgets->SaveGlobalMenuItem,0);
gtk_widget_set_sensitive(widgets->SaveMenuItem,0);
}
if (main_config.lock_save_local == 1){
gtk_widget_set_sensitive(widgets->SaveLocalMenuItem,0);
gtk_widget_set_sensitive(widgets->SaveMenuItem,0);
}
/* Signal connection | Присоединение сигналов */
g_signal_connect(G_OBJECT(widgets->AddButton),"clicked",G_CALLBACK(on_main_add),widgets);
g_signal_connect(G_OBJECT(widgets->EditButton),"clicked",G_CALLBACK(on_main_edit),widgets);
g_signal_connect(G_OBJECT(widgets->DeleteButton),"clicked",G_CALLBACK(on_main_delete),widgets);
g_signal_connect(G_OBJECT(widgets->button3),"clicked",G_CALLBACK(on_standard_groups_open),widgets);
g_signal_connect(G_OBJECT(widgets->button2),"clicked",G_CALLBACK(on_ubl_settings_usergroups_additional_settings_open),widgets);
g_signal_connect(G_OBJECT(widgets->button1),"clicked",G_CALLBACK(on_settings_usergroups_system_open),widgets);
g_signal_connect(G_OBJECT(widgets->SaveMenuItem),"activate",G_CALLBACK(on_config_save),widgets);
g_signal_connect(G_OBJECT(widgets->SaveGlobalMenuItem),"activate",G_CALLBACK(on_config_global_save),widgets);
g_signal_connect(G_OBJECT(widgets->SaveLocalMenuItem),"activate",G_CALLBACK(on_config_local_save),widgets);
gtk_widget_show(widgets->Window);
}
int main(int argc, char *argv[]){
local=setlocale(LC_ALL, "");
textdomain (LocaleName);
config_init();
int option_index=0;
int show_help=0;
int debug_mode=0;
{
struct option long_options[] = {
{"help", 0, 0, 'h'},
{"version", 0, 0, 'V'},
{"lock-help", 0,0, 1},
{"lock-save", 0,0, 2},
{"lock-save-local", 0,0, 3},
{"lock-save-global", 0,0, 4},
{"lock-load-global", 0,0, 5},
{"socket-id", 1, 0, 's'},
{"socket-ext-id", 1,0, 'e'},
{"socket-trd-id", 1,0, 't'},
{"clear-config", 0,0, 'c'},
{ NULL, 0, NULL, 0 }
};
for (int i=0;i<argc;i++){
int argument=getopt_long(argc,argv,"hVvs:e:t:c",long_options,&option_index);
switch(argument){
case 'h':
show_help=1;
break;
case 'v':
case 'V':
printf("%s\n",VERSION_LABEL);
exit(0);
break;
case 's':
if(optarg)
main_config.socket_id=atoi(optarg);
break;
case 'e':
if(optarg)
main_config.save_socket_id=atoi(optarg);
break;
case 't':
if(optarg)
main_config.load_socket_id=atoi(optarg);
break;
case 'c': system(yon_char_unite("rm -rfd ", yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",NULL));
break;
case 1:
main_config.lock_help=1;
break;
case 2:
main_config.lock_save_local=1;
main_config.lock_save_global=1;
break;
case 3:
main_config.lock_save_local=1;
break;
case 4:
main_config.lock_save_global=1;
break;
case 5:
main_config.lock_load_global=1;
break;
}
}
if (show_help==1&&main_config.lock_help!=1){
printf("%s\n",HELP_LABEL);
exit(0);
}
}
if (getuid()!=0){
main_config.lock_load_global=1;
main_config.lock_save_global=1;
main_config.lock_save_local=1;
}
gtk_init(&argc,&argv);
yon_ubl_connect_config((_template_config*)&main_config);
yon_ubl_window_init(TITLE_LABEL,TITLE_INFO_LABEL,LocaleName,CssPath,LocaleName,version_application,WIKI_LINK);
template_main_window *widgets = yon_ubl_window_setup();
yon_main_window_complete((main_window*)widgets);
yon_load_proceed(YON_CONFIG_LOCAL);
gtk_main();
}