summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGregory Leblanc <gleblanc@linuxweasel.com>2001-11-16 07:22:18 +0000
committerGeorge Lebl <jirka@src.gnome.org>2001-11-16 07:22:18 +0000
commit4fa37b58d1911cd23f87b954456197cd3b3f0e87 (patch)
tree3b5aa68bdb45fe1836f5fb3cfd223d9ccf8aa2bf
parent38d40ad718e7f934349e275b4b234faa22701efc (diff)
downloadgdm-4fa37b58d1911cd23f87b954456197cd3b3f0e87.tar.gz
some build fixes
Thu Nov 15 23:25:41 2001 George Lebl <jirka@5z.com> * configure.in: some build fixes * **/*.c: remove RCSid's as they are un-fun for merging * Merge from gdm-2-2: Thu Nov 15 21:18:48 2001 George Lebl <jirka@5z.com> * daemon/gdm.[ch], daemon/slave.[ch], daemon/server.c, gui/gdmlogin.c: clean up a bit of the constants mess (though it's still an utter mess). Implement a new SUP opcode so that the daemon knows when the server was started so that it can start local servers in order, so that things like complete machine lockups don't occur (I got one just testing this). Also add a 3 second 'padding' between server starts to really be sure. * config/gdm.conf.in: add some comments, mostly for distributions 2001-11-06 Gregory Leblanc <gleblanc@linuxweasel.com> * gdm.spec.in: more minor updates, just to piss George off. :-) There's a ChangeLog in the file, if you care that much.
-rw-r--r--ChangeLog25
-rw-r--r--config/gdm.conf.in24
-rw-r--r--configure.in11
-rw-r--r--daemon/auth.c3
-rw-r--r--daemon/choose.c2
-rw-r--r--daemon/display.c7
-rw-r--r--daemon/filecheck.c2
-rw-r--r--daemon/gdm-net.c2
-rw-r--r--daemon/gdm.c87
-rw-r--r--daemon/gdm.h20
-rw-r--r--daemon/misc.c3
-rw-r--r--daemon/server.c4
-rw-r--r--daemon/slave.c77
-rw-r--r--daemon/slave.h1
-rw-r--r--daemon/verify-crypt.c3
-rw-r--r--daemon/verify-pam.c3
-rw-r--r--daemon/verify-shadow.c3
-rw-r--r--daemon/xdmcp.c1
-rw-r--r--gdm.spec.in37
-rw-r--r--gui/gdmchooser.c2
-rw-r--r--gui/gdmlogin.c6
-rw-r--r--gui/gdmwm.c2
-rw-r--r--gui/misc.c2
23 files changed, 195 insertions, 132 deletions
diff --git a/ChangeLog b/ChangeLog
index 60c54375..8f41765e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,28 @@
+Thu Nov 15 23:25:41 2001 George Lebl <jirka@5z.com>
+
+ * configure.in: some build fixes
+
+ * **/*.c: remove RCSid's as they are un-fun for merging
+
+ * Merge from gdm-2-2:
+
+ Thu Nov 15 21:18:48 2001 George Lebl <jirka@5z.com>
+
+ * daemon/gdm.[ch], daemon/slave.[ch], daemon/server.c, gui/gdmlogin.c:
+ clean up a bit of the constants mess (though it's still an utter
+ mess). Implement a new SUP opcode so that the daemon knows
+ when the server was started so that it can start local servers
+ in order, so that things like complete machine lockups don't occur
+ (I got one just testing this). Also add a 3 second 'padding'
+ between server starts to really be sure.
+
+ * config/gdm.conf.in: add some comments, mostly for distributions
+
+ 2001-11-06 Gregory Leblanc <gleblanc@linuxweasel.com>
+
+ * gdm.spec.in: more minor updates, just to piss George off. :-)
+ There's a ChangeLog in the file, if you care that much.
+
Mon Nov 05 21:28:43 2001 George Lebl <jirka@5z.com>
* configure.in, **/Makefile.am, daemon/*.[ch], utils/*.[ch],
diff --git a/config/gdm.conf.in b/config/gdm.conf.in
index 5cdfae60..1d182d44 100644
--- a/config/gdm.conf.in
+++ b/config/gdm.conf.in
@@ -1,6 +1,8 @@
[daemon]
AutomaticLoginEnable=false
AutomaticLogin=
+# If you are having trouble with using a single server for a long time and
+# want gdm to kill/restart the server, turn this on
AlwaysRestartServer=false
Configurator=@EXPANDED_GDMCONFIGDIR@/gdmconfig --disable-sound --disable-crash-dialog
GnomeDefaultSession=@EXPANDED_DATADIR@/gnome/default.session
@@ -15,6 +17,8 @@ LogDir=@EXPANDED_AUTHDIR@
PidFile=/var/run/gdm.pid
PostSessionScriptDir=@EXPANDED_SYSCONFDIR@/gdm/PostSession/
PreSessionScriptDir=@EXPANDED_SYSCONFDIR@/gdm/PreSession/
+# Distributions: If you have some script that runs an X server in say
+# VGA mode, allowing a login, could you please send it to me?
FailsafeXServer=
XKeepsCrashing=@EXPANDED_SYSCONFDIR@/gdm/XKeepsCrashing
RebootCommand=/sbin/shutdown -r now
@@ -34,7 +38,11 @@ FlexibleXServers=5
Xnest=/usr/bin/X11/Xnest -name Xnest
[security]
+# If any distributions ship with this one off, they should be shot
+# this is only local, so it's only for say kiosk use, when you
+# want to minimize possibility of breakin
AllowRoot=true
+# If you want to be paranoid, turn this one off
AllowRemoteRoot=true
AllowRemoteAutoLogin=false
RelaxPermissions=0
@@ -43,6 +51,9 @@ UserMaxFile=65536
SessionMaxFile=524388
[xdmcp]
+# Distributions: Ship with this off. It is never a safe thing to leave
+# out on the net. Alternatively you can set up /etc/hosts.allow and
+# /etc/hosts.deny to only allow say local access.
Enable=false
HonorIndirect=true
MaxPending=4
@@ -52,6 +63,8 @@ MaxWait=15
MaxWaitIndirect=15
DisplaysPerHost=1
Port=177
+# Willing script, none is shipped and by default we'll send
+# hostname system id
Willing=@EXPANDED_SYSCONFDIR@/gdm/Xwilling
[gui]
@@ -65,7 +78,8 @@ ConfigAvailable=true
Browser=false
DefaultFace=@EXPANDED_PIXMAPDIR@/nobody.png
DefaultLocale=en_US
-Exclude=bin,daemon,adm,lp,sync,shutdown,halt,mail,news,uucp,operator,nobody,gdm,postgres,pvm
+# These are things excluded from the face browser, not from logging in
+Exclude=bin,daemon,adm,lp,sync,shutdown,halt,mail,news,uucp,operator,nobody,gdm,postgres,pvm,rpm
Font=-*-helvetica-bold-r-normal-*-*-180-*-*-*-*-*-*,*
GlobalFaceDir=@EXPANDED_DATADIR@/faces/
Icon=@EXPANDED_PIXMAPDIR@/gdm.xpm
@@ -106,13 +120,19 @@ Hosts=
Broadcast=true
[debug]
+# This will enable debugging into the syslog, usually not neccessary
+# and it creates a LOT of spew of random stuff to the syslog
Enable=false
[servers]
0=Standard
#1=Standard
#Note: If you want to make sure X runs on a specific virtual console on linux,
-# you can use the following (for console 7):
+# you can use the following (for console 7). However this can cause
+# problems for some users. Be careful about this, getting this wrong
+# can lead to an unusable console. Best solution is to make sure gdm
+# starts as the last thing, and that will make it not neccessary to
+# do hacks like this.
#0=Standard vt7
[server-Standard]
diff --git a/configure.in b/configure.in
index 7d34a5e1..bf0ba7be 100644
--- a/configure.in
+++ b/configure.in
@@ -4,7 +4,7 @@ dnl
dnl Due to the sed scripts being split on 90 line
dnl blocks, this macro needs to be right at the beggining.
dnl
-AM_PROG_XML_I18N_TOOLS
+AC_PROG_INTLTOOL
AM_CONFIG_HEADER(config.h)
AM_INIT_AUTOMAKE(gdm,2.3.90.0)
@@ -113,6 +113,10 @@ PKG_CHECK_MODULES(DAEMON, gdk-pixbuf-2.0 >= $GDK_PIXBUF_REQUIRED gtk+-2.0 >= $GT
AC_SUBST(DAEMON_CFLAGS)
AC_SUBST(DAEMON_LIBS)
+PKG_CHECK_MODULES(JUSTGTK, gtk+-2.0 >= $GTK_REQUIRED)
+AC_SUBST(JUSTGTK_CFLAGS)
+AC_SUBST(JUSTGTK_LIBS)
+
PKG_CHECK_MODULES(GUI, gdk-pixbuf-2.0 >= $GDK_PIXBUF_REQUIRED gtk+-2.0 >= $GTK_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED libglade-2.0 >= $LIBGLADE_REQUIRED)
AC_SUBST(GUI_CFLAGS)
AC_SUBST(GUI_LIBS)
@@ -295,7 +299,7 @@ if test x$with_xdmcp != xno ; then
AC_CHECK_LIB(Xdmcp, XdmcpFlush, [
AC_DEFINE(HAVE_LIBXDMCP)
XDMCP_LIBS="-lXdmcp"
- XDMCP_SUPPORT=yes],, $GUI_LIBS)
+ XDMCP_SUPPORT=yes],,$JUSTGTK_LIBS)
])
if test x$with_xdmcp = xyes -a x$XDMCP_SUPPORT = x ; then
@@ -324,7 +328,7 @@ if test x$with_xinerama != xno ; then
AC_CHECK_LIB(Xinerama, XineramaQueryScreens, [
AC_DEFINE(HAVE_LIBXINERAMA)
LIBS="$LIBS -lXinerama"
- XINERAMA_SUPPORT=yes],, $GUI_LIBS)
+ XINERAMA_SUPPORT=yes],,$JUSTGTK_LIBS)
])
if test x$with_xinerama = xyes -a x$XINERAMA_SUPPORT = x ; then
@@ -410,7 +414,6 @@ daemon/Makefile
gui/Makefile
utils/Makefile
pixmaps/Makefile
-macros/Makefile
config/Makefile
docs/Makefile
docs/C/Makefile
diff --git a/daemon/auth.c b/daemon/auth.c
index c54d21c5..c9a6d5ae 100644
--- a/daemon/auth.c
+++ b/daemon/auth.c
@@ -36,9 +36,6 @@
#include "filecheck.h"
#include "auth.h"
-static const gchar RCSid[]="$Id$";
-
-
/* Local prototypes */
static void gdm_auth_purge (GdmDisplay *d, FILE *af);
diff --git a/daemon/choose.c b/daemon/choose.c
index 8d8ba7c7..242bdf82 100644
--- a/daemon/choose.c
+++ b/daemon/choose.c
@@ -43,8 +43,6 @@
#include "choose.h"
#include "xdmcp.h"
-static const gchar RCSid[]="$Id$";
-
static gint ipending = 0;
static GSList *indirect = NULL;
diff --git a/daemon/display.c b/daemon/display.c
index e110c795..c5acf49c 100644
--- a/daemon/display.c
+++ b/daemon/display.c
@@ -36,8 +36,6 @@
#include "choose.h"
#include "gdm-net.h"
-static const gchar RCSid[]="$Id$";
-
/* External vars */
extern gboolean GdmXdmcp;
extern gint sessions;
@@ -194,7 +192,8 @@ gdm_display_manage (GdmDisplay *d)
gdm_server_stop (d);
/* we expect to return after the session finishes */
_exit (DISPLAY_REMANAGE);
- } else if (d->type == TYPE_XDMCP && d->dispstat == XDMCP_MANAGED) {
+ } else if (d->type == TYPE_XDMCP &&
+ d->dispstat == XDMCP_MANAGED) {
gdm_slave_start (d);
gdm_server_stop (d);
/* we expect to return after the session finishes */
@@ -220,7 +219,7 @@ gdm_display_manage (GdmDisplay *d)
}
if (SERVER_IS_LOCAL (d)) {
- d->dispstat = DISPLAY_SUCCESS;
+ d->dispstat = DISPLAY_ALIVE;
}
/* reset sleep to 0 */
diff --git a/daemon/filecheck.c b/daemon/filecheck.c
index 68565577..79ac9405 100644
--- a/daemon/filecheck.c
+++ b/daemon/filecheck.c
@@ -24,8 +24,6 @@
#include "gdm.h"
#include "filecheck.h"
-static const gchar RCSid[]="$Id$";
-
/**
* gdm_file_check:
* @caller: String to be prepended to syslog error messages.
diff --git a/daemon/gdm-net.c b/daemon/gdm-net.c
index 798c4f22..1a0ac19b 100644
--- a/daemon/gdm-net.c
+++ b/daemon/gdm-net.c
@@ -38,8 +38,6 @@
#include "misc.h"
#include "gdm-net.h"
-static const gchar RCSid[]="$Id$";
-
/* Kind of a weird setup, new connections whack old connections */
#define MAX_CONNECTIONS 10
diff --git a/daemon/gdm.c b/daemon/gdm.c
index ce59478b..1940663e 100644
--- a/daemon/gdm.c
+++ b/daemon/gdm.c
@@ -51,12 +51,8 @@
#include "errorgui.h"
#include "gdm-net.h"
-static const gchar RCSid[]="$Id$";
-
-
/* Local functions */
static void gdm_config_parse (void);
-static void gdm_local_servers_start (GdmDisplay *d);
static void gdm_handle_message (GdmConnection *conn,
const char *msg,
gpointer data);
@@ -175,6 +171,18 @@ display_exists (int num)
return FALSE;
}
+static int
+compare_displays (gconstpointer a, gconstpointer b)
+{
+ const GdmDisplay *d1 = a;
+ const GdmDisplay *d2 = b;
+ if (d1->dispnum < d2->dispnum)
+ return -1;
+ else if (d1->dispnum > d2->dispnum)
+ return 1;
+ else
+ return 0;
+}
/**
* gdm_config_parse:
@@ -411,7 +419,9 @@ gdm_config_parse (void)
iter = gnome_config_iterator_next (iter, &k, &v);
continue;
}
- displays = g_slist_append (displays, disp);
+ displays = g_slist_insert_sorted (displays,
+ disp,
+ compare_displays);
if (disp_num > high_display_num)
high_display_num = disp_num;
} else {
@@ -452,7 +462,6 @@ gdm_config_parse (void)
}
}
-
/* Lookup user and groupid for the gdm user */
pwent = getpwnam (GdmUser);
@@ -598,30 +607,39 @@ gdm_daemonify (void)
open("/dev/null", O_RDWR); /* open stderr - fd 2 */
}
-
-/**
- * gdm_local_servers_start:
- * @d: Pointer to a GdmDisplay struct
- *
- * Start all local (i.e. non-XDMCP) X servers
- */
-
static void
-gdm_local_servers_start (GdmDisplay *d)
+gdm_start_first_unborn_local (int delay)
{
- if (d && d->type == TYPE_LOCAL) {
- gdm_debug ("gdm_local_servers_start: Starting %s", d->name);
+ GSList *li;
- /* only the first local display has timed login going on */
- if (gdm_first_login)
- d->timed_login_ok = TRUE;
+ for (li = displays; li != NULL; li = li->next) {
+ GdmDisplay *d = li->data;
- if ( ! gdm_display_manage (d)) {
- gdm_display_unmanage (d);
- /* only the first local display gets autologged in */
- gdm_first_login = FALSE;
+ if (d != NULL &&
+ d->type == TYPE_LOCAL &&
+ d->dispstat == DISPLAY_UNBORN) {
+ gdm_debug ("gdm_start_first_unborn_local: "
+ "Starting %s", d->name);
+
+ /* well sleep at least 'delay' seconds
+ * before starting */
+ d->sleep_before_run = delay;
+
+ /* only the first local display has
+ * timed login going on */
+ if (gdm_first_login)
+ d->timed_login_ok = TRUE;
+
+ if ( ! gdm_display_manage (d)) {
+ gdm_display_unmanage (d);
+ /* only the first local display gets
+ * autologged in */
+ gdm_first_login = FALSE;
+ } else {
+ break;
+ }
+ }
}
- }
}
static void
@@ -827,7 +845,7 @@ gdm_cleanup_children (void)
status = WEXITSTATUS (exitstatus);
crashed = FALSE;
} else {
- status = DISPLAY_SUCCESS;
+ status = EXIT_SUCCESS;
crashed = TRUE;
}
@@ -937,6 +955,9 @@ gdm_cleanup_children (void)
gdm_safe_restart ();
gdm_display_unmanage (d);
+
+ /* If there are some pending locals, start them now */
+ gdm_start_first_unborn_local (3 /* delay */);
break;
case DISPLAY_REBOOT: /* Reboot machine */
@@ -1005,6 +1026,10 @@ gdm_cleanup_children (void)
/* an original way to deal with these things:
* "Screw you guys, I'm going home!" */
gdm_display_unmanage (d);
+
+ /* If there are some pending locals,
+ * start them now */
+ gdm_start_first_unborn_local (3 /* delay */);
break;
}
gdm_debug ("gdm_child_action: Trying again");
@@ -1035,8 +1060,12 @@ gdm_cleanup_children (void)
/* This is a local server so we start a new slave */
if (d->type == TYPE_LOCAL) {
- if ( ! gdm_display_manage (d))
+ if ( ! gdm_display_manage (d)) {
gdm_display_unmanage (d);
+ /* If there are some pending locals,
+ * start them now */
+ gdm_start_first_unborn_local (3 /* delay */);
+ }
/* Remote displays will send a request to be managed */
} else /* TYPE_XDMCP, TYPE_FLEXI, TYPE_FLEXI_XNEST */ {
gdm_display_unmanage (d);
@@ -1332,7 +1361,7 @@ main (int argc, char *argv[])
create_connections ();
/* Start local X servers */
- g_slist_foreach (displays, (GFunc) gdm_local_servers_start, NULL);
+ gdm_start_first_unborn_local (0 /* delay */);
/* Accept remote connections */
if (GdmXdmcp) {
@@ -1759,6 +1788,8 @@ gdm_handle_message (GdmConnection *conn, const char *msg, gpointer data)
} else if (strcmp (msg, GDM_SOP_SOFT_RESTART) == 0) {
gdm_restart_mode = TRUE;
gdm_safe_restart ();
+ } else if (strcmp (msg, GDM_SOP_START_NEXT_LOCAL) == 0) {
+ gdm_start_first_unborn_local (3 /* delay */);
}
}
diff --git a/daemon/gdm.h b/daemon/gdm.h
index 9221935a..982357d3 100644
--- a/daemon/gdm.h
+++ b/daemon/gdm.h
@@ -41,10 +41,9 @@
#define SERVER_IS_FLEXI(d) (d->type == TYPE_FLEXI || \
d->type == TYPE_FLEXI_XNEST)
-#define SERVER_SUCCESS 0 /* X server default */
-#define SERVER_FAILURE 1 /* X server default */
+/* These are the servstat values, also used as server
+ * process exit codes */
#define SERVER_TIMEOUT 2 /* Server didn't start */
-#define SERVER_NOTFOUND 127 /* X server default */
#define SERVER_DEAD 250 /* Server stopped */
#define SERVER_STARTED 251 /* Server started but not ready for connections yet */
#define SERVER_RUNNING 252 /* Server running and ready for connections */
@@ -53,7 +52,7 @@
/* DO NOTE USE 1, that's used as error if x connection fails usually */
/* Note that there is no reasons why these were a power of two, and note
* that they have to fit in 256 */
-#define DISPLAY_SUCCESS 0 /* All systems are go */
+/* These are the exit codes */
#define DISPLAY_REMANAGE 2 /* Restart display */
#define DISPLAY_ABORT 4 /* Houston, we have a problem */
#define DISPLAY_REBOOT 8 /* Rebewt */
@@ -61,14 +60,16 @@
#define DISPLAY_SUSPEND 17 /* Suspend */
#define DISPLAY_CHOSEN 20 /* successful chooser session,
restart display */
-#define DISPLAY_DEAD 32 /* Display not configured/started yet */
#define DISPLAY_XFAILED 64 /* X failed */
#define DISPLAY_RESTARTGDM 128 /* Restart GDM */
-#define XDMCP_DEAD 0
-#define XDMCP_PENDING 1
-#define XDMCP_MANAGED 2
-
+enum {
+ DISPLAY_UNBORN /* Not yet started */,
+ DISPLAY_ALIVE /* Yay! we're alive (non-xdmcp) */,
+ XDMCP_PENDING /* Pending XDMCP display */,
+ XDMCP_MANAGED /* Managed XDMCP display */,
+ DISPLAY_DEAD /* Left for dead */
+};
/* Opcodes for the highly sophisticated protocol used for
* daemon<->greeter communications */
@@ -413,6 +414,7 @@ void gdm_quit (void);
/* 5 = Xnest can't connect */
#define GDM_SOP_FLEXI_OK "FLEXI_OK" /* <slave pid> */
#define GDM_SOP_SOFT_RESTART "SOFT_RESTART" /* no arguments */
+#define GDM_SOP_START_NEXT_LOCAL "START_NEXT_LOCAL" /* no arguments */
#define GDM_SUP_SOCKET "/tmp/.gdm_socket"
diff --git a/daemon/misc.c b/daemon/misc.c
index ffa40e56..0cb2e81f 100644
--- a/daemon/misc.c
+++ b/daemon/misc.c
@@ -36,9 +36,6 @@
#include "gdm.h"
#include "misc.h"
-static const gchar RCSid[]="$Id$";
-
-
/* Configuration option variables */
extern gchar *GdmPidFile;
extern gboolean GdmDebug;
diff --git a/daemon/server.c b/daemon/server.c
index 4a38e8f7..8e458a6a 100644
--- a/daemon/server.c
+++ b/daemon/server.c
@@ -45,8 +45,6 @@
#include "auth.h"
#include "slave.h"
-static const gchar RCSid[]="$Id$";
-
#define SERVER_WAIT_ALARM 10
@@ -913,7 +911,7 @@ gdm_server_alloc (gint id, const gchar *command)
d->userauth = NULL;
d->command = g_strdup (command);
d->cookie = NULL;
- d->dispstat = DISPLAY_DEAD;
+ d->dispstat = DISPLAY_UNBORN;
d->greetpid = 0;
d->name = g_strdup_printf (":%d", id);
d->hostname = g_strdup (hostname);
diff --git a/daemon/slave.c b/daemon/slave.c
index ab94909f..c6d7624a 100644
--- a/daemon/slave.c
+++ b/daemon/slave.c
@@ -59,9 +59,6 @@
#include "choose.h"
#include "errorgui.h"
-
-static const gchar RCSid[]="$Id$";
-
/* Some per slave globals */
static GdmDisplay *d;
static gchar *login = NULL;
@@ -419,6 +416,10 @@ gdm_slave_run (GdmDisplay *display)
}
}
+ if (SERVER_IS_LOCAL (d)) {
+ gdm_slave_send (GDM_SOP_START_NEXT_LOCAL, FALSE);
+ }
+
/* something may have gone wrong, try xfailed, if local (non-flexi),
* the toplevel loop of death will handle us */
if (d->dsp == NULL) {
@@ -1253,30 +1254,27 @@ gdm_slave_greeter (void)
}
void
-gdm_slave_send_num (const char *opcode, long num)
+gdm_slave_send (const char *str, gboolean wait_for_usr2)
{
char *msg;
int fd;
char *fifopath;
- gdm_debug ("Sending %s == %ld for slave %ld",
- opcode,
- (long)num,
- (long)getpid ());
+ gdm_debug ("Sending %s", str);
- gdm_got_usr2 = FALSE;
+ if (wait_for_usr2)
+ gdm_got_usr2 = FALSE;
fifopath = g_strconcat (GdmServAuthDir, "/.gdmfifo", NULL);
fd = open (fifopath, O_WRONLY);
/* eek */
if (fd < 0) {
- gdm_error (_("%s: Can't open fifo!"), "gdm_send_num");
+ gdm_error (_("%s: Can't open fifo!"), "gdm_slave_send");
return;
}
- msg = g_strdup_printf ("\n%s %ld %ld\n", opcode,
- (long)getpid (), (long)num);
+ msg = g_strdup_printf ("\n%s\n", str);
write (fd, msg, strlen (msg));
@@ -1284,16 +1282,34 @@ gdm_slave_send_num (const char *opcode, long num)
close (fd);
- if ( ! gdm_got_usr2)
+ if (wait_for_usr2 &&
+ ! gdm_got_usr2)
sleep (10);
}
void
+gdm_slave_send_num (const char *opcode, long num)
+{
+ char *msg;
+
+ gdm_debug ("Sending %s == %ld for slave %ld",
+ opcode,
+ (long)num,
+ (long)getpid ());
+
+
+ msg = g_strdup_printf ("%s %ld %ld", opcode,
+ (long)getpid (), (long)num);
+
+ gdm_slave_send (msg, TRUE);
+
+ g_free (msg);
+}
+
+void
gdm_slave_send_string (const char *opcode, const char *str)
{
char *msg;
- int fd;
- char *fifopath;
/* Evil!, all this for debugging? */
if (GdmDebug) {
@@ -1308,28 +1324,12 @@ gdm_slave_send_string (const char *opcode, const char *str)
(long)getpid ());
}
- gdm_got_usr2 = FALSE;
-
- fifopath = g_strconcat (GdmServAuthDir, "/.gdmfifo", NULL);
-
- fd = open (fifopath, O_WRONLY);
- /* eek */
- if (fd < 0) {
- gdm_error (_("%s: Can't open fifo!"), "gdm_slave_send_string");
- return;
- }
-
- msg = g_strdup_printf ("\n%s %ld %s\n", opcode,
+ msg = g_strdup_printf ("%s %ld %s", opcode,
(long)getpid (), ve_sure_string (str));
- write (fd, msg, strlen (msg));
+ gdm_slave_send (msg, TRUE);
g_free (msg);
-
- close (fd);
-
- if ( ! gdm_got_usr2)
- sleep (10);
}
static void
@@ -2485,13 +2485,22 @@ gdm_slave_child_handler (int sig)
gdm_server_stop (d);
gdm_verify_cleanup (d);
- if (WIFEXITED (status)) {
+ /* The greeter is only allowed to pass back these
+ * exit codes, else we'll just remanage */
+ if (WIFEXITED (status) &&
+ (WEXITSTATUS (status) == DISPLAY_ABORT ||
+ WEXITSTATUS (status) == DISPLAY_REBOOT ||
+ WEXITSTATUS (status) == DISPLAY_HALT ||
+ WEXITSTATUS (status) == DISPLAY_SUSPEND ||
+ WEXITSTATUS (status) == DISPLAY_RESTARTGDM)) {
_exit (WEXITSTATUS (status));
} else {
_exit (DISPLAY_REMANAGE);
}
} else if (pid != 0 && pid == d->sesspid) {
d->sesspid = 0;
+ } else if (pid != 0 && pid == d->chooserpid) {
+ d->chooserpid = 0;
} else if (pid != 0 && pid == d->servpid) {
d->servstat = SERVER_DEAD;
d->servpid = 0;
diff --git a/daemon/slave.h b/daemon/slave.h
index 13fbb538..58d1fd51 100644
--- a/daemon/slave.h
+++ b/daemon/slave.h
@@ -29,6 +29,7 @@ char *gdm_slave_greeter_ctl (char cmd, const char *str);
gboolean gdm_slave_greeter_check_interruption (const char *msg);
gboolean gdm_slave_should_complain (void);
+void gdm_slave_send (const char *str, gboolean wait_for_usr2);
void gdm_slave_send_num (const char *opcode, long num);
void gdm_slave_send_string (const char *opcode, const char *str);
diff --git a/daemon/verify-crypt.c b/daemon/verify-crypt.c
index 28171bcb..05bf2b17 100644
--- a/daemon/verify-crypt.c
+++ b/daemon/verify-crypt.c
@@ -32,9 +32,6 @@
#include "slave.h"
#include "verify.h"
-static const gchar RCSid[]="$Id$";
-
-
/* Configuration option variables */
extern gboolean GdmAllowRoot;
extern gboolean GdmAllowRemoteRoot;
diff --git a/daemon/verify-pam.c b/daemon/verify-pam.c
index c166fa61..56922bd9 100644
--- a/daemon/verify-pam.c
+++ b/daemon/verify-pam.c
@@ -32,9 +32,6 @@
#include "verify.h"
#include "errorgui.h"
-static const gchar RCSid[]="$Id$";
-
-
/* Configuration option variables */
extern gboolean GdmAllowRoot;
extern gboolean GdmAllowRemoteRoot;
diff --git a/daemon/verify-shadow.c b/daemon/verify-shadow.c
index 623d0bd1..4949a073 100644
--- a/daemon/verify-shadow.c
+++ b/daemon/verify-shadow.c
@@ -33,9 +33,6 @@
#include "slave.h"
#include "verify.h"
-static const gchar RCSid[]="$Id$";
-
-
/* Configuration option variables */
extern gboolean GdmAllowRoot;
extern gboolean GdmAllowRemoteRoot;
diff --git a/daemon/xdmcp.c b/daemon/xdmcp.c
index ddc81c5b..7bd1c691 100644
--- a/daemon/xdmcp.c
+++ b/daemon/xdmcp.c
@@ -96,7 +96,6 @@
#include "choose.h"
#include "xdmcp.h"
-static const gchar RCSid[]="$Id$";
gint pending = 0;
#ifdef HAVE_LIBXDMCP
diff --git a/gdm.spec.in b/gdm.spec.in
index e23dc9ca..a894519f 100644
--- a/gdm.spec.in
+++ b/gdm.spec.in
@@ -1,20 +1,21 @@
-%define ver @VERSION@
-%define rel 1
%define localstatedir /var/lib
%define sysconfdir /etc
-Summary: The GNOME Display Manager.
-Name: gdm
-Version: %ver
-Release: %rel
-Copyright: LGPL/GPL
-Group: User Interface/X
-Source: ftp://ftp.5z.com/pub/unix/gdm-%{version}.tar.gz
-BuildRoot: %{_tmppath}/gdm-%{version}-root
-Prereq: /usr/sbin/useradd
-Requires: pam >= 0.68
-Requires: gnome-libs >= 1.0.17
-Epoch: 1
+Summary: The GNOME Display Manager.
+Name: gdm
+Version: @VERSION@
+Release: 1
+Epoch: 1
+License: LGPL/GPL
+Group: User Interface/X
+Source: ftp://ftp.5z.com/pub/unix/gdm-%{version}.tar.gz
+BuildRoot: %{_tmppath}/gdm-%{version}-root
+Prereq: /usr/sbin/useradd
+Requires: pam >= 0.68
+Requires: gnome-libs >= 1.0.17
+BuildRequires: usermode, libglade-devel
+BuildRequires: gnome-libs-devel >= 1.0.17
+BuildRequires: gdk-pixbuf-devel >= 0.7.0
%description
Gdm (the GNOME Display Manager) is a highly configurable
@@ -99,7 +100,7 @@ fi
# ignore error in the above
exit 0
-%files
+%files -f %name.lang
%defattr(-, root, root)
%doc AUTHORS COPYING ChangeLog NEWS README
@@ -113,7 +114,6 @@ exit 0
%{_datadir}/gnome/apps/*/*
%{_datadir}/gnome/help/*
%{_datadir}/omf/gdm
-%{_datadir}/locale/*/*/*
# %config %{sysconfdir}/security/console.apps/gdmconfig
# %config %{sysconfdir}/X11/gdm/gnomerc
# %config %{sysconfdir}/X11/gdm/gdm.conf
@@ -134,6 +134,11 @@ exit 0
%changelog
+* Tue Nov 6 2001 Gregory Leblanc <gleblanc@linuxweasel.com>
+- removed some unnecessary %defines
+- fixed find_lang stuff
+- added some BuildRequires lines
+
* Sun Jul 01 2001 George Lebl <jirka@5z.com>
- Fixed file listing
diff --git a/gui/gdmchooser.c b/gui/gdmchooser.c
index ae840eee..79eb2055 100644
--- a/gui/gdmchooser.c
+++ b/gui/gdmchooser.c
@@ -52,8 +52,6 @@
#include "misc.h"
#include "gdmwm.h"
-static const gchar RCSid[]="$Id$";
-
/* set the DOING_GDM_DEVELOPMENT env variable if you want to
* search for the glade file in the current dir and not the system
* install dir, better then something you have to change
diff --git a/gui/gdmlogin.c b/gui/gdmlogin.c
index 5f79bcde..cf129bb5 100644
--- a/gui/gdmlogin.c
+++ b/gui/gdmlogin.c
@@ -51,8 +51,6 @@
* within the protocol */
static gboolean DOING_GDM_DEVELOPMENT = FALSE;
-static const gchar RCSid[]="$Id$";
-
/* Some strings that are in other files that we may want to
* translate. This is not actually used anywhere, it's just
* to have gettext know about these strings. */
@@ -277,7 +275,7 @@ static void
gdm_login_done (int sig)
{
kill_thingies ();
- _exit (DISPLAY_SUCCESS);
+ _exit (EXIT_SUCCESS);
}
static void
@@ -2211,7 +2209,7 @@ gdm_login_ctrl_handler (GIOChannel *source, GIOCondition cond, gint fd)
g_print ("%c\n", STX);
/* screw gtk_main_quit, we want to make sure we definately die */
- _exit (DISPLAY_SUCCESS);
+ _exit (EXIT_SUCCESS);
break;
case GDM_GNOMESESS:
diff --git a/gui/gdmwm.c b/gui/gdmwm.c
index 18762eae..9908e677 100644
--- a/gui/gdmwm.c
+++ b/gui/gdmwm.c
@@ -33,8 +33,6 @@
#include "gdmwm.h"
#include "gdm.h"
-static const gchar RCSid[]="$Id$";
-
typedef struct _GdmWindow GdmWindow;
struct _GdmWindow {
int x, y;
diff --git a/gui/misc.c b/gui/misc.c
index 01f78279..2ea89e29 100644
--- a/gui/misc.c
+++ b/gui/misc.c
@@ -23,8 +23,6 @@
#include "misc.h"
-static const gchar RCSid[]="$Id$";
-
/* For now empty */
/* EOF */