Merge pull request 'Added root button; Fixed starting in ubl-settings-manager with sockets' (#103) from YanTheKaller/ubl-settings-diskquota:master into master

Reviewed-on: #103
master v2.8
Dmitry Razumov 1 month ago
commit 09a5fee19e

@ -22,6 +22,93 @@ void update_time_table(vector* vec_temp) {
}
}
}
#define yon_char_is_empty(string) !(string&&strcmp(string,""))
int arg_size;
config_str arg_target;
gboolean __yon_app_check_helper(const char *app, config_str argv, int argc){
char *helper_path = yon_char_unite("/usr/bin/",app,"-root",NULL);
if (!access(helper_path,F_OK)){
for (int i=1;i<arg_size;i++){
char *temp = yon_char_unite(helper_path," ", arg_target[i],NULL);
if(strcmp(helper_path,"")&&strcmp(helper_path,LocaleName))
free(helper_path);
helper_path=temp;
}
if (getuid()!=0){
int size=0;
config_str parsed = NULL;
g_shell_parse_argv(helper_path, &size,&parsed, NULL);
execve(parsed[0],parsed,__environ);
return 1;
}
}
return 0;
}
void on_root_access(GtkWidget *, GtkWidget *window){
if (getuid()){
char *argline = yon_char_new(arg_target[0]);
int last_pos = yon_char_find_last(argline,'/');
if(last_pos>-1){
free(yon_char_divide(argline,last_pos));
}
if (!__yon_app_check_helper(argline, arg_target, arg_size)){
for (int i=1;i<arg_size;i++){
char *temp = yon_char_unite(argline," ", arg_target[i],NULL);
if(strcmp(argline,"")&&strcmp(argline,LocaleName))
free(argline);
argline=temp;
}
if (getuid()!=0){
const char *session = getenv("XDG_SESSION_TYPE");
const char *desktop = getenv("XDG_CURRENT_DESKTOP");
const char *backend = getenv("GDK_BACKEND");
int size=0;
config_str parsed = NULL;
char *command = yon_char_unite("/usr/bin/bash -c \"pkexec ",argline, " ",
!yon_char_is_empty(session)&&!strcmp(session,"wayland")&&!yon_char_is_empty(desktop)&&strcmp(desktop,"KDE")&&yon_char_is_empty(backend)?
" --setenv=\\\"GDK_BACKEND=x11\\\"":" --setenv=\\\"GDK_BACKEND=${GDK_BACKEND}\\\"",
" --setenv=\\\"XAUTHORITY=${XAUTHORITY}\\\" \
--setenv=\\\"DISPLAY=${DISPLAY}\\\" \
--setenv=\\\"WAYLAND_DISPLAY=${XDG_RUNTIME_DIR}/${WAYLAND_DISPLAY}\\\" \
--setenv=\\\"XDG_RUNTIME_DIR=${XDG_RUNTIME_DIR}\\\" \
--setenv=\\\"XDG_SESSION_TYPE=${XDG_SESSION_TYPE}\\\" \
--setenv=\\\"XDG_CURRENT_DESKTOP=${XDG_CURRENT_DESKTOP}\\\"; exit\"",NULL);
g_shell_parse_argv(command, &size,&parsed, NULL);
execve(parsed[0],parsed,__environ);
}
}
}
}
void yon_root_button_init(GtkWidget *root_item,GtkWindow *window){
g_signal_connect(G_OBJECT(root_item),"activate", G_CALLBACK(on_root_access),window);
}
GtkWidget *yon_root_button_new(config_str args, int args_size){
textdomain("libublsettingsui-gtk3");
arg_size=args_size;
arg_target=args;
GtkWidget *root_item = gtk_menu_item_new();
gtk_style_context_add_class(gtk_widget_get_style_context(root_item),"menuitemtop");
GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,5);
GtkWidget *root_label = gtk_label_new(_("Grant root access"));
GtkWidget *root_check = gtk_check_button_new();
g_object_set_data(G_OBJECT(root_item),"Label",root_label);
gtk_box_pack_start(GTK_BOX(box),root_check,0,0,0);
gtk_box_pack_start(GTK_BOX(box),root_label,1,1,0);
gtk_container_add(GTK_CONTAINER(root_item),box);
gtk_widget_show_all(root_item);
if (getuid()==0) {
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(root_check),1);
gtk_widget_set_sensitive(root_item,0);
}
textdomain(LocaleName);
return root_item;
}
void entry_user_disk(GtkWidget *self, int* flag_update) {
@ -570,6 +657,9 @@ int main(int argc, char *argv[]){
gtk_init(&argc,&argv);
main_window *widgets = setup_window(&cfg_main_gui,&cfg_custom_gui);
GtkWidget *root_button = yon_root_button_new(argv,argc);
yon_root_button_init(root_button,GTK_WINDOW(widgets->Window));
gtk_menu_shell_prepend(GTK_MENU_SHELL(gtk_widget_get_parent(widgets->DocumentationMenuItem)),root_button);
filters_set_name("prjquota");
filters_init_flag();
control_event(widgets, &cfg_custom_gui);

Loading…
Cancel
Save