46
50
#include <systemd/sd-daemon.h>
53
#ifdef ENABLE_SYSTEMD_JOURNAL
54
#include <systemd/sd-journal.h>
49
57
#ifdef HAVE_SELINUX
50
58
#include <selinux/selinux.h>
51
59
#endif /* HAVE_SELINUX */
1782
1790
const char * const * environment;
1783
1791
char *kerberos_cache;
1784
1792
char *home_dir;
1787
fd = open ("/dev/null", O_RDWR);
1788
dup2 (fd, STDIN_FILENO);
1791
if (worker->priv->is_program_session) {
1792
fd = _open_program_session_log (worker->priv->log_file);
1793
int stdin_fd = -1, stdout_fd = -1, stderr_fd = -1;
1794
gboolean has_journald = FALSE;
1796
stdin_fd = open ("/dev/null", O_RDWR);
1797
dup2 (stdin_fd, STDIN_FILENO);
1800
#ifdef ENABLE_SYSTEMD_JOURNAL
1801
has_journald = sd_booted() > 0;
1803
if (!has_journald && worker->priv->is_program_session) {
1804
stdout_fd = _open_program_session_log (worker->priv->log_file);
1805
stderr_fd = dup (stdout_fd);
1808
#ifdef HAVE_LOGINCAP
1809
if (setusercontext (NULL, passwd_entry, passwd_entry->pw_uid, LOGIN_SETALL) < 0) {
1810
g_debug ("GdmSessionWorker: setusercontext() failed for user %s: %s",
1811
passwd_entry->pw_name, g_strerror (errno));
1795
1815
if (setuid (worker->priv->uid) < 0) {
1796
1816
g_debug ("GdmSessionWorker: could not reset uid: %s", g_strerror (errno));
1800
1821
if (setsid () < 0) {
1801
1822
g_debug ("GdmSessionWorker: could not set pid '%u' as leader of new session and process group: %s",
1837
if (!worker->priv->is_program_session) {
1858
#ifdef ENABLE_SYSTEMD_JOURNAL
1860
stdout_fd = sd_journal_stream_fd (worker->priv->arguments[0], LOG_INFO, FALSE);
1861
stderr_fd = sd_journal_stream_fd (worker->priv->arguments[0], LOG_WARNING, FALSE);
1863
/* Unset the CLOEXEC flags, because sd_journal_stream_fd
1864
* gives it to us by default.
1866
gdm_clear_close_on_exec_flag (stdout_fd);
1867
gdm_clear_close_on_exec_flag (stderr_fd);
1870
if (!has_journald && !worker->priv->is_program_session) {
1838
1871
if (home_dir != NULL && home_dir[0] != '\0') {
1839
1872
char *cache_dir;
1848
1881
g_free (cache_dir);
1850
1883
if (g_mkdir_with_parents (log_dir, S_IRWXU) == 0) {
1851
fd = _open_user_session_log (log_dir);
1884
stdout_fd = _open_user_session_log (log_dir);
1885
stderr_fd = dup (stdout_fd);
1853
fd = open ("/dev/null", O_RDWR);
1887
stdout_fd = open ("/dev/null", O_RDWR);
1888
stderr_fd = dup (stdout_fd);
1855
1890
g_free (log_dir);
1857
fd = open ("/dev/null", O_RDWR);
1892
stdout_fd = open ("/dev/null", O_RDWR);
1893
stderr_fd = dup (stdout_fd);
1860
1896
g_free (home_dir);
1862
dup2 (fd, STDOUT_FILENO);
1863
dup2 (fd, STDERR_FILENO);
1898
if (stdout_fd != -1) {
1899
dup2 (stdout_fd, STDOUT_FILENO);
1903
if (stderr_fd != -1) {
1904
dup2 (stderr_fd, STDERR_FILENO);
1866
1908
gdm_log_shutdown ();