pull/62/head
parent b656a8b2a2
commit 2f42349905

@ -13,6 +13,11 @@ include_directories(${VTE291_INCLUDE_DIRS})
link_directories(${VTE291_LIBRARY_DIRS}) link_directories(${VTE291_LIBRARY_DIRS})
add_definitions(${VTE291_CFLAGS_OTHER}) add_definitions(${VTE291_CFLAGS_OTHER})
pkg_check_modules(POLKIT REQUIRED polkit-agent-1)
include_directories(${POLKIT_INCLUDE_DIRS})
link_directories(${POLKIT_LIBRARY_DIRS})
add_definitions(${POLKIT_CFLAGS_OTHER})
find_library(WEBKIT_LIBRARIES_FOUND webkit2gtk-4.0 webkit2gtk-web-extension-4.0) find_library(WEBKIT_LIBRARIES_FOUND webkit2gtk-4.0 webkit2gtk-web-extension-4.0)
option(WEBKIT_FOUND "No" OFF) option(WEBKIT_FOUND "No" OFF)
@ -90,6 +95,7 @@ set(LIBRARIES
${GTK_LIBRARIES} ${GTK_LIBRARIES}
${WEBKIT_LIBRARIES} ${WEBKIT_LIBRARIES}
${VTE291_LIBRARIES} ${VTE291_LIBRARIES}
${POLKIT_LIBRARIES}
pthread) pthread)

@ -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);

@ -16,6 +16,7 @@
#include <webkit2/webkit2.h> #include <webkit2/webkit2.h>
#endif #endif
#include "ubl-strings.h" #include "ubl-strings.h"
#include <polkit/polkit.h>
#define WIKI_LINK "https://wiki.ublinux.ru/ru/Программное_обеспечениерограммы_и_утилиты/Все/ubl-settings-logging" #define WIKI_LINK "https://wiki.ublinux.ru/ru/Программное_обеспечениерограммы_и_утилиты/Все/ubl-settings-logging"
@ -39,6 +40,7 @@
#define journald_size_command "journalctl --disk-usage | grep -oE \"[0-9]{1,}.[0-9]{1,}[A-Z]\"" #define journald_size_command "journalctl --disk-usage | grep -oE \"[0-9]{1,}.[0-9]{1,}[A-Z]\""
#define logrotate_size_command(paths) yon_char_unite("du ",paths," |grep -oE '^[0-9]{1,}'",NULL) #define logrotate_size_command(paths) yon_char_unite("du ",paths," |grep -oE '^[0-9]{1,}'",NULL)
#define logrotate_config_path "/etc/logrotate.d/" #define logrotate_config_path "/etc/logrotate.d/"
#define custom_logs_saving_file_path yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/logwatcher.csv",NULL)
#define LocalePath "/usr/share/locale" #define LocalePath "/usr/share/locale"
#define LocaleName "ubl-settings-logging" #define LocaleName "ubl-settings-logging"
@ -69,6 +71,7 @@ string version_application;
char *local; char *local;
typedef struct { typedef struct {
char **envp;
int always_open_documentation; int always_open_documentation;
int win_pos_x; int win_pos_x;
int win_pos_y; int win_pos_y;
@ -88,8 +91,13 @@ typedef struct {
GtkListStore *logrotate_list; GtkListStore *logrotate_list;
GtkListStore *logrotate_apps_list; GtkListStore *logrotate_apps_list;
config_str groups; config_str groups;
int groups_size; int groups_size;
config_str *saved_logs;
GPermission *permissions;
} config; } config;
typedef struct { typedef struct {
@ -136,6 +144,8 @@ typedef struct {
GtkWidget *ServicesEnableDisableButton; GtkWidget *ServicesEnableDisableButton;
GtkListStore *list; GtkListStore *list;
GtkListStore *ServicesList; GtkListStore *ServicesList;
GtkWidget *UpgradePermissionsMenuItem;
GtkWidget *PermissionsLock;
// Custom // Custom
} main_window; } main_window;

@ -94,6 +94,7 @@
<property name="margin-top">5</property> <property name="margin-top">5</property>
<property name="margin-bottom">5</property> <property name="margin-bottom">5</property>
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
<property name="spacing">5</property>
<child> <child>
<object class="GtkBox"> <object class="GtkBox">
<property name="visible">True</property> <property name="visible">True</property>

@ -508,6 +508,12 @@ translated and supported by community.</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="take-focus">False</property> <property name="take-focus">False</property>
<property name="reserve-toggle-size">False</property> <property name="reserve-toggle-size">False</property>
<child>
<object class="GtkCheckMenuItem" id="UpgradePermissionsMenuItem">
<property name="can-focus">False</property>
<property name="label" translatable="yes">Upgrade permissions to root</property>
</object>
</child>
</object> </object>
<object class="GtkMenu" id="menu3"> <object class="GtkMenu" id="menu3">
<property name="visible">True</property> <property name="visible">True</property>
@ -719,7 +725,6 @@ translated and supported by community.</property>
<child> <child>
<object class="GtkButton" id="MainAddButton"> <object class="GtkButton" id="MainAddButton">
<property name="visible">True</property> <property name="visible">True</property>
<property name="sensitive">False</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="tooltip-text" translatable="yes">Add log</property> <property name="tooltip-text" translatable="yes">Add log</property>
@ -1043,6 +1048,7 @@ translated and supported by community.</property>
<object class="GtkHeaderBar" id="headerBar"> <object class="GtkHeaderBar" id="headerBar">
<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">5</property>
<property name="show-close-button">True</property> <property name="show-close-button">True</property>
<child type="title"> <child type="title">
<object class="GtkLabel" id="headerTopic"> <object class="GtkLabel" id="headerTopic">

Loading…
Cancel
Save