diff --git a/.gitignore b/.gitignore index ed27715..3a308bb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ .vscode/ -ubl-settings-TEMPLATE +ubl-settings-usergroups *~ build/ compile/ diff --git a/com.ublinux.ubl-settings-usergroups.policy b/com.ublinux.ubl-settings-usergroups.policy index 087a6b3..2f5a741 100644 --- a/com.ublinux.ubl-settings-usergroups.policy +++ b/com.ublinux.ubl-settings-usergroups.policy @@ -7,17 +7,17 @@ UBLinux https://ublinux.ru - - Run ubl-ubl-settings-usergroups as root - Запуск утилиты ubl-ubl-settings-usergroups с правами root - Authentication is required to run ubl-ubl-settings-usergroups - Требуется авторизация для запуска утилиты ubl-ubl-settings-usergroups с правами root + + Run ubl-settings-usergroups as root + Запуск утилиты ubl-settings-usergroups с правами root + Authentication is required to run ubl-settings-usergroups + Требуется авторизация для запуска утилиты ubl-settings-usergroups с правами root auth_admin auth_admin auth_admin - /usr/bin/ubl-ubl-settings-usergroups + /usr/bin/ubl-settings-usergroups true diff --git a/com.ublinux.ubl-settings-usergroups.svg b/com.ublinux.ubl-settings-usergroups.svg index f636c26..963138d 100644 --- a/com.ublinux.ubl-settings-usergroups.svg +++ b/com.ublinux.ubl-settings-usergroups.svg @@ -1,14 +1,14 @@ + gradientTransform="matrix(3.779602,0,0,3.779602,-193.72728,-7.0470659)"> + + + + + id="filter55276" + x="-0.14871371" + y="-0.14870605" + width="1.2362248" + height="1.2362127"> + id="feFlood55266" /> + id="feComposite55268" /> + + + + + + + + + + + + + + + + id="feGaussianBlur104562" /> + id="feOffset104564" /> + id="feComposite104566" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + inkscape:current-layer="layer3"> + + + inkscape:label="ubinstall_gui" + style="display:none"> - + id="g2035" + transform="matrix(1.7064512,0,0,1.7064512,182.08962,45.305852)" + style="filter:url(#filter104568)"> + + + + + + + + + + + + + cx="4.7361059" + cy="12.475146" + r="3.9282389" + fill="url(#linearGradient3529)" + stroke-width="0.927939" + id="circle34" + style="fill:url(#linearGradient3529)" /> + + + + + + + + + + + + + + + + + + + + + + + r="41.908859" + cy="102.92618" + cx="216" + id="path4700" + style="fill:url(#linearGradient4708);fill-opacity:1;stroke-width:2.17512;stroke-linecap:round" /> + + + + + diff --git a/source/ubl-settings-usergroups.c b/source/ubl-settings-usergroups.c index ee77d87..b149b9c 100644 --- a/source/ubl-settings-usergroups.c +++ b/source/ubl-settings-usergroups.c @@ -100,8 +100,88 @@ void on_about(){ gtk_widget_show(window); } +void on_toggle_button_switched(GtkToggleButton *self, GtkWidget *widget){ + gtk_widget_set_sensitive(widget,!gtk_toggle_button_get_active(self)); + +} + //functions +void on_uid_changed(GtkWidget *self, dictionary *dict){ + user_window *window = yon_dictionary_get_data(dict->first,user_window*); + user_config *user_cfg = yon_dictionary_get_data(dict->first->next,user_config*); + user_cfg->uid = atoi(gtk_entry_buffer_get_text(gtk_entry_get_buffer(GTK_ENTRY(window->UserUIDEntry)))); +} + +void on_username_changed(GtkWidget *self, dictionary *dict){ + user_window *window = yon_dictionary_get_data(dict->first,user_window*); + user_config *user_cfg = yon_dictionary_get_data(dict->first->next,user_config*); + user_cfg->username = (char*)(gtk_entry_buffer_get_text(gtk_entry_get_buffer(GTK_ENTRY(window->userUserNameEntry)))); +} + +void on_login_changed(GtkWidget *self, dictionary *dict){ + user_window *window = yon_dictionary_get_data(dict->first,user_window*); + user_config *user_cfg = yon_dictionary_get_data(dict->first->next,user_config*); + user_cfg->login = (char*)(gtk_entry_buffer_get_text(gtk_entry_get_buffer(GTK_ENTRY(window->userLoginEntry)))); +} + +void on_password_changed(GtkWidget *self, dictionary *dict){ + user_window *window = yon_dictionary_get_data(dict->first,user_window*); + user_config *user_cfg = yon_dictionary_get_data(dict->first->next,user_config*); + user_cfg->password = (char*)(gtk_entry_buffer_get_text(gtk_entry_get_buffer(GTK_ENTRY(window->userPasswordEntry)))); +} + +void on_group_changed(GtkWidget *self, dictionary *dict){ + user_window *window = yon_dictionary_get_data(dict->first,user_window*); + user_config *user_cfg = yon_dictionary_get_data(dict->first->next,user_config*); + user_cfg->main_group = (char*)(gtk_entry_buffer_get_text(gtk_entry_get_buffer(GTK_ENTRY(window->userGroupsEntry)))); +} + +void on_hash_changed(GtkWidget *self, dictionary *dict){ + user_window *window = yon_dictionary_get_data(dict->first,user_window*); + user_config *user_cfg = yon_dictionary_get_data(dict->first->next,user_config*); + user_cfg->password_hash = gtk_combo_box_get_active(GTK_COMBO_BOX(window->userPasswordHashAlgorithmCombo)); +} + +void on_extra_changed(GtkWidget *self, dictionary *dict){ + user_window *window = yon_dictionary_get_data(dict->first,user_window*); + user_config *user_cfg = yon_dictionary_get_data(dict->first->next,user_config*); + user_cfg->extra_options = (char*)(gtk_entry_buffer_get_text(gtk_entry_get_buffer(GTK_ENTRY(window->userExtraOptionsEntry)))); +} + +void on_user_def_password_changed(GtkWidget *self, dictionary *dict){ + user_window *window = yon_dictionary_get_data(dict->first,user_window*); + user_config *user_cfg = yon_dictionary_get_data(dict->first->next,user_config*); + user_cfg->password=NULL; + user_cfg->password_default = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(self)); + on_toggle_button_switched(GTK_TOGGLE_BUTTON(self),window->userPasswordEntry); +} + +void on_auto_uid_changed(GtkWidget *self, dictionary *dict){ + user_window *window = yon_dictionary_get_data(dict->first,user_window*); + user_config *user_cfg = yon_dictionary_get_data(dict->first->next,user_config*); + user_cfg->uid=0; + user_cfg->uid_default = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(self)); + on_toggle_button_switched(GTK_TOGGLE_BUTTON(self),window->UserUIDEntry); +} + +void on_SAMBA_changed(GtkWidget *self, dictionary *dict){ + user_window *window = yon_dictionary_get_data(dict->first,user_window*); + user_config *user_cfg = yon_dictionary_get_data(dict->first->next,user_config*); + user_cfg->sync_SAMBA=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(self)); +} + +void on_user_accept(GtkWidget *self, dictionary * dict){ + user_window *window = yon_dictionary_get_data(dict->first,user_window*); + user_config *user_cfg = yon_dictionary_get_data(dict->first->next,user_config*); + main_window *widgets = yon_dictionary_get_data(dict->first->next->next,main_window*); + GtkTreeIter iter; + gtk_list_store_append(main_config.usersListStore,&iter); + gtk_list_store_set(main_config.usersListStore,&iter,(user_cfg->uid_default==0) ? 0 : 1,(user_cfg->uid_default==0) ? user_cfg->uid : 1,2,user_cfg->login, 3,(user_cfg->password_default==0) ? "*******" : _("Default"),5,user_cfg->username,-1); + // widgets->MainUserTree; + on_close_subwindow(self); +} + void yon_load_proceed(char *command){ if (yon_config_load_register(command)) yon_ubl_status_box_render(LOCAL_SAVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); @@ -110,19 +190,61 @@ void yon_load_proceed(char *command){ } -void on_groups_open(){ +void on_def_groups_accept(GtkWidget *self, dictionary *windowes){ + char *groups_string = ""; + main_window *widgets = yon_dictionary_get_data(windowes->first->next,main_window*); + groups_window *window = yon_dictionary_get_data(windowes->first,groups_window*); + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->GroupsAdmCheck))==1) groups_string = yon_char_append(groups_string,"adm,"); + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->GroupsAudioCheck))==1) groups_string = yon_char_append(groups_string,"audio,"); + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->GroupsAutologinCheck))==1) groups_string = yon_char_append(groups_string,"autologin,"); + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->GroupsAvahiCheck))==1) groups_string = yon_char_append(groups_string,"avahi,"); + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->GroupsBinCheck))==1) groups_string = yon_char_append(groups_string,"bin,"); + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->GroupsBrlapiCheck))==1) groups_string = yon_char_append(groups_string,"brlapi,"); + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->GroupsBrittyCheck))==1) groups_string = yon_char_append(groups_string,"britty,"); + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->GroupsBumblbeeCheck))==1) groups_string = yon_char_append(groups_string,"bumblbee,"); + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->GroupsChronyCheck))==1) groups_string = yon_char_append(groups_string,"chrony,"); + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->GroupsClamavCheck))==1) groups_string = yon_char_append(groups_string,"clamav,"); + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->GroupsCockpitWsCheck))==1) groups_string = yon_char_append(groups_string,"cockpit-ws,"); + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->GroupsCockpitWsinstanceCheck))==1) groups_string = yon_char_append(groups_string,"cockpit-wsinstance,"); + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->GroupsColordCheck))==1) groups_string = yon_char_append(groups_string,"colord,"); + if (strcmp(groups_string,"")!=0) groups_string[strlen(groups_string)-1]='\0'; + gtk_entry_buffer_set_text(gtk_entry_get_buffer(GTK_ENTRY(widgets->MainDefaultGroupsEntry)),groups_string,strlen(groups_string)); + on_close_subwindow(self); +} + +void on_groups_open(GtkWidget *self, main_window *widgets){ + +} + +void on_def_groups_open(GtkWidget *self, main_window *widgets){ GtkBuilder *builder = gtk_builder_new_from_resource(glade_groups_path); groups_window *window = malloc(sizeof(groups_window)); window->Window = yon_gtk_builder_get_widget(builder,"GroupsWindow"); window->GroupsCancelButton = yon_gtk_builder_get_widget(builder,"GroupsCancelButton"); window->GroupsOkButton = yon_gtk_builder_get_widget(builder,"GroupsOkButton"); - g_signal_connect(G_OBJECT(window->GroupsCancelButton),"clicked",G_CALLBACK(on_close_subwindow),NULL); - g_signal_connect(G_OBJECT(window->GroupsOkButton),"clicked",G_CALLBACK(on_close_subwindow),NULL); + window->GroupsAdmCheck = yon_gtk_builder_get_widget(builder,"groupsAdmGroupCheck"); + window->GroupsAudioCheck = yon_gtk_builder_get_widget(builder,"groupsAudioGroupCheck"); + window->GroupsAutologinCheck = yon_gtk_builder_get_widget(builder,"groupsAutologinGroupCheck"); + window->GroupsAvahiCheck = yon_gtk_builder_get_widget(builder,"groupsAvahiGroupCheck"); + window->GroupsBinCheck = yon_gtk_builder_get_widget(builder,"groupsBinGroupCheck"); + window->GroupsBrlapiCheck = yon_gtk_builder_get_widget(builder,"groupsBrlapiGroupCheck"); + window->GroupsBrittyCheck = yon_gtk_builder_get_widget(builder,"groupsBrittyGroupCheck"); + window->GroupsBumblbeeCheck = yon_gtk_builder_get_widget(builder,"groupsBumblbeeGroupCheck"); + window->GroupsChronyCheck = yon_gtk_builder_get_widget(builder,"groupsChronyGroupCheck"); + window->GroupsClamavCheck = yon_gtk_builder_get_widget(builder,"groupsClamavGroupCheck"); + window->GroupsCockpitWsCheck = yon_gtk_builder_get_widget(builder,"groupsCockpitWsGroupCheck"); + window->GroupsCockpitWsinstanceCheck = yon_gtk_builder_get_widget(builder,"groupsCockpitWsinstanceGroupCheck"); + window->GroupsColordCheck = yon_gtk_builder_get_widget(builder,"groupsColordGroupCheck"); + dictionary *windgets=NULL; + yon_dictionary_add_or_create_if_exists_with_data(windgets,"window",window); + yon_dictionary_add_or_create_if_exists_with_data(windgets,"widgets",widgets); + g_signal_connect(G_OBJECT(window->GroupsCancelButton),"clicked",G_CALLBACK(on_close_subwindow),window); + g_signal_connect(G_OBJECT(window->GroupsOkButton),"clicked",G_CALLBACK(on_def_groups_accept),windgets); gtk_widget_show(window->Window); } -void on_user_add(){ +void on_user_add(GtkWidget *self, main_window *widgets){ GtkBuilder *builder = gtk_builder_new_from_resource(glade_user_path); user_window *window = malloc(sizeof(user_window)); window->Window = yon_gtk_builder_get_widget(builder,"CreateUserWindow"); @@ -130,9 +252,47 @@ void on_user_add(){ window->UserCancelButton = yon_gtk_builder_get_widget(builder,"UserCancelButton"); window->UserOkButton = yon_gtk_builder_get_widget(builder,"UserOkButton"); + window->UserUIDAutoCheck = yon_gtk_builder_get_widget(builder,"userUIDAutoCheck"); + window->UserUIDEntry = yon_gtk_builder_get_widget(builder,"userUIDEntry"); + window->userUserNameEntry = yon_gtk_builder_get_widget(builder,"userUserNameEntry"); + window->userLoginEntry = yon_gtk_builder_get_widget(builder,"userLoginEntry"); + window->userPasswordDefaultCheck = yon_gtk_builder_get_widget(builder,"userPasswordDefaultCheck"); + window->userPasswordEntry = yon_gtk_builder_get_widget(builder,"userPasswordEntry"); + window->userGroupsEntry = yon_gtk_builder_get_widget(builder,"userGroupsEntry"); + window->userPasswordHashAlgorithmCombo = yon_gtk_builder_get_widget(builder,"userPasswordHashAlgorithmCombo"); + window->userSyncSAMBACheck = yon_gtk_builder_get_widget(builder,"userSyncSAMBACheck"); + window->userExtraOptionsEntry = yon_gtk_builder_get_widget(builder,"userExtraOptionsEntry"); + user_config *user_cfg=malloc(sizeof(user_config)); + user_cfg->username=NULL; + user_cfg->login=NULL; + user_cfg->password=NULL; + user_cfg->main_group=NULL; + user_cfg->additional_groups=NULL; + user_cfg->extra_options=NULL; + user_cfg->uid=-1; + user_cfg->password_default=0; + user_cfg->password_hash=-1; + user_cfg->sync_SAMBA=0; + 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,"config",user_cfg); + yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); g_signal_connect(G_OBJECT(window->UserCancelButton),"clicked",G_CALLBACK(on_close_subwindow),NULL); - g_signal_connect(G_OBJECT(window->UserOkButton),"clicked",G_CALLBACK(on_close_subwindow),NULL); + g_signal_connect(G_OBJECT(window->UserOkButton),"clicked",G_CALLBACK(on_user_accept),dict); + // g_signal_connect(G_OBJECT(window->UserUIDAutoCheck),"clicked",G_CALLBACK(on_toggle_button_switched),window->UserUIDEntry); + // g_signal_connect(G_OBJECT(window->userPasswordDefaultCheck),"clicked",G_CALLBACK(on_toggle_button_switched),window->UserPasswordEntry); g_signal_connect(G_OBJECT(window->UserAdditionalGroupsButton),"clicked",G_CALLBACK(on_groups_open),NULL); + + g_signal_connect(G_OBJECT(window->UserUIDAutoCheck),"toggled",G_CALLBACK(on_auto_uid_changed),dict); + g_signal_connect(G_OBJECT(window->UserUIDEntry),"changed",G_CALLBACK(on_uid_changed),dict); + g_signal_connect(G_OBJECT(window->userUserNameEntry),"changed",G_CALLBACK(on_username_changed),dict); + g_signal_connect(G_OBJECT(window->userLoginEntry),"changed",G_CALLBACK(on_login_changed),dict); + g_signal_connect(G_OBJECT(window->userPasswordDefaultCheck),"toggled",G_CALLBACK(on_user_def_password_changed),dict); + g_signal_connect(G_OBJECT(window->userPasswordEntry),"changed",G_CALLBACK(on_password_changed),dict); + g_signal_connect(G_OBJECT(window->userGroupsEntry),"changed",G_CALLBACK(on_group_changed),dict); + g_signal_connect(G_OBJECT(window->userPasswordHashAlgorithmCombo),"changed",G_CALLBACK(on_hash_changed),dict); + g_signal_connect(G_OBJECT(window->userSyncSAMBACheck),"toggled",G_CALLBACK(on_SAMBA_changed),dict); + g_signal_connect(G_OBJECT(window->userExtraOptionsEntry),"changed",G_CALLBACK(on_extra_changed),dict); gtk_widget_show(window->Window); } @@ -144,22 +304,57 @@ void on_user_delete(){ } +void on_def_groups_edit(GtkCellEditable *self, main_window *widgets){ + main_config.default_groups=(char*)gtk_entry_buffer_get_text(gtk_entry_get_buffer(GTK_ENTRY(widgets->MainDefaultGroupsEntry))); +} + +void on_def_user_edit(GtkCellEditable *self, main_window *widgets){ + main_config.default_user_name=(char*)gtk_entry_buffer_get_text(gtk_entry_get_buffer(GTK_ENTRY(widgets->MainDefaultUserNameEntry))); + +} + +void on_def_admin_edit(GtkWidget *self, main_window *widgets){ + main_config.is_1000_administrator=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->MainDefaultUserAdministratorCheck)); + +} + +void on_def_password_edit(GtkCellEditable *self, main_window *widgets){ + main_config.default_password=(char*)gtk_entry_buffer_get_text(gtk_entry_get_buffer(GTK_ENTRY(widgets->MainDefaultPasswordEntry))); +} + +void on_root_password_edit(GtkCellEditable *self, main_window *widgets){ + main_config.root_password=(char*)gtk_entry_buffer_get_text(gtk_entry_get_buffer(GTK_ENTRY(widgets->MainRootPasswordEntry))); + +} + +void on_hash_edit(GtkWidget *self, main_window *widgets){ + main_config.hash_alg=gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->MainPasswordHashCombo)); + +} + // standard functions void config_init(){ - main_config.always_open_documentation=0; - main_config.win_height=0; - main_config.win_width=0; - main_config.win_pos_x=0; - main_config.win_pos_y=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.always_open_documentation = 0; + main_config.win_height = 0; + main_config.win_width = 0; + main_config.win_pos_x = 0; + main_config.win_pos_y = 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.default_groups = NULL; + main_config.default_groups_config = NULL; + main_config.default_password = NULL; + main_config.default_user_name = NULL; + main_config.is_1000_administrator=0; + main_config.hash_alg=0; + main_config.root_password=NULL; } main_window *setup_window(){ @@ -199,6 +394,16 @@ main_window *setup_window(){ widgets->MainDeleteUserButton = yon_gtk_builder_get_widget(builder,"MainDeleteUserButton"); widgets->MainEditGroupsButton = yon_gtk_builder_get_widget(builder,"MainEditGroupsButton"); + + widgets->MainDefaultGroupsEntry = yon_gtk_builder_get_widget(builder,"mainDefaultGroupsEntry"); + widgets->MainDefaultUserNameEntry = yon_gtk_builder_get_widget(builder,"mainDefaultUserNameEntry"); + widgets->MainDefaultUserAdministratorCheck = yon_gtk_builder_get_widget(builder,"mainDefaultUserAdministratorCheck"); + widgets->MainDefaultPasswordEntry = yon_gtk_builder_get_widget(builder,"mainDefaultPasswordEntry"); + widgets->MainRootPasswordEntry = yon_gtk_builder_get_widget(builder,"mainRootPasswordEntry"); + widgets->MainUserTree = yon_gtk_builder_get_widget(builder,"mainUserTree"); + widgets->MainPasswordHashCombo = yon_gtk_builder_get_widget(builder,"mainPasswordHashCombo"); + + main_config.usersListStore = GTK_LIST_STORE(gtk_builder_get_object(builder,"UserList")); if (main_config.lock_load_global == 1){ @@ -217,10 +422,16 @@ main_window *setup_window(){ g_signal_connect(G_OBJECT(widgets->Window), "destroy", G_CALLBACK(gtk_main_quit), NULL); g_signal_connect(G_OBJECT(widgets->DocumentationMenuItem),"activate",G_CALLBACK(on_open_documentation_confirmation),WIKI_LINK); g_signal_connect(G_OBJECT(widgets->AboutMenuItem),"activate",G_CALLBACK(on_about),NULL); - g_signal_connect(G_OBJECT(widgets->MainAddUserButton),"clicked",G_CALLBACK(on_user_add),NULL); + g_signal_connect(G_OBJECT(widgets->MainAddUserButton),"clicked",G_CALLBACK(on_user_add),widgets); g_signal_connect(G_OBJECT(widgets->MainEditUserButton),"clicked",G_CALLBACK(on_user_edit),NULL); g_signal_connect(G_OBJECT(widgets->MainDeleteUserButton),"clicked",G_CALLBACK(on_user_delete),NULL); - g_signal_connect(G_OBJECT(widgets->MainEditGroupsButton),"clicked",G_CALLBACK(on_groups_open),NULL); + g_signal_connect(G_OBJECT(widgets->MainEditGroupsButton),"clicked",G_CALLBACK(on_def_groups_open),widgets); + g_signal_connect(G_OBJECT(widgets->MainDefaultGroupsEntry),"changed",G_CALLBACK(on_def_groups_edit),widgets); + g_signal_connect(G_OBJECT(widgets->MainDefaultUserNameEntry),"changed",G_CALLBACK(on_def_user_edit),widgets); + g_signal_connect(G_OBJECT(widgets->MainDefaultUserAdministratorCheck),"toggled",G_CALLBACK(on_def_admin_edit),widgets); + g_signal_connect(G_OBJECT(widgets->MainDefaultPasswordEntry),"changed",G_CALLBACK(on_def_password_edit),widgets); + g_signal_connect(G_OBJECT(widgets->MainRootPasswordEntry),"changed",G_CALLBACK(on_root_password_edit),widgets); + g_signal_connect(G_OBJECT(widgets->MainPasswordHashCombo),"changed",G_CALLBACK(on_hash_edit),widgets); gtk_widget_show(widgets->Window); @@ -311,7 +522,7 @@ int main(int argc, char *argv[]){ if (getuid()!=0) yon_ubl_status_box_render(ROOT_WARNING_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); else - yon_ubl_status_box_render(TITLE_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + yon_ubl_status_box_render(LOCAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); yon_ubl_setup_sockets(widgets->PlugBox,widgets->LeftBox,widgets->RightBox,main_config.socket_id,main_config.load_socket_id,main_config.save_socket_id); yon_window_config_setup(GTK_WINDOW(widgets->Window)); yon_window_config_load(config_path); diff --git a/source/ubl-settings-usergroups.h b/source/ubl-settings-usergroups.h index afd0497..c3ce036 100644 --- a/source/ubl-settings-usergroups.h +++ b/source/ubl-settings-usergroups.h @@ -8,7 +8,7 @@ #include #include #include -#include "ubl-cmake.h" +#include "../compile/ubl-cmake.h" #ifdef WEBKIT_FOUND #include #endif @@ -30,7 +30,7 @@ #define LocalePath "/usr/share/locale" #define LocaleName "ubl-settings-usergroups" typedef char* string; -string version_application; +string version_application=""; char *local; @@ -49,7 +49,17 @@ typedef struct { int lock_save_local; int lock_save_global; int lock_load_global; -} config; + + // Custom + char *default_groups; + char *default_user_name; + char *default_password; + char *root_password; + int hash_alg; + gboolean is_1000_administrator; + struct groups_config *default_groups_config; + GtkListStore *usersListStore; + } config; typedef struct { GtkWidget *Window; @@ -79,17 +89,39 @@ typedef struct { GtkWidget *DocumentationMenuItem; GtkWidget *AboutMenuItem; - + // Custom GtkWidget *MainAddUserButton; GtkWidget *MainEditUserButton; GtkWidget *MainDeleteUserButton; GtkWidget *MainEditGroupsButton; + GtkWidget *MainDefaultGroupsEntry; + GtkWidget *MainDefaultUserNameEntry; + GtkWidget *MainDefaultUserAdministratorCheck; + GtkWidget *MainDefaultPasswordEntry; + GtkWidget *MainRootPasswordEntry; + GtkWidget *MainPasswordHashCombo; + GtkWidget *MainUserTree; } main_window; +typedef struct { + gboolean adm; + gboolean audio; + gboolean autologin; + gboolean avahi; + gboolean bin; + gboolean brlapi; + gboolean britty; + gboolean bumblbee; + gboolean chrony; + gboolean clamav; + gboolean cockpit_ws; + gboolean cockpit_wsinstance; + gboolean colord; +} groups_config; typedef struct { GtkWidget *Window; @@ -107,13 +139,52 @@ typedef struct { GtkWidget *Window; GtkWidget *GroupsCancelButton; GtkWidget *GroupsOkButton; + + GtkWidget *GroupsAdmCheck; + GtkWidget *GroupsAudioCheck; + GtkWidget *GroupsAutologinCheck; + GtkWidget *GroupsAvahiCheck; + GtkWidget *GroupsBinCheck; + GtkWidget *GroupsBrlapiCheck; + GtkWidget *GroupsBrittyCheck; + GtkWidget *GroupsBumblbeeCheck; + GtkWidget *GroupsChronyCheck; + GtkWidget *GroupsClamavCheck; + GtkWidget *GroupsCockpitWsCheck; + GtkWidget *GroupsCockpitWsinstanceCheck; + GtkWidget *GroupsColordCheck; } groups_window; +typedef struct { + int uid; + gboolean uid_default; + char *username; + char *login; + char *password; + gboolean password_default; + char *main_group; + struct groups_config *additional_groups; + int password_hash; + gboolean sync_SAMBA; + char *extra_options; +} user_config; + typedef struct { GtkWidget *Window; GtkWidget *UserAdditionalGroupsButton; GtkWidget *UserCancelButton; GtkWidget *UserOkButton; + + GtkWidget *UserUIDAutoCheck; + GtkWidget *UserUIDEntry; + GtkWidget *userUserNameEntry; + GtkWidget *userLoginEntry; + GtkWidget *userPasswordDefaultCheck; + GtkWidget *userPasswordEntry; + GtkWidget *userGroupsEntry; + GtkWidget *userPasswordHashAlgorithmCombo; + GtkWidget *userSyncSAMBACheck; + GtkWidget *userExtraOptionsEntry; } user_window; main_window *setup_window(); \ No newline at end of file diff --git a/source/ubl-utils.c b/source/ubl-utils.c index 341e091..1f80016 100644 --- a/source/ubl-utils.c +++ b/source/ubl-utils.c @@ -733,9 +733,18 @@ int yon_ubl_check_root(){ } char *yon_ubl_root_user_get(){ + char *user=NULL; if (yon_ubl_check_root()){ - char *user=getenv("SUDO_USER"); - return user; + user=getenv("SUDO_USER"); + if (user&&strcmp(user,"")!=0){ + return user; + }else { + FILE *file = popen("getent passwd $PKEXEC_UID | cut -d: -f1","r"); + user=g_malloc0(4096); + fgets(user,4096,file); + user=yon_char_divide_search(user,"\n",-1); + if (user) return user; + } } return getlogin(); } @@ -1352,7 +1361,6 @@ void yon_terminal_integrated_start(GtkWidget *terminal, char* command, void *end int max=0; max=gtk_window_is_maximized(__yon_window_config_target_window); if(max==0){ - printf("resized\n"); gtk_window_get_size(__yon_window_config_target_window,&__yon_main_window_config.width,&__yon_main_window_config.height); gtk_window_get_position(__yon_window_config_target_window,&__yon_main_window_config.x,&__yon_main_window_config.y); } diff --git a/source/ubl-utils.h b/source/ubl-utils.h index 8bc463d..4eb6137 100644 --- a/source/ubl-utils.h +++ b/source/ubl-utils.h @@ -13,7 +13,7 @@ #include #include -#include "ubl-cmake.h" +#include "../compile/ubl-cmake.h" #ifdef WEBKIT_FOUND #include #endif diff --git a/ubl-settings-usergroups b/ubl-settings-usergroups index 1e09c33..30c3b0d 100755 Binary files a/ubl-settings-usergroups and b/ubl-settings-usergroups differ diff --git a/ubl-settings-usergroups-group.glade b/ubl-settings-usergroups-group.glade index a9467bf..ac621cb 100644 --- a/ubl-settings-usergroups-group.glade +++ b/ubl-settings-usergroups-group.glade @@ -35,7 +35,7 @@ False vertical - + adm True True @@ -49,7 +49,7 @@ - + audio True True @@ -63,7 +63,7 @@ - + autologin True True @@ -77,7 +77,7 @@ - + avahi True True @@ -91,7 +91,7 @@ - + bin True True @@ -105,7 +105,7 @@ - + brlapi True True @@ -119,7 +119,7 @@ - + britty True True @@ -133,7 +133,7 @@ - + bumblbee True True @@ -147,7 +147,7 @@ - + chrony True True @@ -161,7 +161,7 @@ - + clamav True True @@ -175,7 +175,7 @@ - + cockpit-ws True True @@ -189,7 +189,7 @@ - + cockpit-wsinstance True True @@ -203,7 +203,7 @@ - + colord True True @@ -276,8 +276,9 @@ True False + True - + True False Users and groups diff --git a/ubl-settings-usergroups-user.glade b/ubl-settings-usergroups-user.glade index 97ce3c7..8719198 100644 --- a/ubl-settings-usergroups-user.glade +++ b/ubl-settings-usergroups-user.glade @@ -55,16 +55,32 @@ - + + Automatically True True + False + True - True + False True 1 + + + True + True + 1001 + number + + + True + True + 2 + + False @@ -91,9 +107,10 @@ - + True True + username True @@ -127,9 +144,10 @@ - + True True + login True @@ -163,7 +181,7 @@ - + Default True True @@ -177,9 +195,15 @@ - + True True + False + * + False + False + ****** + password True @@ -213,7 +237,7 @@ - + True True @@ -262,9 +286,10 @@ - + True False + 0 sha256 AIX md5 @@ -286,7 +311,7 @@ - + Sync with SAMBA user True True @@ -318,7 +343,7 @@ - + True True @@ -396,8 +421,9 @@ True False + True - + True False Users and groups @@ -409,4 +435,14 @@ + + + + + + + + + + diff --git a/ubl-settings-usergroups.glade b/ubl-settings-usergroups.glade index eced9ce..1645544 100644 --- a/ubl-settings-usergroups.glade +++ b/ubl-settings-usergroups.glade @@ -200,13 +200,19 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - + - + + + - + + + + + - + @@ -662,7 +668,7 @@ translated and supported by community. - + True True @@ -712,7 +718,7 @@ translated and supported by community. - + True True @@ -730,7 +736,7 @@ translated and supported by community. - + User with ID 1000 is administrator True True @@ -763,7 +769,7 @@ translated and supported by community. - + True True 30 @@ -778,7 +784,7 @@ translated and supported by community. - + True True end @@ -834,9 +840,10 @@ translated and supported by community. - + True False + 0 sha256 AIX md5 @@ -876,7 +883,7 @@ translated and supported by community. external in - + True True UserList @@ -888,6 +895,9 @@ translated and supported by community. UID + + 0 + @@ -896,6 +906,9 @@ translated and supported by community. Login + + 2 + @@ -904,6 +917,9 @@ translated and supported by community. Password + + 3 + @@ -912,6 +928,9 @@ translated and supported by community. User name + + 5 +