From 1450f8b968837dc1df3b300ebf99aa22dcdfcb56 Mon Sep 17 00:00:00 2001 From: Alexander Pyhalov Date: Mon, 23 Apr 2018 22:50:10 +0300 Subject: [PATCH 1/2] 9495 gui-install dumps core after PR#{39,40} --- usr/src/cmd/gui-install/src/main.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/usr/src/cmd/gui-install/src/main.c b/usr/src/cmd/gui-install/src/main.c index 76c629d5..061f6e93 100644 --- a/usr/src/cmd/gui-install/src/main.c +++ b/usr/src/cmd/gui-install/src/main.c @@ -545,9 +545,11 @@ main(int argc, char *argv[]) bindtextdomain(GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR); bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); textdomain(GETTEXT_PACKAGE); + setlocale(LC_ALL,""); #endif gui_error_logging_init("gui-install"); + gtk_init(&argc, &argv); g_option_context_add_main_entries( option_context, option_entries, From b9df16503ff4f12131f2807315dafb6e8aa63046 Mon Sep 17 00:00:00 2001 From: Alexander Pyhalov Date: Tue, 24 Apr 2018 01:24:16 +0300 Subject: [PATCH 2/2] gui-installer: try to avoid running browser as root --- usr/src/cmd/gui-install/src/welcome-screen.c | 55 ++++++++++++++++++-- 1 file changed, 50 insertions(+), 5 deletions(-) diff --git a/usr/src/cmd/gui-install/src/welcome-screen.c b/usr/src/cmd/gui-install/src/welcome-screen.c index afc70c2d..157a80e4 100644 --- a/usr/src/cmd/gui-install/src/welcome-screen.c +++ b/usr/src/cmd/gui-install/src/welcome-screen.c @@ -29,6 +29,11 @@ #include #include +#include +#include +#include +#include +#include #include "callbacks.h" #include "installation-profile.h" #include "interface-globals.h" @@ -36,6 +41,8 @@ #include "welcome-screen.h" #include "help-dialog.h" +#define XDG_OPEN "/usr/bin/xdg-open" + /* * Signal handler connected up by Glade XML signal autoconnect * for the release notes button clicked event. @@ -46,11 +53,49 @@ on_releasenotesbutton_clicked(GtkWidget *widget, { GError *error = NULL; gboolean result; + uid_t suid; + int pid; + + result = FALSE; + /* The installer will typically be run as root under sudo, + but we don't want to run browser as root */ + + suid = geteuid(); + if (suid == 0) { + char *sudo_uid; + + sudo_uid = getenv("SUDO_UID"); + if (sudo_uid) + suid = strtol(sudo_uid, (char**)NULL, 10); + } + pid = fork(); + if (pid == 0) { + if (suid > 0 && suid != geteuid()) { + struct passwd *pw; + + setuid(suid); + pw = getpwuid(suid); + if (pw != NULL) { + if (pw->pw_name != NULL) { + setenv("USERNAME", pw->pw_name, 1); + setenv("LOGNAME", pw->pw_name, 1); + } + if (pw->pw_dir != NULL) { + setenv("HOME", pw->pw_dir, 1); + } + } + } + execl(XDG_OPEN, XDG_OPEN, RELEASENOTESURL, (char *)0); + exit(-1); + } else if (pid > 0) { + int status; + + waitpid(pid, &status, 0); + if (WIFEXITED(status) && WEXITSTATUS(status) == 0) { + result = TRUE; + } + } - result = gtk_show_uri(gtk_widget_get_screen(widget), - RELEASENOTESURL, - GDK_CURRENT_TIME, - &error); if (result != TRUE) { gui_install_prompt_dialog( FALSE, @@ -58,7 +103,7 @@ on_releasenotesbutton_clicked(GtkWidget *widget, FALSE, GTK_MESSAGE_ERROR, _("Unable to display release notes"), - error->message); + NULL); g_error_free(error); } return (TRUE);