Standard libraries update

pull/7/head
parent 86f0997ea4
commit 82fe65376d

5
.gitignore vendored

@ -6,4 +6,7 @@ compile/
*# *#
terminal-commands/ terminal-commands/
source/ubl-cmake.h source/ubl-cmake.h
vgcore* vgcore*
.BUILD.md
.updatebuild.sh
.install.sh

@ -1 +0,0 @@
VERSION 1.3

@ -107,77 +107,29 @@ void on_toggle_button_switched(GtkToggleButton *self, GtkWidget *widget){
//functions //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){ void on_user_accept(GtkWidget *self, dictionary * dict){
user_window *window = yon_dictionary_get_data(dict->first,user_window*); 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,main_window*);
main_window *widgets = yon_dictionary_get_data(dict->first->next->next,main_window*);
GtkTreeIter iter; GtkTreeIter iter;
gtk_list_store_append(main_config.usersListStore,&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); int auto_id = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userUIDAutoCheck));
int system_id = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userUIDSystemCheck));
int unique_id = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userUIDUniqueCheck));
int user_id = atoi(gtk_entry_get_text(GTK_ENTRY(window->UserUIDEntry)));
const char *user_name = gtk_entry_get_text(GTK_ENTRY(window->userUserNameEntry));
const char *login = gtk_entry_get_text(GTK_ENTRY(window->userLoginEntry));
int default_password = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userPasswordDefaultCheck));
const char *password = gtk_entry_get_text(GTK_ENTRY(window->userPasswordEntry));
int own_group = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userPasswordDefaultCheck));
const char *groups = gtk_entry_get_text(GTK_ENTRY(window->userGroupsEntry));
const char *user_shell = NULL;
if (gtk_combo_box_get_active(GTK_COMBO_BOX(window->userShellCombo))>=0)
user_shell = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->userShellCombo));
int home_dir_create = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userPasswordDefaultCheck));
const char *home_dir = gtk_entry_get_text(GTK_ENTRY(window->userHomeFolderEntry));
int samba = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->userPasswordDefaultCheck));
const char *extra_options = gtk_entry_get_text(GTK_ENTRY(window->userExtraOptionsEntry));
gtk_list_store_set(main_config.usersListStore,&iter,0,user_id,1,auto_id,2,unique_id,3,system_id,4,user_name,5,login,6,password,7,default_password,8,groups,9,own_group,10,user_shell,11,home_dir,12,home_dir_create,-1);
// widgets->MainUserTree; // widgets->MainUserTree;
on_close_subwindow(self); on_close_subwindow(self);
} }
@ -252,47 +204,42 @@ void on_user_add(GtkWidget *self, main_window *widgets){
window->UserCancelButton = yon_gtk_builder_get_widget(builder,"UserCancelButton"); window->UserCancelButton = yon_gtk_builder_get_widget(builder,"UserCancelButton");
window->UserOkButton = yon_gtk_builder_get_widget(builder,"UserOkButton"); window->UserOkButton = yon_gtk_builder_get_widget(builder,"UserOkButton");
window->UserUIDAutoCheck = yon_gtk_builder_get_widget(builder,"userUIDAutoCheck"); window->userUIDSystemCheck = yon_gtk_builder_get_widget(builder,"userUIDSystemCheck");
window->userUIDAutoCheck = yon_gtk_builder_get_widget(builder,"userUIDAutoCheck");
window->userUIDUniqueCheck = yon_gtk_builder_get_widget(builder,"userUIDUniqueCheck");
window->UserUIDEntry = yon_gtk_builder_get_widget(builder,"userUIDEntry"); window->UserUIDEntry = yon_gtk_builder_get_widget(builder,"userUIDEntry");
window->userUserNameEntry = yon_gtk_builder_get_widget(builder,"userUserNameEntry"); window->userUserNameEntry = yon_gtk_builder_get_widget(builder,"userUserNameEntry");
window->userLoginEntry = yon_gtk_builder_get_widget(builder,"userLoginEntry"); window->userLoginEntry = yon_gtk_builder_get_widget(builder,"userLoginEntry");
window->userPasswordDefaultCheck = yon_gtk_builder_get_widget(builder,"userPasswordDefaultCheck"); window->userPasswordDefaultCheck = yon_gtk_builder_get_widget(builder,"userPasswordDefaultCheck");
window->userPasswordEntry = yon_gtk_builder_get_widget(builder,"userPasswordEntry"); window->userPasswordEntry = yon_gtk_builder_get_widget(builder,"userPasswordEntry");
window->userGroupsCheck = yon_gtk_builder_get_widget(builder,"userGroupsCheck");
window->userGroupsEntry = yon_gtk_builder_get_widget(builder,"userGroupsEntry"); window->userGroupsEntry = yon_gtk_builder_get_widget(builder,"userGroupsEntry");
window->userPasswordHashAlgorithmCombo = yon_gtk_builder_get_widget(builder,"userPasswordHashAlgorithmCombo"); window->UserAdditionalGroupsButton = yon_gtk_builder_get_widget(builder,"UserAdditionalGroupsButton");
window->UserAdditionalGroupsMultipleButton = yon_gtk_builder_get_widget(builder,"UserAdditionalGroupsMultipleButton");
window->userShellCombo = yon_gtk_builder_get_widget(builder,"userShellCombo");
window->userCreateHomeFolderCheck = yon_gtk_builder_get_widget(builder,"userCreateHomeFolderCheck");
window->userHomeFolderEntry = yon_gtk_builder_get_widget(builder,"userHomeFolderEntry");
window->userHomeFolderButton = yon_gtk_builder_get_widget(builder,"userHomeFolderButton");
window->userSyncSAMBACheck = yon_gtk_builder_get_widget(builder,"userSyncSAMBACheck"); window->userSyncSAMBACheck = yon_gtk_builder_get_widget(builder,"userSyncSAMBACheck");
window->userExtraOptionsEntry = yon_gtk_builder_get_widget(builder,"userExtraOptionsEntry"); 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; 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,"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); 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->UserCancelButton),"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->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->UserAdditionalGroupsButton),"clicked",G_CALLBACK(on_def_groups_open),window);
// 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->userUIDAutoCheck),"clicked",G_CALLBACK(on_toggle_button_switched),window->UserUIDEntry);
g_signal_connect(G_OBJECT(window->userUserNameEntry),"changed",G_CALLBACK(on_username_changed),dict); g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"clicked",G_CALLBACK(on_toggle_button_switched),window->userUIDUniqueCheck);
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); gtk_widget_show(window->Window);
} }
@ -304,34 +251,6 @@ 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 // standard functions
void config_init(){ void config_init(){
@ -426,12 +345,6 @@ main_window *setup_window(){
g_signal_connect(G_OBJECT(widgets->MainEditUserButton),"clicked",G_CALLBACK(on_user_edit),NULL); 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->MainDeleteUserButton),"clicked",G_CALLBACK(on_user_delete),NULL);
g_signal_connect(G_OBJECT(widgets->MainEditGroupsButton),"clicked",G_CALLBACK(on_def_groups_open),widgets); 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); gtk_widget_show(widgets->Window);

