|
|
|
@ -127,20 +127,50 @@ int yon_size_get_int_from_letter(char size){
|
|
|
|
|
|
|
|
|
|
|
|
//functions
|
|
|
|
//functions
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void yon_polkit_authorized_action(GCallback *func){
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void yon_logs_custom_save(main_window *widgets){
|
|
|
|
|
|
|
|
GtkTreeIter iter;
|
|
|
|
|
|
|
|
char *name;
|
|
|
|
|
|
|
|
char *description;
|
|
|
|
|
|
|
|
char *paths;
|
|
|
|
|
|
|
|
int standard;
|
|
|
|
|
|
|
|
int standard_paths;
|
|
|
|
|
|
|
|
int size=0;
|
|
|
|
|
|
|
|
int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->list),&iter);
|
|
|
|
|
|
|
|
char *final_strings=NULL;
|
|
|
|
|
|
|
|
for (;valid;valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->list),&iter)){
|
|
|
|
|
|
|
|
gtk_tree_model_get(GTK_TREE_MODEL(widgets->list),&iter,0,&name,1,&paths,2,&description,3,&standard,4,&standard_paths,-1);
|
|
|
|
|
|
|
|
if (standard!=1){
|
|
|
|
|
|
|
|
for (int i=0;i<standard_paths;i++)
|
|
|
|
|
|
|
|
free(yon_char_divide_search(paths,",",-1));
|
|
|
|
|
|
|
|
final_strings = yon_char_unite(final_strings?yon_char_append(final_strings,"\n"):"",name?name:"",";",paths?paths:"",";",description?description:"",NULL);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
FILE *fl = fopen(custom_logs_saving_file_path,"w");
|
|
|
|
|
|
|
|
if (final_strings)
|
|
|
|
|
|
|
|
fputs(final_strings,fl);
|
|
|
|
|
|
|
|
fclose(fl);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void update_loaded_logrotate(){
|
|
|
|
void update_loaded_logrotate(){
|
|
|
|
int size=0;
|
|
|
|
int size=0;
|
|
|
|
gtk_list_store_clear(main_config.logrotate_list);
|
|
|
|
gtk_list_store_clear(main_config.logrotate_list);
|
|
|
|
GtkTreeIter iter;
|
|
|
|
GtkTreeIter iter;
|
|
|
|
config_str loaded = yon_config_get_all_by_key("LOGROTATE[",&size);
|
|
|
|
config_str loaded = yon_config_get_all_by_key("LOGROTATE[",&size);
|
|
|
|
char *desc;
|
|
|
|
char *desc;
|
|
|
|
|
|
|
|
char *name;
|
|
|
|
for (int i=0;i<size;i++){
|
|
|
|
for (int i=0;i<size;i++){
|
|
|
|
char *paths = yon_char_divide_search(loaded[i],"=",-1);
|
|
|
|
char *paths = yon_char_divide_search(loaded[i],"=",-1);
|
|
|
|
yon_char_divide(paths,strlen("LOGROTATE"));
|
|
|
|
yon_char_divide(paths,strlen("LOGROTATE"));
|
|
|
|
yon_char_divide_search_self(paths,"]",-1);
|
|
|
|
yon_char_divide_search_self(paths,"]",-1);
|
|
|
|
yon_window_config_get_parameter("description",paths,&desc,YON_TYPE_STRING);
|
|
|
|
yon_window_config_get_parameter("description",paths,&desc,YON_TYPE_STRING);
|
|
|
|
|
|
|
|
yon_window_config_get_parameter("render_name",paths,&name,YON_TYPE_STRING);
|
|
|
|
paths = yon_char_replace(paths,",","\n");
|
|
|
|
paths = yon_char_replace(paths,",","\n");
|
|
|
|
gtk_list_store_append(main_config.logrotate_list,&iter);
|
|
|
|
gtk_list_store_append(main_config.logrotate_list,&iter);
|
|
|
|
gtk_list_store_set(main_config.logrotate_list,&iter,1,paths,2,desc ? desc : "",-1);
|
|
|
|
gtk_list_store_set(main_config.logrotate_list,&iter,0,name,1,paths,2,desc ? desc : "",-1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@ -849,6 +879,7 @@ void on_logrotate_save(GtkWidget *self, dictionary *dict){
|
|
|
|
GtkTreeIter iter;
|
|
|
|
GtkTreeIter iter;
|
|
|
|
yon_config_register(LOGROTATE(paths),"logging",commandline);
|
|
|
|
yon_config_register(LOGROTATE(paths),"logging",commandline);
|
|
|
|
yon_window_config_add_custom_parameter(paths,"description",yon_char_new((char*)gtk_entry_get_text(GTK_ENTRY(window->LogDescriptionEntry))),YON_TYPE_STRING);
|
|
|
|
yon_window_config_add_custom_parameter(paths,"description",yon_char_new((char*)gtk_entry_get_text(GTK_ENTRY(window->LogDescriptionEntry))),YON_TYPE_STRING);
|
|
|
|
|
|
|
|
yon_window_config_add_custom_parameter(paths,"render_name",yon_char_new((char*)gtk_entry_get_text(GTK_ENTRY(window->LogNameEntry))),YON_TYPE_STRING);
|
|
|
|
GtkTreeModel *model = GTK_TREE_MODEL(main_config.logrotate_list);
|
|
|
|
GtkTreeModel *model = GTK_TREE_MODEL(main_config.logrotate_list);
|
|
|
|
if (!dialog||!gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(dialog->MainTree)),&model,&iter)){
|
|
|
|
if (!dialog||!gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(dialog->MainTree)),&model,&iter)){
|
|
|
|
gtk_list_store_append(main_config.logrotate_list,&iter);
|
|
|
|
gtk_list_store_append(main_config.logrotate_list,&iter);
|
|
|
|
@ -1430,7 +1461,7 @@ void on_journald_save(GtkWidget *self, journald_window *window){
|
|
|
|
char *TTY=NULL;
|
|
|
|
char *TTY=NULL;
|
|
|
|
if (consoleforwardactive == 1){
|
|
|
|
if (consoleforwardactive == 1){
|
|
|
|
confor = "yes";
|
|
|
|
confor = "yes";
|
|
|
|
TTY = (char*)gtk_entry_get_text(GTK_ENTRY(window->RedirectTTYEntry));
|
|
|
|
TTY = yon_char_new((char*)gtk_entry_get_text(GTK_ENTRY(window->RedirectTTYEntry)));
|
|
|
|
if (yon_char_is_empty(TTY))
|
|
|
|
if (yon_char_is_empty(TTY))
|
|
|
|
consoleforwardactive=0;
|
|
|
|
consoleforwardactive=0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -1637,12 +1668,16 @@ void on_log_save(GtkWidget *self, dictionary *dict){
|
|
|
|
GtkTreeIter iter;
|
|
|
|
GtkTreeIter iter;
|
|
|
|
if (!gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->MainTree)),&model,&iter)){
|
|
|
|
if (!gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->MainTree)),&model,&iter)){
|
|
|
|
gtk_list_store_append(widgets->list,&iter);
|
|
|
|
gtk_list_store_append(widgets->list,&iter);
|
|
|
|
|
|
|
|
int stat;
|
|
|
|
|
|
|
|
gtk_tree_model_get(GTK_TREE_MODEL(widgets->list),&iter,3,&stat,-1);
|
|
|
|
|
|
|
|
gtk_list_store_set(widgets->list,&iter,3,stat==0?1:stat==1?2:2,-1);
|
|
|
|
yon_window_config_custom_window_set(GTK_WINDOW(window->MainWindow),"AddWindow");
|
|
|
|
yon_window_config_custom_window_set(GTK_WINDOW(window->MainWindow),"AddWindow");
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
yon_window_config_custom_window_set(GTK_WINDOW(window->MainWindow),"EditWindow");
|
|
|
|
yon_window_config_custom_window_set(GTK_WINDOW(window->MainWindow),"EditWindow");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
gtk_list_store_set(widgets->list,&iter,0,name,1,pathse,2,&desc ? desc : "",-1);
|
|
|
|
gtk_list_store_set(widgets->list,&iter,0,name,1,pathse,2,&desc ? desc : "",-1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
yon_logs_custom_save(widgets);
|
|
|
|
on_close_subwindow(self,NULL);
|
|
|
|
on_close_subwindow(self,NULL);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@ -1975,6 +2010,57 @@ void on_enable_disable_clicked(GtkButton *self, main_window *widgets){
|
|
|
|
|
|
|
|
|
|
|
|
// standard functions
|
|
|
|
// standard functions
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void on_permissions_changed(){
|
|
|
|
|
|
|
|
if (g_permission_get_allowed(main_config.permissions)){
|
|
|
|
|
|
|
|
PolkitAuthority *auth = polkit_authority_get_sync(NULL,NULL);
|
|
|
|
|
|
|
|
PolkitSubject *subject;
|
|
|
|
|
|
|
|
pid_t parent_pid;
|
|
|
|
|
|
|
|
parent_pid = getppid ();
|
|
|
|
|
|
|
|
subject = polkit_unix_process_new_for_owner (parent_pid,0,getuid());
|
|
|
|
|
|
|
|
PolkitDetails *dets = polkit_details_new();
|
|
|
|
|
|
|
|
if (polkit_authority_check_authorization_sync(auth,subject,"com.ublinux.ubl-settings-logging",dets,POLKIT_CHECK_AUTHORIZATION_FLAGS_ALLOW_USER_INTERACTION,NULL,NULL)){
|
|
|
|
|
|
|
|
printf("Allowed\n");
|
|
|
|
|
|
|
|
char *command[] = {"/bin/pkexec","/bin/echo","1", NULL};
|
|
|
|
|
|
|
|
gchar *standard_output = NULL;
|
|
|
|
|
|
|
|
gchar *standard_error = NULL;
|
|
|
|
|
|
|
|
gint exit_status = -1; // Инициализируем переменную для статуса выхода
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
GError *error = NULL;
|
|
|
|
|
|
|
|
gboolean success = g_spawn_sync(
|
|
|
|
|
|
|
|
NULL,
|
|
|
|
|
|
|
|
command,
|
|
|
|
|
|
|
|
NULL,
|
|
|
|
|
|
|
|
G_SPAWN_DEFAULT,
|
|
|
|
|
|
|
|
NULL,
|
|
|
|
|
|
|
|
NULL,
|
|
|
|
|
|
|
|
&standard_output,
|
|
|
|
|
|
|
|
&standard_error,
|
|
|
|
|
|
|
|
NULL,
|
|
|
|
|
|
|
|
&error
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (success) {
|
|
|
|
|
|
|
|
if (standard_output != NULL) {
|
|
|
|
|
|
|
|
printf("Output: %s\n", standard_output);
|
|
|
|
|
|
|
|
g_free(standard_output);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (standard_error != NULL) {
|
|
|
|
|
|
|
|
printf("Error output: %s\n", standard_error);
|
|
|
|
|
|
|
|
g_free(standard_error);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
printf("Exit status: %d\n", exit_status);
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
g_printerr("Error running command: %s\n", error->message);
|
|
|
|
|
|
|
|
g_error_free(error);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
if (g_permission_get_can_acquire(main_config.permissions)){
|
|
|
|
|
|
|
|
g_permission_acquire(main_config.permissions,NULL,NULL);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void config_init(){
|
|
|
|
void config_init(){
|
|
|
|
main_config.always_open_documentation=0;
|
|
|
|
main_config.always_open_documentation=0;
|
|
|
|
main_config.win_height=0;
|
|
|
|
main_config.win_height=0;
|
|
|
|
@ -1991,6 +2077,22 @@ void config_init(){
|
|
|
|
main_config.lock_save_local=0;
|
|
|
|
main_config.lock_save_local=0;
|
|
|
|
main_config.logrotate_list = gtk_list_store_new(3,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING);
|
|
|
|
main_config.logrotate_list = gtk_list_store_new(3,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING);
|
|
|
|
main_config.logrotate_apps_list = gtk_list_store_new(3,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING);
|
|
|
|
main_config.logrotate_apps_list = gtk_list_store_new(3,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PolkitSubject *subject = NULL;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pid_t parent_pid;
|
|
|
|
|
|
|
|
parent_pid = getppid ();
|
|
|
|
|
|
|
|
if (parent_pid == 1)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
g_printerr ("Parent process was reaped by init(1)\n");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
subject = polkit_unix_process_new_for_owner (parent_pid,0,getuid());
|
|
|
|
|
|
|
|
main_config.permissions = polkit_permission_new_sync(
|
|
|
|
|
|
|
|
"com.ublinux.ubl-settings-logging",
|
|
|
|
|
|
|
|
subject, // Пользователь (текущий пользователь)
|
|
|
|
|
|
|
|
NULL, // Опции (NULL, если не требуются)
|
|
|
|
|
|
|
|
NULL);
|
|
|
|
|
|
|
|
g_signal_connect(G_OBJECT(main_config.permissions),"notify::allowed",G_CALLBACK(on_permissions_changed),NULL);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
main_window *setup_window(){
|
|
|
|
main_window *setup_window(){
|
|
|
|
@ -2037,8 +2139,12 @@ main_window *setup_window(){
|
|
|
|
widgets->list = GTK_LIST_STORE(gtk_builder_get_object(builder,"liststore1"));
|
|
|
|
widgets->list = GTK_LIST_STORE(gtk_builder_get_object(builder,"liststore1"));
|
|
|
|
widgets->ServicesList = GTK_LIST_STORE(gtk_builder_get_object(builder,"ServicesList"));
|
|
|
|
widgets->ServicesList = GTK_LIST_STORE(gtk_builder_get_object(builder,"ServicesList"));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
widgets->UpgradePermissionsMenuItem = yon_gtk_builder_get_widget(builder,"UpgradePermissionsMenuItem");
|
|
|
|
|
|
|
|
widgets->PermissionsLock = yon_gtk_builder_get_widget(builder,"PermissionsLock");
|
|
|
|
|
|
|
|
|
|
|
|
widgets->MainTree = yon_gtk_builder_get_widget(builder,"MainTree");
|
|
|
|
widgets->MainTree = yon_gtk_builder_get_widget(builder,"MainTree");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
gtk_lock_button_set_permission(GTK_LOCK_BUTTON(widgets->PermissionsLock),main_config.permissions);
|
|
|
|
gtk_window_set_title(GTK_WINDOW(widgets->Window),TITLE_LABEL);
|
|
|
|
gtk_window_set_title(GTK_WINDOW(widgets->Window),TITLE_LABEL);
|
|
|
|
|
|
|
|
|
|
|
|
GtkWidget *menu = yon_gtk_builder_get_widget(builder,"menu2");
|
|
|
|
GtkWidget *menu = yon_gtk_builder_get_widget(builder,"menu2");
|
|
|
|
@ -2137,6 +2243,34 @@ main_window *setup_window(){
|
|
|
|
yon_char_divide_search_self(main_config.groups[i],":",-1);
|
|
|
|
yon_char_divide_search_self(main_config.groups[i],":",-1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
size =0;
|
|
|
|
|
|
|
|
config_str custom_watchers = yon_file_open(custom_logs_saving_file_path,&size);
|
|
|
|
|
|
|
|
if (custom_watchers){
|
|
|
|
|
|
|
|
GtkTreeIter itar;
|
|
|
|
|
|
|
|
for (int i=0;i<size;i++){
|
|
|
|
|
|
|
|
int cur_size=0;
|
|
|
|
|
|
|
|
config_str cur_watcher = yon_char_parse(custom_watchers[i],&cur_size,";");
|
|
|
|
|
|
|
|
if (cur_watcher){
|
|
|
|
|
|
|
|
char *cur_name;
|
|
|
|
|
|
|
|
int found=0;
|
|
|
|
|
|
|
|
int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->list),&iter);
|
|
|
|
|
|
|
|
for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->list),&iter)){
|
|
|
|
|
|
|
|
gtk_tree_model_get(GTK_TREE_MODEL(widgets->list),&iter,0,&cur_name,-1);
|
|
|
|
|
|
|
|
if (!strcmp(cur_name,cur_watcher[0])){
|
|
|
|
|
|
|
|
found=1;
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!found)
|
|
|
|
|
|
|
|
gtk_list_store_append(widgets->list,&iter);
|
|
|
|
|
|
|
|
gtk_list_store_set(widgets->list,&iter,0,cur_watcher[0],1,cur_watcher[1],2,cur_watcher[2],-1);
|
|
|
|
|
|
|
|
yon_char_parsed_free(cur_watcher,cur_size);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
FILE *fl = fopen(custom_logs_saving_file_path,"w");
|
|
|
|
|
|
|
|
fclose(fl);
|
|
|
|
|
|
|
|
}
|
|
|
|
/* Widget registration for config monitoring | Регистрация виджетов для мониторинга конфига */
|
|
|
|
/* Widget registration for config monitoring | Регистрация виджетов для мониторинга конфига */
|
|
|
|
// yon_window_config_add_custom_parameter(widgets->HeadInfoLabel,"head-text","label",YON_TYPE_STRING);
|
|
|
|
// yon_window_config_add_custom_parameter(widgets->HeadInfoLabel,"head-text","label",YON_TYPE_STRING);
|
|
|
|
|
|
|
|
|
|
|
|
@ -2157,6 +2291,8 @@ main_window *setup_window(){
|
|
|
|
g_signal_connect(G_OBJECT(widgets->LoadGlobalMenuItem),"activate",G_CALLBACK(on_load_global),NULL);
|
|
|
|
g_signal_connect(G_OBJECT(widgets->LoadGlobalMenuItem),"activate",G_CALLBACK(on_load_global),NULL);
|
|
|
|
g_signal_connect(G_OBJECT(widgets->LoadLocalMenuItem),"activate",G_CALLBACK(on_load_local),NULL);
|
|
|
|
g_signal_connect(G_OBJECT(widgets->LoadLocalMenuItem),"activate",G_CALLBACK(on_load_local),NULL);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
g_signal_connect(G_OBJECT(widgets->UpgradePermissionsMenuItem),"activate",G_CALLBACK(on_permissions_changed),NULL);
|
|
|
|
|
|
|
|
|
|
|
|
g_signal_connect(G_OBJECT(widgets->MainTree),"cursor-changed",G_CALLBACK(on_main_window_tree_selection_changed),widgets);
|
|
|
|
g_signal_connect(G_OBJECT(widgets->MainTree),"cursor-changed",G_CALLBACK(on_main_window_tree_selection_changed),widgets);
|
|
|
|
g_signal_connect(G_OBJECT(widgets->ServicesTree),"cursor-changed",G_CALLBACK(on_main_window_services_tree_selection_changed),widgets);
|
|
|
|
g_signal_connect(G_OBJECT(widgets->ServicesTree),"cursor-changed",G_CALLBACK(on_main_window_services_tree_selection_changed),widgets);
|
|
|
|
|
|
|
|
|
|
|
|
@ -2167,10 +2303,11 @@ main_window *setup_window(){
|
|
|
|
return widgets;
|
|
|
|
return widgets;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int main(int argc, char *argv[]){
|
|
|
|
int main(int argc, char *argv[], char **envp){
|
|
|
|
local=setlocale(LC_ALL, "");
|
|
|
|
local=setlocale(LC_ALL, "");
|
|
|
|
textdomain (LocaleName);
|
|
|
|
textdomain (LocaleName);
|
|
|
|
config_init();
|
|
|
|
config_init();
|
|
|
|
|
|
|
|
main_config.envp=envp;
|
|
|
|
int option_index=0;
|
|
|
|
int option_index=0;
|
|
|
|
int show_help=0;
|
|
|
|
int show_help=0;
|
|
|
|
int debug_mode=0;
|
|
|
|
int debug_mode=0;
|
|
|
|
@ -2239,9 +2376,9 @@ int main(int argc, char *argv[]){
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (getuid()!=0){
|
|
|
|
if (getuid()!=0){
|
|
|
|
main_config.lock_load_global=1;
|
|
|
|
// main_config.lock_load_global=1;
|
|
|
|
main_config.lock_save_global=1;
|
|
|
|
// main_config.lock_save_global=1;
|
|
|
|
main_config.lock_save_local=1;
|
|
|
|
// main_config.lock_save_local=1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
gtk_init(&argc,&argv);
|
|
|
|
gtk_init(&argc,&argv);
|
|
|
|
|
|
|
|
|
|
|
|
|