diff -Naur dbus-0.94-old/config.h.in dbus-0.94/config.h.in --- dbus-0.94-old/config.h.in 2006-10-14 19:28:17.000000000 +0200 +++ dbus-0.94/config.h.in 2006-10-25 18:23:11.206059750 +0200 @@ -36,6 +36,9 @@ /* Support a verbose mode */ #undef DBUS_ENABLE_VERBOSE_MODE +/* Application to provide the current foreground console */ +#undef DBUS_FOREGROUND_CONSOLE_COMMAND + /* Defined if gcov is enabled to force a rebuild due to config.h changing */ #undef DBUS_GCOV_ENABLED diff -Naur dbus-0.94-old/configure.in dbus-0.94/configure.in --- dbus-0.94-old/configure.in 2006-10-14 19:27:49.000000000 +0200 +++ dbus-0.94/configure.in 2006-10-25 18:23:11.206059750 +0200 @@ -1085,6 +1085,16 @@ AC_SUBST(DBUS_CONSOLE_OWNER_FILE) AC_DEFINE_UNQUOTED(DBUS_CONSOLE_OWNER_FILE, "$DBUS_CONSOLE_OWNER_FILE", [File to check for console ownerhip]) +#### Application to check for current console +if ! test -z "$with_foreground_console_command"; then + DBUS_FOREGROUND_CONSOLE_COMMAND=$with_foreground_console_comand +else + DBUS_FOREGROUND_CONSOLE_COMMAND=/usr/lib/dbus-1.0/dbus-foreground-console +fi + +AC_SUBST(DBUS_FOREGROUND_CONSOLE_COMMAND) +AC_DEFINE_UNQUOTED(DBUS_FOREGROUND_CONSOLE_COMMAND, "$DBUS_FOREGROUND_CONSOLE_COMMAND", [Application to provide the current foreground console]) + #### User to start the system bus as if test -z "$with_dbus_user" ; then DBUS_USER=messagebus @@ -1222,6 +1232,7 @@ Console auth dir: ${DBUS_CONSOLE_AUTH_DIR} Console owner file: ${have_console_owner_file} Console owner file path: ${DBUS_CONSOLE_OWNER_FILE} + Foreground console app: ${DBUS_FOREGROUND_CONSOLE_COMMAND} System bus user: ${DBUS_USER} Session bus services dir: ${EXPANDED_DATADIR}/dbus-1/services 'make check' socket dir: ${TEST_SOCKET_DIR} diff -Naur dbus-0.94-old/dbus/dbus-sysdeps-util-unix.c dbus-0.94/dbus/dbus-sysdeps-util-unix.c --- dbus-0.94-old/dbus/dbus-sysdeps-util-unix.c 2006-10-08 18:56:50.000000000 +0200 +++ dbus-0.94/dbus/dbus-sysdeps-util-unix.c 2006-10-25 18:23:11.206059750 +0200 @@ -43,6 +43,7 @@ #include #include #include +#include #ifdef HAVE_SYS_SYSLIMITS_H #include @@ -359,8 +360,40 @@ DBusString f; dbus_bool_t result; + int console; + pid_t fgconsole; result = FALSE; + + fgconsole = fork(); + if (fgconsole == 0) + { + execl (DBUS_FOREGROUND_CONSOLE_COMMAND, DBUS_FOREGROUND_CONSOLE_COMMAND, NULL); + exit (0); + } else if (fgconsole < 0) + { + dbus_set_error (error, DBUS_ERROR_FAILED, + "Failed to fork(): %s\n", _dbus_strerror (errno)); + return FALSE; + } + + if (wait (&console) < 0 || !WIFEXITED (console)) + { + dbus_set_error (error, DBUS_ERROR_FAILED, + "Failed to execute %s: %s\n", + DBUS_FOREGROUND_CONSOLE_COMMAND, _dbus_strerror (errno)); + return FALSE; + } + + console = WEXITSTATUS(console); + + /* Consoles start at 1, so 0 denotes failure */ + if (console == 0) + { + return FALSE; + } + + if (!_dbus_string_init (&f)) { _DBUS_SET_OOM (error); @@ -380,6 +413,19 @@ goto out; } + /* : is used as a separator, since . is a valid username character */ + if (!_dbus_string_append (&f, ":")) + { + _DBUS_SET_OOM (error); + goto out; + } + + if (!_dbus_string_append_int (&f, console)) + { + _DBUS_SET_OOM (error); + goto out; + } + result = _dbus_file_exists (_dbus_string_get_const_data (&f)); out: diff -Naur dbus-0.94-old/tools/dbus-foreground-console.c dbus-0.94/tools/dbus-foreground-console.c --- dbus-0.94-old/tools/dbus-foreground-console.c 1970-01-01 01:00:00.000000000 +0100 +++ dbus-0.94/tools/dbus-foreground-console.c 2006-10-25 18:23:11.210060000 +0200 @@ -0,0 +1,32 @@ +/* dbus-foreground-console + * return the current foreground console + * Heavily based on fgconsole.c from console-tools + * Released under the terms of the GNU general public license, version 2.1 or + * later + */ + +#include +#include +#include +#include +#include +#include + +int main() { + struct vt_stat vtstat; + int fd; + + fd = open("/dev/console", O_RDWR); + + if (fd < 1) { + return 0; + } + + if (ioctl(fd, VT_GETSTATE, &vtstat)) + { + return 0; + } + + return vtstat.v_active; +} + --- dbus/tools/Makefile.am.old 2006-11-07 22:19:37.217104250 +0100 +++ dbus/tools/Makefile.am 2006-11-07 22:20:21.175851500 +0100 @@ -2,7 +2,7 @@ INCLUDES=-I$(top_srcdir) $(DBUS_CLIENT_CFLAGS) $(DBUS_X_CFLAGS) -DDBUS_LOCALEDIR=\"@EXPANDED_DATADIR@/locale\" -DDBUS_COMPILATION -DDBUS_DAEMONDIR=\"@DBUS_DAEMONDIR@\" -DDBUS_MACHINE_UUID_FILE=\""$(localstatedir)/lib/dbus/machine-id"\" -bin_PROGRAMS=dbus-send dbus-monitor dbus-launch dbus-cleanup-sockets dbus-uuidgen +bin_PROGRAMS=dbus-send dbus-monitor dbus-launch dbus-cleanup-sockets dbus-uuidgen dbus-foreground-console dbus_send_SOURCES= \ dbus-print-message.c \ @@ -25,6 +25,9 @@ dbus_uuidgen_SOURCES= \ dbus-uuidgen.c +dbus_foreground_console_SOURCES= \ + dbus-foreground-console.c + dbus_send_LDADD= $(top_builddir)/dbus/libdbus-1.la $(DBUS_CLIENT_LIBS) dbus_send_LDFLAGS=@R_DYNAMIC_LDFLAG@