@ -65,6 +65,7 @@ typedef struct {
GtkWidget *Window; GtkWidget *Window;
GtkWidget *HatLabel; GtkWidget *HatLabel;
GtkWidget *PlugBox; GtkWidget *PlugBox;
GtkWidget *MainDefaultGroupsEntry;
GtkWidget *HeadOverlay; GtkWidget *HeadOverlay;
GtkWidget *HeadImage; GtkWidget *HeadImage;
@ -96,7 +97,6 @@ typedef struct {
GtkWidget *MainEditGroupsButton; GtkWidget *MainEditGroupsButton;
GtkWidget *MainDefaultGroupsEntry;
GtkWidget *MainDefaultUserNameEntry; GtkWidget *MainDefaultUserNameEntry;
GtkWidget *MainDefaultUserAdministratorCheck; GtkWidget *MainDefaultUserAdministratorCheck;
GtkWidget *MainDefaultPasswordEntry; GtkWidget *MainDefaultPasswordEntry;
@ -171,18 +171,31 @@ typedef struct {
typedef struct { typedef struct {
GtkWidget *Window; GtkWidget *Window;
GtkWidget *UserAdditionalGroupsButton;
GtkWidget *UserCancelButton; GtkWidget *UserCancelButton;
GtkWidget *UserOkButton; GtkWidget *UserOkButton;
GtkWidget *userGroupsEntry;
GtkWidget *UserUIDAutoCheck; GtkWidget *userUIDSystemCheck;
GtkWidget *userUIDAutoCheck;
GtkWidget *userUIDUniqueCheck;
GtkWidget *UserUIDEntry; GtkWidget *UserUIDEntry;
GtkWidget *userUserNameEntry; GtkWidget *userUserNameEntry;
GtkWidget *userLoginEntry; GtkWidget *userLoginEntry;
GtkWidget *userPasswordDefaultCheck; GtkWidget *userPasswordDefaultCheck;
GtkWidget *userPasswordEntry; GtkWidget *userPasswordEntry;
GtkWidget *userGroupsEntry;
GtkWidget *userPasswordHashAlgorithmCombo; GtkWidget *userGroupsCheck;
GtkWidget *UserAdditionalGroupsButton;
GtkWidget *UserAdditionalGroupsMultipleButton;
GtkWidget *userShellCombo;
GtkWidget *userCreateHomeFolderCheck;
GtkWidget *userHomeFolderEntry;
GtkWidget *userHomeFolderButton;
GtkWidget *userSyncSAMBACheck; GtkWidget *userSyncSAMBACheck;
GtkWidget *userExtraOptionsEntry; GtkWidget *userExtraOptionsEntry;
} user_window; } user_window;

File diff suppressed because it is too large Load Diff

@ -9,9 +9,13 @@
#include <dirent.h> #include <dirent.h>
#include <unistd.h> #include <unistd.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <sys/types.h>
#include <pwd.h>
#include <locale.h> #include <locale.h>
#include <gtk/gtk.h> #include <gtk/gtk.h>
#include <gtk/gtkx.h> #include <gtk/gtkx.h>
#include <vte/vte.h>
#include <time.h>
#include "../compile/ubl-cmake.h" #include "../compile/ubl-cmake.h"
#ifdef WEBKIT_FOUND #ifdef WEBKIT_FOUND
@ -24,7 +28,7 @@
#define new(type) malloc(sizeof(type)) #define new(type) malloc(sizeof(type))
#define new_arr(type,size) malloc(sizeof(type)*size) #define new_arr(type,size) malloc(sizeof(type)*size)
#define get_pkexec_user_command "getent passwd $PKEXEC_UID | cut -d: -f1" #define get_home_dir_command yon_char_unite("getent passwd \"",yon_ubl_root_user_get(),"\" | cut -d: -f6",NULL)
typedef enum typedef enum
{ {
@ -46,9 +50,11 @@ typedef struct dictionary
struct dictionary *prev; struct dictionary *prev;
struct dictionary *first; struct dictionary *first;
DICT_TYPE data_type; DICT_TYPE data_type;
int flag1;
} dictionary; } dictionary;
typedef struct apps typedef struct apps
{ {
char *Name; char *Name;
@ -62,13 +68,8 @@ typedef struct apps
typedef char** config_str; typedef char** config_str;
static dictionary *__yon__config__strings = NULL;
#define check_config if(__yon__config__strings&&__yon__config__strings->data_type==DICTIONARY_CHAR_TYPE)
#define config(key) yon_config_get_by_key(key) #define config(key) yon_config_get_by_key(key)
#define for_config dictionary temp = NULL; for_dictionary(temp,__yon__config__strings)
#define yon_remalloc(pointer, size) (!pointer) ? malloc(size) : realloc(pointer, size) #define yon_remalloc(pointer, size) (!pointer) ? malloc(size) : realloc(pointer, size)
// dictionary functions // dictionary functions
@ -122,6 +123,12 @@ void *yon_dictionary_free_all(dictionary *dictionary,void (data_manipulation)(vo
// char functions // char functions
#define yon_char_divide_search_self(str,find,delete_divider) {char *temp = str; str = yon_char_divide_search(str,find,delete_divider); free(temp);}
#define yon_char_is_empty(string) !(string&&strcmp(string,""))
int yon_char_find_last(char *source, char find);
char *yon_char_append(char *source, char *append); char *yon_char_append(char *source, char *append);
char *yon_char_new(char *chr); char *yon_char_new(char *chr);
@ -136,6 +143,10 @@ char *yon_char_divide_search(char *source, char *dividepos, int delete_divider);
char *yon_char_from_int(int int_to_convert); char *yon_char_from_int(int int_to_convert);
char *yon_char_from_float(float int_to_convert);
char *yon_char_from_long(long int_to_convert);
char *yon_char_replace(char *source, char *find, char*replace); char *yon_char_replace(char *source, char *find, char*replace);
char **yon_char_parse(char *parameters, int *size, char *divider); char **yon_char_parse(char *parameters, int *size, char *divider);
@ -144,12 +155,16 @@ char **yon_char_parsed_rip(char **char_string, int *size, int item_to_delete);
int yon_char_parsed_check_exist(char **parameters, int size, char *param); int yon_char_parsed_check_exist(char **parameters, int size, char *param);
int yon_char_parsed_check_repeats(char **parameters, int size, int *first_overlap, int *second_overlap);
int yon_char_find_count(char *source, char *find); int yon_char_find_count(char *source, char *find);
int yon_char_parsed_includes_char_parsed (config_str source, config_str to_check, int source_size, int check_size); int yon_char_parsed_includes_char_parsed (config_str source, config_str to_check, int source_size, int check_size);
config_str yon_char_parsed_new (int *size, ...); config_str yon_char_parsed_new (int *size, ...);
void yon_char_parsed_free(config_str source, int size);
void yon_char_parsed_copy(config_str *source, config_str *to_copy); void yon_char_parsed_copy(config_str *source, config_str *to_copy);
config_str yon_char_parsed_append(config_str parsed, int *size, char *string); config_str yon_char_parsed_append(config_str parsed, int *size, char *string);
@ -158,8 +173,14 @@ int yon_ubl_check_root();
char *yon_ubl_root_user_get(); char *yon_ubl_root_user_get();
char *yon_ubl_user_get_home_directory();
config_str yon_ubl_get_all_users(int *user_size);
// parsing functions // parsing functions
float yon_size_convert_automatic(int bytes, int *size);
config_str philos_list_user(int* size); config_str philos_list_user(int* size);
apps *yon_apps_scan_and_parse_desktops(int *sizef); apps *yon_apps_scan_and_parse_desktops(int *sizef);
@ -168,13 +189,34 @@ void yon_apps_sort(apps *applist, int size);
apps *yon_apps_get_by_name(apps *applist, char *name, int size); apps *yon_apps_get_by_name(apps *applist, char *name, int size);
config_str yon_file_open(char *file_path, int *size);
int yon_file_create(char *path, char *name, int rules);
int yon_file_create_full_path(char *path, int rules);
config_str yon_dir_get_contents(char *dir_path, int *size);
//config functions
#define ubconfig_save_command "ubconfig"
#define ubconfig_load_command "ubconfig --source"
typedef enum {
YON_CONFIG_LOCAL=0,
YON_CONFIG_GLOBAL,
YON_CONFIG_BOTH
} YON_CONFIG_TYPE;
config_str yon_config_load(char *command, int *str_len); config_str yon_config_load(char *command, int *str_len);
int yon_config_save(char *command); int yon_config_save_registered(char *path);
int yon_config_force_save_registered(char *path);
char *yon_config_get_parameter(config_str parameters, int size, char *param); char *yon_config_get_parameter(config_str parameters, int size, char *param);
int yon_config_load_register(char *command); int yon_config_load_register(YON_CONFIG_TYPE config_type,char *section,char *parameter, ...);
int yon_config_remove_by_key(char *key); int yon_config_remove_by_key(char *key);
@ -184,13 +226,15 @@ int yon_config_remove_element(char *key, char *deleted);
void *yon_config_get_by_key(char *key); void *yon_config_get_by_key(char *key);
void *yon_config_get_all_by_key(char *key, int *size);
char *yon_config_get_key_by_data(char *data); char *yon_config_get_key_by_data(char *data);
int yon_config_set(char *key, void *data); int yon_config_set(char *key, void *data);
int yon_config_clean(); int yon_config_clean();
void yon_config_register(char *key, void *data); void yon_config_register(char *key, char* config_section, void *data);
config_str yon_config_get_all(); config_str yon_config_get_all();
@ -210,6 +254,17 @@ void yon_terminal_integrated_start(GtkWidget *terminal, char* command, void *end
#endif #endif
enum YON_TYPE{
YON_TYPE_STRING,
YON_TYPE_STRING_LIST,
YON_TYPE_INT,
YON_TYPE_BOOLEAN,
YON_TYPE_OTHER
};
GtkWidget *yon_ubl_menu_item_about_new(char *buttonname);
GtkWidget *yon_ubl_menu_item_documentation_new(char *buttonname);
/**yon_gtk_builder_get_widget(builder, widget_name) /**yon_gtk_builder_get_widget(builder, widget_name)
* [EN] * [EN]
* Returns GtkWidget from GtkBuilder *[builder]. * Returns GtkWidget from GtkBuilder *[builder].
@ -230,10 +285,28 @@ void yon_window_config_setup(GtkWindow *window);
int yon_window_config_load(char *path); int yon_window_config_load(char *path);
config_str yon_window_config_get_section(char *section, gsize *size);
void yon_window_config_add_listener(GtkWidget *widget, char *param_name, char *widget_property, enum YON_TYPE val_type);
void yon_window_config_add_custom_parameter(char *param_name, char *section, void *tracked_value, enum YON_TYPE val_type);
void yon_window_config_erase_custom_parameter(char *param_name, char *section);
int yon_window_config_get_parameter(char *section, char *config_parameter, void *return_value, enum YON_TYPE type);
void yon_window_config_custom_window_setup(GtkWindow *window, char *window_name);
void yon_window_config_custom_window_get(GtkWindow *window, char *window_name);
void yon_window_config_custom_window_set(GtkWindow *window, char *window_name);
int yon_gtk_combo_box_fill(GtkWidget *combo, char **parameters,int size); int yon_gtk_combo_box_fill(GtkWidget *combo, char **parameters,int size);
int yon_gtk_combo_box_text_find(GtkWidget *combo_box, char *text_to_find); int yon_gtk_combo_box_text_find(GtkWidget *combo_box, char *text_to_find);
void yon_gtk_column_minimal_fixed_size_set(GtkTreeViewColumn *column);
int yon_gtk_icon_view_hide_empty(dictionary *icon_view_segment); int yon_gtk_icon_view_hide_empty(dictionary *icon_view_segment);
int yon_dictionary_gtk_pack_start_multiple_widgets(GtkBox *destination, gboolean expand, gboolean fill, int padding, ...); int yon_dictionary_gtk_pack_start_multiple_widgets(GtkBox *destination, gboolean expand, gboolean fill, int padding, ...);
@ -241,6 +314,10 @@ int yon_dictionary_gtk_pack_start_multiple_widgets(GtkBox *destination, gboolean
int yon_dictionary_gtk_pack_end_multiple_widgets(GtkBox *destination, gboolean expand, gboolean fill, int padding, ...); int yon_dictionary_gtk_pack_end_multiple_widgets(GtkBox *destination, gboolean expand, gboolean fill, int padding, ...);
void yon_gtk_widget_set_sensitive_from_toggle_button(GtkToggleButton *toggle, GtkWidget *target);
void yon_gtk_widget_set_sensitive_from_toggle_button_inversed(GtkToggleButton *toggle, GtkWidget *target);
void yon_gtk_widget_set_sensitive_from_combo_box(GtkComboBox *toggle, GtkWidget *target);
void yon_gtk_widget_set_sensitive_from_combo_box_inversed(GtkComboBox *toggle, GtkWidget *target);
typedef enum typedef enum
{ {
@ -288,6 +365,13 @@ int yon_ubl_status_box_setup(GtkWidget *icon, GtkWidget *box, GtkWidget *label);
*/ */
void yon_ubl_status_box_render(char *text, BACKGROUND_IMAGE_TYPE type); void yon_ubl_status_box_render(char *text, BACKGROUND_IMAGE_TYPE type);
void yon_ubl_status_highlight_incorrect(GtkWidget *widget);
void yon_ubl_status_list_store_highlight_incorrect(GtkListStore *list, GtkTreeIter *iter);
static int status_thread_busy;
void yon_ubl_status_box_spawn(GtkContainer *container,char *display_text, int timeout,BACKGROUND_IMAGE_TYPE type);
#ifdef __cplusplus #ifdef __cplusplus
/**yon_ubl_header_setup(overlay, head, image, imag_path) /**yon_ubl_header_setup(overlay, head, image, imag_path)

@ -0,0 +1,364 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 -->
<interface>
<requires lib="gtk+" version="3.24"/>
<object class="GtkImage" id="image1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.ubl-settings-usergroups.cancel-symbolic</property>
</object>
<object class="GtkImage" id="image2">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.ubl-settings-usergroups.accept-symbolic</property>
</object>
<object class="GtkApplicationWindow" id="helpConfirmationWindow">
<property name="width-request">600</property>
<property name="height-request">350</property>
<property name="can-focus">False</property>
<property name="resizable">False</property>
<property name="icon-name">com.ublinux.ubl-settings-usergroups</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-bottom">5</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkBox" id="StatusBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="label3">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-left">5</property>
<property name="margin-start">5</property>
<property name="label" translatable="yes">Default user name (if there's no another):</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="mainDefaultUserNameEntry">
<property name="visible">True</property>
<property name="can-focus">True</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="mainDefaultUserAdministratorCheck">
<property name="label" translatable="yes">User with ID 1000 is administrator</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-left">5</property>
<property name="margin-start">5</property>
<property name="label" translatable="yes">Default user password:</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkComboBoxText">
<property name="visible">True</property>
<property name="can-focus">False</property>
<items>
<item translatable="yes">Default</item>
<item translatable="yes">No password required</item>
<item translatable="yes">Set a password</item>
<item translatable="yes">Endrypted password</item>
</items>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="mainDefaultPasswordEntry">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="max-length">30</property>
<property name="visibility">False</property>
<property name="invisible-char">●</property>
<property name="input-purpose">password</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="label4">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Root user password:</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkComboBoxText">
<property name="visible">True</property>
<property name="can-focus">False</property>
<items>
<item translatable="yes">Default</item>
<item translatable="yes">No password required</item>
<item translatable="yes">Set a password</item>
<item translatable="yes">Encrypted password</item>
</items>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="mainRootPasswordEntry">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="max-length">30</property>
<property name="visibility">False</property>
<property name="invisible-char">●</property>
<property name="input-purpose">password</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-left">5</property>
<property name="margin-start">5</property>
<property name="label" translatable="yes">Password hash algorythm:</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkComboBoxText" id="mainPasswordHashCombo">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="active">0</property>
<items>
<item translatable="yes">md5</item>
<item translatable="yes">yescrypt</item>
<item translatable="yes">ghost-yescrypt</item>
<item translatable="yes">scrypt</item>
<item translatable="yes">bf</item>
<item translatable="yes">bcrypt</item>
<item translatable="yes">bcrypt-a</item>
<item translatable="yes">sha512crypt</item>
<item translatable="yes">sha256crypt</item>
<item translatable="yes">sunmd5</item>
<item translatable="yes">md5crypt</item>
<item translatable="yes">bsdicrypt</item>
<item translatable="yes">desctrypt</item>
<item translatable="yes">nt</item>
</items>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">4</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">end</property>
<property name="spacing">5</property>
<child>
<object class="GtkButton">
<property name="label" translatable="yes">Deny</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image1</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton">
<property name="label" translatable="yes">Accept</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image2</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
<property name="position">2</property>
</packing>
</child>
</object>
</child>
<child type="titlebar">
<object class="GtkHeaderBar" id="SettingsBar">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="show-close-button">True</property>
<child type="title">
<object class="GtkLabel" id="webHeaderNameLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Users and groups</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
</child>
</object>
</child>
</object>
<object class="GtkSizeGroup">
<widgets>
<widget name="label2"/>
<widget name="label4"/>
<widget name="label1"/>
</widgets>
</object>
</interface>

@ -0,0 +1,271 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 -->
<interface>
<requires lib="gtk+" version="3.24"/>
<object class="GtkApplicationWindow" id="CreateUserWindow">
<property name="can-focus">False</property>
<property name="resizable">False</property>
<property name="modal">True</property>
<property name="default-width">450</property>
<property name="icon-name">com.ublinux.ubl-settings-usergroups</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-left">5</property>
<property name="margin-right">5</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-top">5</property>
<property name="margin-bottom">5</property>
<property name="orientation">vertical</property>
<property name="spacing">10</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">UID:</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="userUIDAutoCheck">
<property name="label" translatable="yes">Automatically</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="userUIDEntry">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="placeholder-text" translatable="yes">1001</property>
<property name="input-purpose">number</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">4</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="label3">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Login:</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="userLoginEntry">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="placeholder-text" translatable="yes">login</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="label5">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Main group:</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="userGroupsEntry">
<property name="visible">True</property>
<property name="can-focus">True</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkButton" id="UserAdditionalGroupsButton">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image1</property>
<style>
<class name="thin"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">4</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">30</property>
<property name="homogeneous">True</property>
<child>
<object class="GtkButton" id="UserCancelButton">
<property name="label" translatable="yes">Cancel</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image4</property>
<style>
<class name="button"/>
</style>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="UserOkButton">
<property name="label" translatable="yes">Save</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image5</property>
<style>
<class name="button"/>
</style>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
<child type="titlebar">
<object class="GtkHeaderBar">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child type="title">
<object class="GtkLabel" id="userTitleNameLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Users and groups</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
</child>
</object>
</child>
</object>
<object class="GtkSizeGroup">
<widgets>
<widget name="label1"/>
<widget name="label2"/>
<widget name="label3"/>
<widget name="label4"/>
<widget name="label5"/>
<widget name="label7"/>
<widget name="label8"/>
<widget name="label9"/>
</widgets>
</object>
<object class="GtkImage" id="image1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">avatar-default-symbolic</property>
</object>
<object class="GtkImage" id="image4">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">process-stop-symbolic</property>
</object>
<object class="GtkImage" id="image5">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">emblem-ok-symbolic</property>
</object>
</interface>

@ -0,0 +1,211 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 -->
<interface>
<requires lib="gtk+" version="3.24"/>
<object class="GtkImage" id="image1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="stock">gtk-missing-image</property>
</object>
<object class="GtkImage" id="image2">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="stock">gtk-missing-image</property>
</object>
<object class="GtkListStore" id="liststore1"/>
<object class="GtkListStore" id="liststore2"/>
<object class="GtkApplicationWindow" id="helpConfirmationWindow">
<property name="width-request">800</property>
<property name="height-request">600</property>
<property name="can-focus">False</property>
<property name="resizable">False</property>
<property name="icon-name">com.ublinux.ubl-settings-usergroups</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-top">5</property>
<property name="margin-bottom">5</property>
<property name="spacing">5</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkButton">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image1</property>
<style>
<class name="thin"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image2</property>
<style>
<class name="thin"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkNotebook">
<property name="visible">True</property>
<property name="can-focus">True</property>
<child>
<object class="GtkTreeView">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="model">liststore2</property>
<child internal-child="selection">
<object class="GtkTreeSelection"/>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Blocked</property>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">UID</property>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Login</property>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Username</property>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Primary group</property>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Additional groups</property>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Home directory</property>
</object>
</child>
</object>
</child>
<child type="tab">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Users</property>
</object>
<packing>
<property name="tab-fill">False</property>
</packing>
</child>
<child>
<object class="GtkTreeView">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="model">liststore1</property>
<child internal-child="selection">
<object class="GtkTreeSelection"/>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">UID</property>
<child>
<object class="GtkCellRendererText"/>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Group</property>
<child>
<object class="GtkCellRendererText"/>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Group users</property>
<child>
<object class="GtkCellRendererText"/>
</child>
</object>
</child>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
<child type="tab">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Groups</property>
</object>
<packing>
<property name="position">1</property>
<property name="tab-fill">False</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
<child type="titlebar">
<object class="GtkHeaderBar" id="SettingsBar">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="show-close-button">True</property>
<child type="title">
<object class="GtkLabel" id="webHeaderNameLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Users and groups</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
</child>
</object>
</child>
</object>
</interface>

@ -2,11 +2,27 @@
<!-- Generated with glade 3.38.2 --> <!-- Generated with glade 3.38.2 -->
<interface domain="ubl-settings-usergroups"> <interface domain="ubl-settings-usergroups">
<requires lib="gtk+" version="3.24"/> <requires lib="gtk+" version="3.24"/>
<!-- interface-css-provider-path ubl-settings-usergroups.css -->
<object class="GtkImage" id="image1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">avatar-default-symbolic</property>
</object>
<object class="GtkImage" id="image10"> <object class="GtkImage" id="image10">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="icon-name">emblem-ok-symbolic</property> <property name="icon-name">emblem-ok-symbolic</property>
</object> </object>
<object class="GtkImage" id="image2">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">document-edit-symbolic</property>
</object>
<object class="GtkImage" id="image3">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="stock">gtk-missing-image</property>
</object>
<object class="GtkImage" id="image7"> <object class="GtkImage" id="image7">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
@ -54,6 +70,20 @@
<property name="position">0</property> <property name="position">0</property>
</packing> </packing>
</child> </child>
<child>
<object class="GtkCheckButton" id="userUIDSystemCheck">
<property name="label" translatable="yes">System</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child> <child>
<object class="GtkCheckButton" id="userUIDAutoCheck"> <object class="GtkCheckButton" id="userUIDAutoCheck">
<property name="label" translatable="yes">Automatically</property> <property name="label" translatable="yes">Automatically</property>
@ -65,7 +95,21 @@
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="position">1</property> <property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="userUIDUniqueCheck">
<property name="label" translatable="yes">Unique</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing> </packing>
</child> </child>
<child> <child>
@ -78,7 +122,7 @@
<packing> <packing>
<property name="expand">True</property> <property name="expand">True</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="position">2</property> <property name="position">4</property>
</packing> </packing>
</child> </child>
</object> </object>
@ -236,6 +280,20 @@
<property name="position">0</property> <property name="position">0</property>
</packing> </packing>
</child> </child>
<child>
<object class="GtkCheckButton" id="userGroupsCheck">
<property name="label" translatable="yes">Own groups</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child> <child>
<object class="GtkEntry" id="userGroupsEntry"> <object class="GtkEntry" id="userGroupsEntry">
<property name="visible">True</property> <property name="visible">True</property>
@ -244,20 +302,39 @@
<packing> <packing>
<property name="expand">True</property> <property name="expand">True</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="position">1</property> <property name="position">2</property>
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkButton" id="UserAdditionalGroupsButton"> <object class="GtkButton" id="UserAdditionalGroupsButton">
<property name="label" translatable="yes">Additional groups</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="receives-default">True</property> <property name="receives-default">True</property>
<property name="image">image1</property>
<style>
<class name="thin"/>
</style>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="position">2</property> <property name="position">3</property>
</packing>
</child>
<child>
<object class="GtkButton" id="UserAdditionalGroupsButton1">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image3</property>
<style>
<class name="thin"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">4</property>
</packing> </packing>
</child> </child>
</object> </object>
@ -273,10 +350,10 @@
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="spacing">5</property> <property name="spacing">5</property>
<child> <child>
<object class="GtkLabel" id="label6"> <object class="GtkLabel" id="label8">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="label" translatable="yes">Password hash algorythm:</property> <property name="label" translatable="yes">User shell:</property>
<property name="xalign">0</property> <property name="xalign">0</property>
</object> </object>
<packing> <packing>
@ -286,21 +363,14 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkComboBoxText" id="userPasswordHashAlgorithmCombo"> <object class="GtkComboBoxText" id="userShellCombo">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="active">0</property>
<items>
<item translatable="yes">sha256</item>
<item translatable="yes">AIX md5</item>
<item translatable="yes">md5 (apache variant)</item>
<item translatable="yes">md5</item>
</items>
</object> </object>
<packing> <packing>
<property name="expand">True</property> <property name="expand">True</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="position">1</property> <property name="position">2</property>
</packing> </packing>
</child> </child>
</object> </object>
@ -310,6 +380,72 @@
<property name="position">5</property> <property name="position">5</property>
</packing> </packing>
</child> </child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="label9">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Home directory:</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="userCreateHomeFolderCheck">
<property name="label" translatable="yes">Create</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="userHomeFolderEntry">
<property name="visible">True</property>
<property name="can-focus">True</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkButton" id="userHomeFolderButton">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image2</property>
<style>
<class name="thin"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">6</property>
</packing>
</child>
<child> <child>
<object class="GtkCheckButton" id="userSyncSAMBACheck"> <object class="GtkCheckButton" id="userSyncSAMBACheck">
<property name="label" translatable="yes">Sync with SAMBA user</property> <property name="label" translatable="yes">Sync with SAMBA user</property>
@ -321,7 +457,7 @@
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="position">6</property> <property name="position">8</property>
</packing> </packing>
</child> </child>
<child> <child>
@ -357,7 +493,7 @@
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="position">7</property> <property name="position">9</property>
</packing> </packing>
</child> </child>
</object> </object>
@ -371,47 +507,58 @@
<object class="GtkBox"> <object class="GtkBox">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="spacing">30</property>
<property name="homogeneous">True</property>
<child> <child>
<object class="GtkButton" id="UserCancelButton"> <object class="GtkBox">
<property name="label" translatable="yes">Cancel</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">False</property>
<property name="receives-default">True</property> <property name="spacing">5</property>
<property name="image">image7</property> <property name="homogeneous">True</property>
<style> <child>
<class name="button"/> <object class="GtkButton" id="UserCancelButton">
</style> <property name="label" translatable="yes">Cancel</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image7</property>
<style>
<class name="button"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="UserOkButton">
<property name="label" translatable="yes">Save</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image10</property>
<style>
<class name="button"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object> </object>
<packing> <packing>
<property name="expand">True</property> <property name="expand">False</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="pack-type">end</property>
<property name="position">0</property> <property name="position">0</property>
</packing> </packing>
</child> </child>
<child>
<object class="GtkButton" id="UserOkButton">
<property name="label" translatable="yes">Save</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image10</property>
<style>
<class name="button"/>
</style>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="pack-type">end</property>
<property name="position">1</property> <property name="position">1</property>
</packing> </packing>
</child> </child>
@ -443,6 +590,8 @@
<widget name="label4"/> <widget name="label4"/>
<widget name="label5"/> <widget name="label5"/>
<widget name="label7"/> <widget name="label7"/>
<widget name="label8"/>
<widget name="label9"/>
</widgets> </widgets>
</object> </object>
</interface> </interface>

@ -204,16 +204,28 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
<column type="gint"/> <column type="gint"/>
<!-- column-name uid_auto --> <!-- column-name uid_auto -->
<column type="gint"/> <column type="gint"/>
<!-- column-name uid_unique -->
<column type="gboolean"/>
<!-- column-name uid_system -->
<column type="gboolean"/>
<!-- column-name username -->
<column type="gchararray"/>
<!-- column-name login --> <!-- column-name login -->
<column type="gchararray"/> <column type="gchararray"/>
<!-- column-name password --> <!-- column-name password -->
<column type="gchararray"/> <column type="gchararray"/>
<!-- column-name password_auto --> <!-- column-name password_auto -->
<column type="gint"/> <column type="gint"/>
<!-- column-name username -->
<column type="gchararray"/>
<!-- column-name groups --> <!-- column-name groups -->
<column type="gchararray"/> <column type="gchararray"/>
<!-- column-name groups_own -->
<column type="gboolean"/>
<!-- column-name user_shell -->
<column type="gchararray"/>
<!-- column-name home_dir -->
<column type="gchararray"/>
<!-- column-name home_create -->
<column type="gboolean"/>
</columns> </columns>
</object> </object>
<object class="GtkImage" id="image1"> <object class="GtkImage" id="image1">
@ -221,6 +233,26 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="icon-name">value-increase-symbolic</property> <property name="icon-name">value-increase-symbolic</property>
</object> </object>
<object class="GtkImage" id="image10">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">value-increase-symbolic</property>
</object>
<object class="GtkImage" id="image11">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">value-increase-symbolic</property>
</object>
<object class="GtkImage" id="image12">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">value-increase-symbolic</property>
</object>
<object class="GtkImage" id="image13">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">value-increase-symbolic</property>
</object>
<object class="GtkImage" id="image2"> <object class="GtkImage" id="image2">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
@ -236,6 +268,246 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="icon-name">document-edit-symbolic</property> <property name="icon-name">document-edit-symbolic</property>
</object> </object>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="label4">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">5</property>
<property name="label" translatable="yes">Default user groups:</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="mainDefaultGroupsEntry">
<property name="visible">True</property>
<property name="can-focus">True</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="MainEditGroupsButton">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image4</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="label3">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">5</property>
<property name="label" translatable="yes">Default user name (if there's no another):</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="mainDefaultUserNameEntry">
<property name="visible">True</property>
<property name="can-focus">True</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="mainDefaultUserAdministratorCheck">
<property name="label" translatable="yes">User with ID 1000 is administrator</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">5</property>
<property name="label" translatable="yes">Default user password:</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="mainDefaultPasswordEntry">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="max-length">30</property>
<property name="visibility">False</property>
<property name="invisible-char">●</property>
<property name="input-purpose">password</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="mainRootPasswordEntry">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="halign">end</property>
<property name="max-length">30</property>
<property name="visibility">False</property>
<property name="invisible-char">●</property>
<property name="input-purpose">password</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Root user password:</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
<property name="position">3</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">5</property>
<property name="label" translatable="yes">Password hash algorythm:</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkComboBoxText" id="mainPasswordHashCombo">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="active">0</property>
<items>
<item translatable="yes">md5</item>
<item translatable="yes">yescrypt</item>
<item translatable="yes">ghost-yescrypt</item>
<item translatable="yes">scrypt</item>
<item translatable="yes">bf</item>
<item translatable="yes">bcrypt</item>
<item translatable="yes">bcrypt-a</item>
<item translatable="yes">sha512crypt</item>
<item translatable="yes">sha256crypt</item>
<item translatable="yes">sunmd5</item>
<item translatable="yes">md5crypt</item>
<item translatable="yes">bsdicrypt</item>
<item translatable="yes">desctrypt</item>
<item translatable="yes">nt</item>
</items>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">4</property>
</packing>
</child>
</object>
<object class="GtkSizeGroup" id="labels">
<widgets>
<widget name="label1"/>
<widget name="label2"/>
<widget name="label3"/>
<widget name="label4"/>
</widgets>
</object>
<object class="GtkImage" id="image8"> <object class="GtkImage" id="image8">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
@ -640,7 +912,6 @@ translated and supported by community.</property>
<property name="margin-bottom">5</property> <property name="margin-bottom">5</property>
<property name="hexpand">True</property> <property name="hexpand">True</property>
<property name="vexpand">True</property> <property name="vexpand">True</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property> <property name="spacing">5</property>
<child> <child>
<object class="GtkBox"> <object class="GtkBox">
@ -649,48 +920,14 @@ translated and supported by community.</property>
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
<property name="spacing">5</property> <property name="spacing">5</property>
<child> <child>
<object class="GtkBox"> <object class="GtkButton" id="MainAddUserButton4">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">True</property>
<property name="spacing">5</property> <property name="receives-default">True</property>
<child> <property name="image">image12</property>
<object class="GtkLabel" id="label4"> <style>
<property name="visible">True</property> <class name="thin"/>
<property name="can-focus">False</property> </style>
<property name="margin-start">5</property>
<property name="label" translatable="yes">Default user groups:</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="mainDefaultGroupsEntry">
<property name="visible">True</property>
<property name="can-focus">True</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="MainEditGroupsButton">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image4</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
@ -699,35 +936,14 @@ translated and supported by community.</property>
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkBox"> <object class="GtkButton" id="MainAddUserButton3">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">True</property>
<property name="spacing">5</property> <property name="receives-default">True</property>
<child> <property name="image">image11</property>
<object class="GtkLabel" id="label3"> <style>
<property name="visible">True</property> <class name="thin"/>
<property name="can-focus">False</property> </style>
<property name="margin-start">5</property>
<property name="label" translatable="yes">Default user name (if there's no another):</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="mainDefaultUserNameEntry">
<property name="visible">True</property>
<property name="can-focus">True</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
@ -736,12 +952,14 @@ translated and supported by community.</property>
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkCheckButton" id="mainDefaultUserAdministratorCheck"> <object class="GtkButton" id="DefaultGroupsButton">
<property name="label" translatable="yes">User with ID 1000 is administrator</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="receives-default">False</property> <property name="receives-default">True</property>
<property name="draw-indicator">True</property> <property name="image">image10</property>
<style>
<class name="thin"/>
</style>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
@ -750,69 +968,14 @@ translated and supported by community.</property>
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkBox"> <object class="GtkButton" id="AddButton">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">True</property>
<property name="spacing">5</property> <property name="receives-default">True</property>
<child> <property name="image">image1</property>
<object class="GtkLabel" id="label2"> <style>
<property name="visible">True</property> <class name="thin"/>
<property name="can-focus">False</property> </style>
<property name="margin-start">5</property>
<property name="label" translatable="yes">Default user password:</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="mainDefaultPasswordEntry">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="max-length">30</property>
<property name="visibility">False</property>
<property name="invisible-char">●</property>
<property name="input-purpose">password</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="mainRootPasswordEntry">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="halign">end</property>
<property name="max-length">30</property>
<property name="visibility">False</property>
<property name="invisible-char">●</property>
<property name="input-purpose">password</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Root user password:</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
<property name="position">3</property>
</packing>
</child>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
@ -821,42 +984,14 @@ translated and supported by community.</property>
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkBox"> <object class="GtkButton" id="EditButton">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">True</property>
<property name="spacing">5</property> <property name="receives-default">True</property>
<child> <property name="image">image2</property>
<object class="GtkLabel" id="label1"> <style>
<property name="visible">True</property> <class name="thin"/>
<property name="can-focus">False</property> </style>
<property name="margin-start">5</property>
<property name="label" translatable="yes">Password hash algorythm:</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkComboBoxText" id="mainPasswordHashCombo">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="active">0</property>
<items>
<item translatable="yes">sha256</item>
<item translatable="yes">AIX md5</item>
<item translatable="yes">md5 (apache variant)</item>
<item translatable="yes">md5</item>
</items>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
@ -864,6 +999,38 @@ translated and supported by community.</property>
<property name="position">4</property> <property name="position">4</property>
</packing> </packing>
</child> </child>
<child>
<object class="GtkButton" id="RemoveButton">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image3</property>
<style>
<class name="thin"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">5</property>
</packing>
</child>
<child>
<object class="GtkButton" id="UpdateButton">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image13</property>
<style>
<class name="thin"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">6</property>
</packing>
</child>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
@ -872,138 +1039,222 @@ translated and supported by community.</property>
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkBox"> <object class="GtkNotebook">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">True</property>
<property name="spacing">5</property>
<child> <child>
<object class="GtkScrolledWindow"> <object class="GtkBox">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">False</property>
<property name="hscrollbar-policy">external</property> <property name="margin-start">5</property>
<property name="shadow-type">in</property> <property name="margin-end">5</property>
<property name="margin-top">5</property>
<property name="margin-bottom">5</property>
<property name="spacing">5</property>
<child> <child>
<object class="GtkTreeView" id="mainUserTree"> <object class="GtkScrolledWindow">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="model">UserList</property> <property name="hscrollbar-policy">external</property>
<child internal-child="selection"> <property name="shadow-type">in</property>
<object class="GtkTreeSelection"/>
</child>
<child> <child>
<object class="GtkTreeViewColumn"> <object class="GtkTreeView" id="mainUserTree">
<property name="title" translatable="yes">UID</property> <property name="visible">True</property>
<property name="can-focus">True</property>
<property name="model">UserList</property>
<property name="search-column">0</property>
<child internal-child="selection">
<object class="GtkTreeSelection"/>
</child>
<child> <child>
<object class="GtkCellRendererText"/> <object class="GtkTreeViewColumn">
<attributes> <property name="title" translatable="yes">Block</property>
<attribute name="text">0</attribute> </object>
</attributes>
</child> </child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Login</property>
<child> <child>
<object class="GtkCellRendererText"/> <object class="GtkTreeViewColumn">
<attributes> <property name="title" translatable="yes">UID</property>
<attribute name="text">2</attribute> <child>
</attributes> <object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
</child> </child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Password</property>
<child> <child>
<object class="GtkCellRendererText"/> <object class="GtkTreeViewColumn">
<attributes> <property name="title" translatable="yes">Login</property>
<attribute name="text">3</attribute> <child>
</attributes> <object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">5</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">User name</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">4</attribute>
</attributes>
</child>
</object>
</child> </child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">User name</property>
<child> <child>
<object class="GtkCellRendererText"/> <object class="GtkTreeViewColumn">
<attributes> <property name="title" translatable="yes">Main group</property>
<attribute name="text">5</attribute> <child>
</attributes> <object class="GtkCellRendererText"/>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Additional groups</property>
<child>
<object class="GtkCellRendererText"/>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Additional parameters</property>
<child>
<object class="GtkCellRendererText"/>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Password status</property>
</object>
</child> </child>
</object> </object>
</child> </child>
</object> </object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child> </child>
</object> </object>
</child>
<child type="tab">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Users</property>
</object>
<packing> <packing>
<property name="expand">True</property> <property name="tab-fill">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkBox"> <object class="GtkBox">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="orientation">vertical</property> <property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-top">5</property>
<property name="margin-bottom">5</property>
<property name="spacing">5</property> <property name="spacing">5</property>
<child> <child>
<object class="GtkButton" id="MainAddUserButton"> <object class="GtkScrolledWindow">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="receives-default">True</property> <property name="hscrollbar-policy">external</property>
<property name="image">image1</property> <property name="shadow-type">in</property>
<style> <child>
<class name="thin"/> <object class="GtkTreeView" id="mainUserTree1">
</style> <property name="visible">True</property>
<property name="can-focus">True</property>
<property name="model">UserList</property>
<property name="search-column">0</property>
<child internal-child="selection">
<object class="GtkTreeSelection"/>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">GID</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Group name</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">2</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Group users</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">3</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Additional parameters</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">5</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Password status</property>
<child>
<object class="GtkCellRendererToggle"/>
</child>
</object>
</child>
</object>
</child>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">True</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="position">0</property> <property name="position">0</property>
</packing> </packing>
</child> </child>
<child>
<object class="GtkButton" id="MainEditUserButton">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image2</property>
<style>
<class name="thin"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="MainDeleteUserButton">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image3</property>
<style>
<class name="thin"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object> </object>
<packing> <packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property> <property name="position">1</property>
</packing> </packing>
</child> </child>
<child type="tab">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Groups</property>
</object>
<packing>
<property name="position">1</property>
<property name="tab-fill">False</property>
</packing>
</child>
</object> </object>
<packing> <packing>
<property name="expand">True</property> <property name="expand">True</property>
@ -1197,12 +1448,4 @@ translated and supported by community.</property>
</object> </object>
</child> </child>
</object> </object>
<object class="GtkSizeGroup" id="labels">
<widgets>
<widget name="label1"/>
<widget name="label2"/>
<widget name="label3"/>
<widget name="label4"/>
</widgets>
</object>
</interface> </interface>

Loading…
Cancel
Save