diff options
author | William Jon McCann <mccann@jhu.edu> | 2007-10-04 23:19:31 +0000 |
---|---|---|
committer | William Jon McCann <mccann@src.gnome.org> | 2007-10-04 23:19:31 +0000 |
commit | cc0647cd1d972a68658a72b9ee296780129bc729 (patch) | |
tree | a6959fb293d8a8dadb3213c12116bf6f0082b614 /daemon | |
parent | ac350bf546831febb13c5a5d73a1329083182f49 (diff) | |
download | gdm-cc0647cd1d972a68658a72b9ee296780129bc729.tar.gz |
Remove some more obsolete stuff. Make distcheck happy.
2007-10-04 William Jon McCann <mccann@jhu.edu>
* common/gdm-common-unknown-origin.c: (gdm_safe_fopen_w):
* common/gdm-common-unknown-origin.h:
* common/gdm-common.c:
* configure.ac:
* daemon/gdm-slave.c: (gdm_slave_connect_to_x11_display):
* daemon/gdm-xdmcp-display-factory.c:
(gdm_xdmcp_handle_indirect_query),
(gdm_xdmcp_handle_managed_forward):
* daemon/main.c: (main_restoreenv), (gdm_restart_now),
(check_logdir), (check_servauthdir), (set_effective_user_group),
(gdm_daemon_check_permissions), (gdm_daemon_change_user), (main):
Remove some more obsolete stuff. Make distcheck happy.
svn path=/branches/mccann-gobject/; revision=5342
Diffstat (limited to 'daemon')
-rw-r--r-- | daemon/gdm-slave.c | 11 | ||||
-rw-r--r-- | daemon/gdm-xdmcp-display-factory.c | 10 | ||||
-rw-r--r-- | daemon/main.c | 63 |
3 files changed, 69 insertions, 15 deletions
diff --git a/daemon/gdm-slave.c b/daemon/gdm-slave.c index e6e0bdd5..c7a967f6 100644 --- a/daemon/gdm-slave.c +++ b/daemon/gdm-slave.c @@ -161,6 +161,8 @@ gboolean gdm_slave_connect_to_x11_display (GdmSlave *slave) { gboolean ret; + sigset_t mask; + sigset_t omask; ret = FALSE; @@ -181,9 +183,14 @@ gdm_slave_connect_to_x11_display (GdmSlave *slave) XSetIOErrorHandler (gdm_slave_xioerror_handler); #endif - gdm_sigchld_block_push (); + sigemptyset (&mask); + sigaddset (&mask, SIGCHLD); + sigprocmask (SIG_BLOCK, &mask, &omask); + slave->priv->server_display = XOpenDisplay (slave->priv->display_name); - gdm_sigchld_block_pop (); + + sigprocmask (SIG_SETMASK, &omask, NULL); + if (slave->priv->server_display == NULL) { g_warning ("Unable to connect to display %s", slave->priv->display_name); diff --git a/daemon/gdm-xdmcp-display-factory.c b/daemon/gdm-xdmcp-display-factory.c index a46112bc..3bea1829 100644 --- a/daemon/gdm-xdmcp-display-factory.c +++ b/daemon/gdm-xdmcp-display-factory.c @@ -547,6 +547,7 @@ setup_multicast (GdmXdmcpDisplayFactory *factory) #endif /* ENABLE_IPV6 */ } +static void fd_set_close_on_exec (int fd) { int flags; @@ -921,8 +922,10 @@ set_address_for_request (GdmAddress *address, } +#if 0 +/* FIXME: Add chooser support */ static void -gdm_xdmcp_send_forward_query (GdmXdmcpDisplayFactory *factory, +gdm_xdmcp_send_forward_query (GdmXdmcpDisplayFactory *factory, GdmIndirectDisplay *id, GdmAddress *address, GdmAddress *display_address, @@ -978,6 +981,7 @@ gdm_xdmcp_send_forward_query (GdmXdmcpDisplayFactory *factory, g_free (port.data); g_free (addr.data); } +#endif static void handle_any_query (GdmXdmcpDisplayFactory *factory, @@ -1053,7 +1057,6 @@ gdm_xdmcp_handle_indirect_query (GdmXdmcpDisplayFactory *factory, int expected_len; int i; int res; - GdmIndirectDisplay *id; if (! gdm_xdmcp_host_allow (address)) { /* ignore the request */ @@ -1088,6 +1091,7 @@ gdm_xdmcp_handle_indirect_query (GdmXdmcpDisplayFactory *factory, #if 0 + GdmIndirectDisplay *id; /* FIXME: Add chooser support */ id = gdm_choose_indirect_lookup (address); @@ -2373,7 +2377,6 @@ gdm_xdmcp_handle_managed_forward (GdmXdmcpDisplayFactory *factory, int len) { ARRAY8 clnt_address; - GdmIndirectDisplay *id; char *host; GdmAddress *disp_address; @@ -2406,6 +2409,7 @@ gdm_xdmcp_handle_managed_forward (GdmXdmcpDisplayFactory *factory, } #if 0 + GdmIndirectDisplay *id; /* FIXME: Add chooser support */ id = gdm_choose_indirect_lookup_by_chosen (address, disp_address); if (id != NULL) { diff --git a/daemon/main.c b/daemon/main.c index 3d2034e2..4836430a 100644 --- a/daemon/main.c +++ b/daemon/main.c @@ -280,7 +280,13 @@ main_restoreenv (void) { GList *li; - ve_clearenv (); +#ifdef HAVE_CLEARENV + clearenv (); +#else + if (environ != NULL) { + environ[0] = NULL; + } +#endif /* FIXME: leaks */ @@ -295,7 +301,12 @@ gdm_restart_now (void) gdm_info (_("GDM restarting ...")); gdm_final_cleanup (); main_restoreenv (); - VE_IGNORE_EINTR (execvp (stored_argv[0], stored_argv)); + + do { + errno = 0; + execvp (stored_argv[0], stored_argv); + } while (errno == EINTR); + g_warning (_("Failed to restart self")); _exit (1); } @@ -323,7 +334,7 @@ check_logdir (void) log_path = LOGDIR; - VE_IGNORE_EINTR (r = g_stat (log_path, &statbuf)); + r = g_stat (log_path, &statbuf); if (r < 0 || ! S_ISDIR (statbuf.st_mode)) { gdm_fail (_("Logdir %s does not exist or isn't a directory."), log_path); } @@ -336,35 +347,66 @@ check_servauthdir (const char *auth_path, int r; /* Enter paranoia mode */ - VE_IGNORE_EINTR (r = g_stat (auth_path, statbuf)); - if G_UNLIKELY (r < 0) { + r = g_stat (auth_path, statbuf); + if (r < 0) { gdm_fail (_("Authdir %s does not exist. Aborting."), auth_path); } - if G_UNLIKELY (! S_ISDIR (statbuf->st_mode)) { + if (! S_ISDIR (statbuf->st_mode)) { gdm_fail (_("Authdir %s is not a directory. Aborting."), auth_path); } } static void +set_effective_user_group (uid_t uid, + gid_t gid) +{ + int res; + + res = 0; + + if (geteuid () != uid) { + res = seteuid (uid); + } + + if (res != 0) { + g_error ("Cannot set uid to %d: %s", + (int)uid, + g_strerror (errno)); + } + + res = 0; + if (getegid () != gid) { + res = setegid (gid); + } + + if (res != 0) { + g_error ("Cannot set gid to %d: %s", + (int)gid, + g_strerror (errno)); + } +} + +static void gdm_daemon_check_permissions (uid_t uid, gid_t gid) { struct stat statbuf; const char *auth_path; + int res; auth_path = LOGDIR; /* Enter paranoia mode */ check_servauthdir (auth_path, &statbuf); - NEVER_FAILS_root_set_euid_egid (0, 0); + set_effective_user_group (0, 0); /* Now set things up for us as */ chown (auth_path, 0, gid); g_chmod (auth_path, (S_IRWXU|S_IRWXG|S_ISVTX)); - NEVER_FAILS_root_set_euid_egid (uid, gid); + set_effective_user_group (uid, gid); /* Again paranoid */ check_servauthdir (auth_path, &statbuf); @@ -436,7 +478,7 @@ gdm_daemon_change_user (uid_t *uidp, } /* gid remains `gdm' */ - NEVER_FAILS_root_set_euid_egid (uid, gid); + set_effective_user_group (uid, gid); if (uidp != NULL) { *uidp = uid; @@ -633,7 +675,8 @@ main (int argc, gdm_daemon_change_user (&gdm_uid, &gdm_gid); gdm_daemon_check_permissions (gdm_uid, gdm_gid); - NEVER_FAILS_root_set_euid_egid (0, 0); + + set_effective_user_group (0, 0); check_logdir (); /* XDM compliant error message */ |