[pkg-fso-commits] [SCM] Automatic Display Manager branch, bug540201, updated. debian/0.6-1-39-g86710bf
Enrico Zini
enrico at enricozini.org
Wed Jul 6 09:15:54 UTC 2011
The following commit has been merged in the bug540201 branch:
commit 86710bf7ab97b185e0731756aa717f212633540f
Author: Enrico Zini <enrico at enricozini.org>
Date: Wed Jul 6 11:15:51 2011 +0200
Also set server name when parsing x server command line
diff --git a/configure.ac b/configure.ac
index 4333027..5721300 100644
--- a/configure.ac
+++ b/configure.ac
@@ -9,13 +9,13 @@ AC_CONFIG_MACRO_DIR([m4])
dnl AC_GNU_SOURCE
dnl AM_MAINTAINER_MODE
-dnl We use C99
-AC_PROG_CC_C99
-
dnl Checks for programs.
AC_PROG_CC
AC_ISC_POSIX
+dnl We use C99
+AC_PROG_CC_C99
+
dnl Checks for header files.
AC_HEADER_STDC
diff --git a/dm.c b/dm.c
index e2482f0..6318e1a 100644
--- a/dm.c
+++ b/dm.c
@@ -138,9 +138,17 @@ int nodm_display_manager_parse_xcmdline(struct nodm_display_manager* s, const ch
// Server name
if (in_arg < toks->we_wordc &&
toks->we_wordv[in_arg][0] == ':' && isdigit(toks->we_wordv[in_arg][1]))
- argv[argc++] = toks->we_wordv[in_arg++];
+ {
+ argv[argc] = toks->we_wordv[in_arg++];
+ s->srv.name = argv[argc];
+ ++argc;
+ }
else
- argv[argc++] = ":0";
+ {
+ argv[argc] = ":0";
+ s->srv.name = argv[argc];
+ ++argc;
+ }
// Copy other args
while (in_arg < toks->we_wordc)
@@ -164,3 +172,9 @@ cleanup:
return return_code;
}
+
+void nodm_display_manager_dump_status(struct nodm_display_manager* dm)
+{
+ nodm_xserver_dump_status(&dm->srv);
+ nodm_xsession_dump_status(&dm->session);
+}
diff --git a/dm.h b/dm.h
index 593e395..9bdd197 100644
--- a/dm.h
+++ b/dm.h
@@ -64,5 +64,7 @@ int nodm_display_manager_stop(struct nodm_display_manager* dm);
*/
int nodm_display_manager_parse_xcmdline(struct nodm_display_manager* dm, const char* xcmdline);
+/// Dump all internal status to stderr
+void nodm_display_manager_dump_status(struct nodm_display_manager* dm);
#endif
diff --git a/log.c b/log.c
index 4d55046..8b84453 100644
--- a/log.c
+++ b/log.c
@@ -31,6 +31,7 @@ void log_config_init(struct log_config* conf)
conf->log_to_syslog = true;
conf->log_to_stderr = true;
conf->info_to_stderr = false;
+ conf->verbose = false;
}
void log_start(const struct log_config* conf)
@@ -47,6 +48,29 @@ void log_end()
closelog();
}
+void log_verbose(const char* fmt, ...)
+{
+ if (!config->verbose) return;
+
+ va_list ap;
+
+ if (config->info_to_stderr)
+ {
+ fprintf(stderr, "%s:", config->program_name);
+ va_start(ap, fmt);
+ vfprintf(stderr, fmt, ap);
+ va_end(ap);
+ fputc('\n', stderr);
+ }
+
+ if (config->log_to_syslog)
+ {
+ va_start(ap, fmt);
+ vsyslog(LOG_WARNING, fmt, ap);
+ va_end(ap);
+ }
+}
+
void log_info(const char* fmt, ...)
{
va_list ap;
diff --git a/log.h b/log.h
index fc91274..5638228 100644
--- a/log.h
+++ b/log.h
@@ -37,6 +37,9 @@ struct log_config
/// Also log info messages to stderr
bool info_to_stderr;
+
+ /// Log verbose messages
+ bool verbose;
};
/**
@@ -61,7 +64,10 @@ void log_start(const struct log_config* conf);
*/
void log_end();
-/// Log a message about the normal progress of things
+/// Log a message about the trivial normal progress of things
+void log_verbose(const char* fmt, ...);
+
+/// Log a message about the relevant normal progress of things
void log_info(const char* fmt, ...);
/// Log a warning message
diff --git a/test-internals.c b/test-internals.c
index f82a2d8..1ddadb5 100644
--- a/test-internals.c
+++ b/test-internals.c
@@ -28,7 +28,7 @@
int main(int argc, char* argv[])
{
- test_start("test-internals");
+ test_start("test-internals", false);
// Test getenv_with_default
setenv("FOO", "foo", 1);
@@ -43,6 +43,7 @@ int main(int argc, char* argv[])
ensure_equals(s.srv.argv[0], "/usr/bin/X");
ensure_equals(s.srv.argv[1], ":0");
ensure_equals(s.srv.argv[2], NULL);
+ ensure_equals(s.srv.name, ":0");
nodm_display_manager_cleanup(&s);
nodm_display_manager_init(&s);
@@ -51,6 +52,7 @@ int main(int argc, char* argv[])
ensure_equals(s.srv.argv[1], ":0");
ensure_equals(s.srv.argv[2], "foo");
ensure_equals(s.srv.argv[3], NULL);
+ ensure_equals(s.srv.name, ":0");
nodm_display_manager_cleanup(&s);
nodm_display_manager_init(&s);
@@ -58,6 +60,7 @@ int main(int argc, char* argv[])
ensure_equals(s.srv.argv[0], "/usr/bin/Xnest");
ensure_equals(s.srv.argv[1], ":0");
ensure_equals(s.srv.argv[2], NULL);
+ ensure_equals(s.srv.name, ":0");
nodm_display_manager_cleanup(&s);
nodm_display_manager_init(&s);
@@ -65,6 +68,7 @@ int main(int argc, char* argv[])
ensure_equals(s.srv.argv[0], "/usr/bin/X");
ensure_equals(s.srv.argv[1], ":1");
ensure_equals(s.srv.argv[2], NULL);
+ ensure_equals(s.srv.name, ":1");
nodm_display_manager_cleanup(&s);
nodm_display_manager_init(&s);
@@ -72,6 +76,7 @@ int main(int argc, char* argv[])
ensure_equals(s.srv.argv[0], "/usr/bin/Xnest");
ensure_equals(s.srv.argv[1], ":1");
ensure_equals(s.srv.argv[2], NULL);
+ ensure_equals(s.srv.name, ":1");
nodm_display_manager_cleanup(&s);
nodm_display_manager_init(&s);
@@ -80,6 +85,7 @@ int main(int argc, char* argv[])
ensure_equals(s.srv.argv[1], ":0");
ensure_equals(s.srv.argv[2], "foo");
ensure_equals(s.srv.argv[3], NULL);
+ ensure_equals(s.srv.name, ":0");
nodm_display_manager_cleanup(&s);
nodm_display_manager_init(&s);
@@ -88,6 +94,7 @@ int main(int argc, char* argv[])
ensure_equals(s.srv.argv[1], ":1");
ensure_equals(s.srv.argv[2], "foo");
ensure_equals(s.srv.argv[3], NULL);
+ ensure_equals(s.srv.name, ":1");
nodm_display_manager_cleanup(&s);
nodm_display_manager_init(&s);
@@ -96,6 +103,7 @@ int main(int argc, char* argv[])
ensure_equals(s.srv.argv[1], ":1");
ensure_equals(s.srv.argv[2], "foo");
ensure_equals(s.srv.argv[3], NULL);
+ ensure_equals(s.srv.name, ":1");
nodm_display_manager_cleanup(&s);
test_ok();
diff --git a/test-xsession.c b/test-xsession.c
index cfe9f86..b96977a 100644
--- a/test-xsession.c
+++ b/test-xsession.c
@@ -32,11 +32,7 @@ int test_session(struct nodm_xsession_child* s)
int main(int argc, char* argv[])
{
- test_start("test-xsession");
-
- //const char* xcmdline = "/usr/bin/Xnest :1";
- setenv("NODM_SESSION", "/bin/true", 1);
- setenv("NODM_USER", getenv_with_default("USER", "root"), 1);
+ test_start("test-xsession", false);
struct nodm_display_manager dm;
nodm_display_manager_init(&dm);
@@ -48,6 +44,8 @@ int main(int argc, char* argv[])
dm.session.conf_run_as[0] = 0;
dm.session.child_body = test_session;
+ //nodm_display_manager_dump_status(&dm);
+
ensure_succeeds(nodm_display_manager_start(&dm));
ensure_succeeds(nodm_display_manager_wait(&dm));
diff --git a/test-xstart.c b/test-xstart.c
index c75ee2a..ee207c6 100644
--- a/test-xstart.c
+++ b/test-xstart.c
@@ -26,7 +26,7 @@
int main(int argc, char* argv[])
{
- test_start("test-xstart");
+ test_start("test-xstart", false);
struct nodm_xserver srv;
nodm_xserver_init(&srv);
diff --git a/test.c b/test.c
index 94996ea..3d70d3f 100644
--- a/test.c
+++ b/test.c
@@ -23,13 +23,14 @@
#include <string.h>
#include <stdio.h>
-void test_start(const char* testname)
+void test_start(const char* testname, bool verbose)
{
static struct log_config cfg;
cfg.program_name = testname,
cfg.log_to_syslog = false,
cfg.log_to_stderr = true,
- cfg.info_to_stderr = true,
+ cfg.info_to_stderr = verbose,
+ cfg.verbose = verbose,
log_start(&cfg);
}
diff --git a/test.h b/test.h
index 30b7d41..42e3939 100644
--- a/test.h
+++ b/test.h
@@ -23,9 +23,10 @@
#include "log.h"
#include <stdlib.h>
+#include <stdbool.h>
/// Setup the logging system for a test script
-void test_start(const char* testname);
+void test_start(const char* testname, bool verbose);
/// exit() the program reporting a test failure
void test_fail() __attribute__((noreturn));
diff --git a/xserver.c b/xserver.c
index e4752f9..19ea745 100644
--- a/xserver.c
+++ b/xserver.c
@@ -201,6 +201,8 @@ static int xserver_start(struct nodm_xserver* srv, unsigned timeout_sec)
}
}
+ log_verbose("X is ready to accept connections");
+
// Set the DISPLAY env var
if (setenv("DISPLAY", srv->name, 1) == -1)
{
@@ -239,6 +241,14 @@ static int xopendisplay_error_handler(Display* dpy)
exit(E_XLIB_ERROR);
}
+/*
+static int x_error_handler(Display* dpy, XErrorEvent* e)
+{
+ log_err("X error");
+ return 0;
+}
+*/
+
/**
* Connect to the X server
*
@@ -249,11 +259,16 @@ static int xopendisplay_error_handler(Display* dpy)
*/
static int xserver_connect(struct nodm_xserver* srv)
{
+ //XSetErrorHandler(x_error_handler);
+
XSetIOErrorHandler(xopendisplay_error_handler);
srv->dpy = XOpenDisplay(srv->name);
XSetIOErrorHandler((int (*)(Display *))0);
- // Remove close-on-exec and register to close at the next fork, why? We'll find
+ if (srv->dpy == NULL)
+ log_err("could not connect to X server on \"%s\"", srv->name);
+
+ // from xdm: remove close-on-exec and register to close at the next fork, why? We'll find out
// RegisterCloseOnFork (ConnectionNumber (d->dpy));
// fcntl (ConnectionNumber (d->dpy), F_SETFD, 0);
return srv->dpy == NULL ? E_X_SERVER_CONNECT : E_SUCCESS;
@@ -392,3 +407,15 @@ int nodm_xserver_stop(struct nodm_xserver* srv)
return res2;
}
+void nodm_xserver_dump_status(struct nodm_xserver* srv)
+{
+ fprintf(stderr, "xserver start timeout: %d\n", srv->conf_timeout);
+ fprintf(stderr, "xserver command line:");
+ for (const char** s = srv->argv; *s; ++s)
+ fprintf(stderr, " %s", *s);
+ fputc('\n', stderr);
+ fprintf(stderr, "xserver name: %s\n", srv->name);
+ fprintf(stderr, "xserver window path: %s\n", srv->windowpath);
+ fprintf(stderr, "xserver PID: %d\n", (int)srv->pid);
+ fprintf(stderr, "xserver connected: %s\n", (srv->dpy != NULL) ? "yes" : "no");
+}
diff --git a/xserver.h b/xserver.h
index aae2975..70162ca 100644
--- a/xserver.h
+++ b/xserver.h
@@ -53,4 +53,7 @@ int nodm_xserver_start(struct nodm_xserver* srv);
/// Stop the X server
int nodm_xserver_stop(struct nodm_xserver* srv);
+/// Dump all internal status to stderr
+void nodm_xserver_dump_status(struct nodm_xserver* srv);
+
#endif
diff --git a/xsession.c b/xsession.c
index 3348df5..8a8ccf8 100644
--- a/xsession.c
+++ b/xsession.c
@@ -133,3 +133,13 @@ int nodm_xsession_stop(struct nodm_xsession* s)
s->pid = -1;
return E_SUCCESS;
}
+
+void nodm_xsession_dump_status(struct nodm_xsession* s)
+{
+ fprintf(stderr, "xsession command: %s\n", s->conf_session_command);
+ fprintf(stderr, "xsession user: %s\n", s->conf_run_as);
+ fprintf(stderr, "xsession use PAM: %s\n", s->conf_use_pam ? "yes" : "no");
+ fprintf(stderr, "xsession cleanup ~/.xsession-errors: %s\n", s->conf_cleanup_xse ? "yes" : "no");
+ fprintf(stderr, "xsession pid: %d\n", (int)s->pid);
+ fprintf(stderr, "xsession body overridden by test: %s\n", (s->child_body != NULL) ? "yes" : "no");
+}
diff --git a/xsession.h b/xsession.h
index a39dd54..4950795 100644
--- a/xsession.h
+++ b/xsession.h
@@ -62,4 +62,7 @@ int nodm_xsession_start(struct nodm_xsession* s, const struct nodm_xserver* srv)
/// Stop the X session
int nodm_xsession_stop(struct nodm_xsession* s);
+/// Dump all internal status to stderr
+void nodm_xsession_dump_status(struct nodm_xsession* s);
+
#endif
--
Automatic Display Manager
More information about the pkg-fso-commits
mailing list