diff options
author | marcus <marcus@df743ca5-7f9a-e211-a948-0013205c9059> | 2009-07-07 05:18:03 +0800 |
---|---|---|
committer | marcus <marcus@df743ca5-7f9a-e211-a948-0013205c9059> | 2009-07-07 05:18:03 +0800 |
commit | 15da4534fd71827b7d22503babaee9a812aa3fbd (patch) | |
tree | 812429234634e2cdfadb09465b852a53b9d4edf8 /x11/gdm | |
parent | 59672dbe4342e56794beea8468926a892357c2ff (diff) | |
download | marcuscom-ports-15da4534fd71827b7d22503babaee9a812aa3fbd.tar marcuscom-ports-15da4534fd71827b7d22503babaee9a812aa3fbd.tar.gz marcuscom-ports-15da4534fd71827b7d22503babaee9a812aa3fbd.tar.bz2 marcuscom-ports-15da4534fd71827b7d22503babaee9a812aa3fbd.tar.lz marcuscom-ports-15da4534fd71827b7d22503babaee9a812aa3fbd.tar.xz marcuscom-ports-15da4534fd71827b7d22503babaee9a812aa3fbd.tar.zst marcuscom-ports-15da4534fd71827b7d22503babaee9a812aa3fbd.zip |
Add a hack to fix the build with libxklavier 4.0.
git-svn-id: svn://creme-brulee.marcuscom.com/ports/trunk@12425 df743ca5-7f9a-e211-a948-0013205c9059
Diffstat (limited to 'x11/gdm')
30 files changed, 1332 insertions, 0 deletions
diff --git a/x11/gdm/Makefile b/x11/gdm/Makefile new file mode 100644 index 000000000..7e539f71f --- /dev/null +++ b/x11/gdm/Makefile @@ -0,0 +1,98 @@ +# New ports collection makefile for: gdm2 +# Date created: 20 May 2002 +# Whom: Joe Marcus Clarke <marcus@FreeBSD.org> +# +# $FreeBSD$ +# $MCom: ports-stable/x11/gdm/Makefile,v 1.8 2009/04/15 23:39:01 kwm Exp $ +# + +PORTNAME= gdm +PORTVERSION= 2.26.1 +PORTREVISION= 6 +CATEGORIES= x11 gnome +MASTER_SITES= GNOME +DIST_SUBDIR= gnome2 + +MAINTAINER= gnome@FreeBSD.org +COMMENT= GNOME 2 version of xdm display manager + +BUILD_DEPENDS= zenity:${PORTSDIR}/x11/zenity +LIB_DEPENDS= ck-connector.0:${PORTSDIR}/sysutils/consolekit \ + execinfo:${PORTSDIR}/devel/libexecinfo \ + hal.1:${PORTSDIR}/sysutils/hal +RUN_DEPENDS= zenity:${PORTSDIR}/x11/zenity \ + ${LOCALBASE}/libexec/gnome-settings-daemon:${PORTSDIR}/sysutils/gnome-settings-daemon \ + gnome-session:${PORTSDIR}/x11/gnome-session + +USE_BZIP2= yes +USE_GETTEXT= yes +USE_LDCONFIG= yes +USE_XORG= dmx dmxproto +INSTALLS_ICONS= yes +USE_RC_SUBR= gdm +USE_GNOME_SUBR= yes +USE_GMAKE= yes +USE_GNOME= gnomehack intlhack gnomehier libgnomeui librsvg2 gnomedocutils \ + gnomeprefix gnomepanel +GCONF_SCHEMAS= gdm-simple-greeter.schemas +GNU_CONFIGURE= yes +CONFIGURE_ARGS= --with-working-directory=${PREFIX}/etc/gdm/home +CONFIGURE_ENV= CPPFLAGS="-I${LOCALBASE}/include -DHAS_SA_LEN" \ + LDFLAGS="-L${LOCALBASE}/lib" \ + GTKDOC="false" + +SUB_FILES+= gdm.pam + +GDMDIR?= ${PREFIX}/etc/gdm +PKGMESSAGE= ${WRKDIR}/pkg-message + +GNOME_LOCALSTATEDIR= /var + +OPTIONS= IPV6 "Enable IPv6 support" off \ + KEYRING "Enable GnomeKeyring/PAM integration" on + +.include <bsd.port.pre.mk> + +.if defined(WITHOUT_KEYRING) +SUB_LIST+= PAM_KEYRING=\# +.else +RUN_DEPENDS+= ${LOCALBASE}/lib/pam_gnome_keyring.so:${PORTSDIR}/security/gnome-keyring +SUB_LIST+= PAM_KEYRING= +.endif + +.if defined(WITH_IPV6) +CONFIGURE_ARGS+= --enable-ipv6 +.else +CONFIGURE_ARGS+= --disable-ipv6 +.endif + +post-patch: + @${REINPLACE_CMD} -e 's|root:root|root:wheel|g' \ + ${WRKSRC}/data/Makefile.in + @${REINPLACE_CMD} -e 's|/usr/local|${LOCALBASE}|g' \ + -e 's|%%LOCALBASE%%|${LOCALBASE}|g' \ + ${WRKSRC}/daemon/gdm-session-worker.c \ + ${WRKSRC}/data/gconf.path + @${REINPLACE_CMD} -e 's|/bin/true|/usr/bin/true|g' \ + ${WRKSRC}/data/session-setup.entries + @${REINPLACE_CMD} -e 's|/usr/X11R6|${LOCALBASE}|g' \ + ${WRKSRC}/configure ${WRKSRC}/daemon/*.c ${WRKSRC}/po/*.po + +post-install: + ${INSTALL_DATA} ${WRKSRC}/data/gconf.path \ + ${PREFIX}/share/gdm/gconf.path + ${INSTALL_DATA} ${WRKSRC}/data/session-setup.entries \ + ${PREFIX}/share/gdm/session-setup.entries +.if !defined(PACKAGE_BUILDING) + @${SETENV} PKG_PREFIX=${PREFIX} ${SH} ${PKGINSTALL} ${PKGNAME} POST-INSTALL +.endif + ${INSTALL_DATA} ${WRKSRC}/data/gdm.conf-custom \ + ${PREFIX}/etc/gdm/custom.conf.default + ${MKDIR} ${PREFIX}/share/xsessions + ${INSTALL_DATA} ${WRKDIR}/gdm.pam ${PREFIX}/etc/pam.d/gdm + @${MKDIR} ${PREFIX}/etc/gdm/Sessions + @${SED} -e 's|%%PREFIX%%|${PREFIX}|g' < ${PKGDIR}/pkg-message \ + | /usr/bin/fmt 75 79 > ${PKGMESSAGE} + @${CAT} ${PKGMESSAGE} + +.include <bsd.port.post.mk> diff --git a/x11/gdm/distinfo b/x11/gdm/distinfo new file mode 100644 index 000000000..e0eb9e84b --- /dev/null +++ b/x11/gdm/distinfo @@ -0,0 +1,3 @@ +MD5 (gnome2/gdm-2.26.1.tar.bz2) = c2c15f8b741962f278fa7e790aaa9a2b +SHA256 (gnome2/gdm-2.26.1.tar.bz2) = 34abc69bdfd1b6bb6d1f64dd1e34652c61310dc69305712d7aeec6203678fa4c +SIZE (gnome2/gdm-2.26.1.tar.bz2) = 2526832 diff --git a/x11/gdm/files/gdm.in b/x11/gdm/files/gdm.in new file mode 100644 index 000000000..fe194b765 --- /dev/null +++ b/x11/gdm/files/gdm.in @@ -0,0 +1,62 @@ +#!/bin/sh +# $FreeBSD: ports/x11/gdm/files/gdm.in,v 1.16 2009/05/03 02:54:34 marcus Exp $ +# $MCom$ + +# PROVIDE: gdm +# REQUIRE: LOGIN cleanvar moused syscons dbus hald +# +# Add the following to /etc/rc.conf to start GDM at boot time: +# +# gdm_enable="YES" +# + +. %%RC_SUBR%% +. %%GNOME_SUBR%% + +gdm_enable=${gdm_enable-${gnome_enable}} +gdm_preserve_base_pam_conf=${gdm_preserve_base_pam_conf-NO} +gdm_lang=${gdm_lang-${LANG}} + +export PATH=/bin:/sbin:/usr/bin:/usr/sbin:%%LOCALBASE%%/bin:%%LOCALBASE%%/sbin + +name="gdm" +rcvar=`set_rcvar` +command="%%PREFIX%%/sbin/${name}" +pidfile="/var/run/${name}.pid" +procname="%%PREFIX%%/sbin/gdm-binary" +start_cmd="gdm_start" + +gdm_start() +{ + if ! checkyesno gdm_enable ; then + return 0 + fi + echo "Starting ${name}." + + # make sure there is no pam configuration for gdm service in base system + if ! checkyesno gdm_preserve_base_pam_conf && [ -f /etc/pam.d/gdm ]; then + cp -p /etc/pam.d/gdm /etc/pam.d/gdm_disabled + rm -f /etc/pam.d/gdm + fi + + ( iter=0 + while ! ps -axoargs | grep "^/usr/libexec/getty " | grep -qv grep >/dev/null 2>&1; do + if [ ${iter} -eq 60 ]; then + break + fi + sleep 1 + iter=$(expr ${iter} + 1) + done + iter=0 + while ! %%LOCALBASE%%/bin/lshal >/dev/null 2>&1 ; do + if [ ${iter} -eq 60 ]; then + break + fi + sleep 1 + iter=$(expr ${iter} + 1) + done + LANG=${gdm_lang} ${command} ${gdm_flags} ) & +} + +load_rc_config ${name} +run_rc_command "$1" diff --git a/x11/gdm/files/gdm.pam.in b/x11/gdm/files/gdm.pam.in new file mode 100644 index 000000000..36f3747e0 --- /dev/null +++ b/x11/gdm/files/gdm.pam.in @@ -0,0 +1,22 @@ +# +# $FreeBSD: ports/x11/gdm/files/gdm.pam.in,v 1.4 2009/04/24 06:38:22 kwm Exp $ +# $MCom$ +# +# PAM configuration for the "gdm" service +# + +# auth +#auth sufficient pam_krb5.so no_warn try_first_pass +#auth sufficient pam_ssh.so no_warn try_first_pass +auth required pam_unix.so no_warn try_first_pass +%%PAM_KEYRING%%auth optional %%LOCALBASE%%/lib/pam_gnome_keyring.so + +# account +account required pam_nologin.so +#account required pam_krb5.so +account required pam_unix.so + +# session +#session optional pam_ssh.so +session required pam_permit.so +%%PAM_KEYRING%%session optional %%LOCALBASE%%/lib/pam_gnome_keyring.so auto_start diff --git a/x11/gdm/files/patch-common_Makefile.in b/x11/gdm/files/patch-common_Makefile.in new file mode 100644 index 000000000..2ab0a5001 --- /dev/null +++ b/x11/gdm/files/patch-common_Makefile.in @@ -0,0 +1,20 @@ +--- common/Makefile.in.orig 2008-08-20 14:34:16.000000000 -0400 ++++ common/Makefile.in 2008-08-20 14:36:50.000000000 -0400 +@@ -428,7 +428,8 @@ gdm_crash_logger_CPPFLAGS = \ + -DLOCALSTATEDIR=\"$(localstatedir)\" \ + $(NULL) + +-gdm_crash_logger_LDADD = $(GTHREAD_LIBS) ++gdm_crash_logger_LDADD = $(GTHREAD_LIBS) \ ++ -lexecinfo + @MKDTEMP_MISSING_FALSE@MKDTEMP_FILES = + @MKDTEMP_MISSING_TRUE@MKDTEMP_FILES = mkdtemp.c mkdtemp.h + libgdmcommon_la_SOURCES = \ +@@ -473,6 +474,7 @@ libgdmcommon_la_CFLAGS = \ + $(NULL) + + libgdmcommon_la_LIBADD = \ ++ -lexecinfo \ + $(NULL) + + libgdmcommon_la_LDFLAGS = \ diff --git a/x11/gdm/files/patch-common_gdm-address.c b/x11/gdm/files/patch-common_gdm-address.c new file mode 100644 index 000000000..a827d4b6d --- /dev/null +++ b/x11/gdm/files/patch-common_gdm-address.c @@ -0,0 +1,45 @@ +--- common/gdm-address.c.orig 2009-02-19 21:45:13.000000000 -0500 ++++ common/gdm-address.c 2009-05-11 02:38:17.000000000 -0400 +@@ -29,6 +29,8 @@ + #include <stropts.h> + #endif + #include <string.h> ++#include <sys/types.h> ++#include <sys/param.h> + #ifdef HAVE_SYS_SOCKET_H + #include <sys/socket.h> + #endif +@@ -37,7 +39,6 @@ + #endif + #include <netdb.h> + #include <sys/ioctl.h> +-#include <net/if.h> + + #ifndef G_OS_WIN32 + #include <sys/select.h> +@@ -47,6 +48,7 @@ + #include <winsock2.h> + #include <ws2tcpip.h> + #endif ++#include <net/if.h> + + #include <glib-object.h> + +@@ -206,7 +208,7 @@ gdm_address_get_hostname (GdmAddress *ad + + host [0] = '\0'; + res = getnameinfo ((const struct sockaddr *)address->ss, +- sizeof (struct sockaddr_storage), ++ gdm_sockaddr_len (address->ss), + host, sizeof (host), + NULL, 0, + 0); +@@ -245,7 +247,7 @@ gdm_address_get_numeric_info (GdmAddress + host [0] = '\0'; + serv [0] = '\0'; + res = getnameinfo ((const struct sockaddr *)address->ss, +- sizeof (struct sockaddr_storage), ++ gdm_sockaddr_len (address->ss), + host, sizeof (host), + serv, sizeof (serv), + NI_NUMERICHOST | NI_NUMERICSERV); diff --git a/x11/gdm/files/patch-common_gdm-address.h b/x11/gdm/files/patch-common_gdm-address.h new file mode 100644 index 000000000..a4fd39310 --- /dev/null +++ b/x11/gdm/files/patch-common_gdm-address.h @@ -0,0 +1,11 @@ +--- common/gdm-address.h.orig 2009-05-09 21:08:07.000000000 -0400 ++++ common/gdm-address.h 2009-05-09 21:08:34.000000000 -0400 +@@ -36,6 +36,8 @@ G_BEGIN_DECLS + + #define GDM_TYPE_ADDRESS (gdm_address_get_type ()) + ++#define gdm_sockaddr_len(sa) (((struct sockaddr *)sa)->sa_family == AF_INET6 ? sizeof(struct sockaddr_in6) : sizeof(struct sockaddr_in)) ++ + typedef struct _GdmAddress GdmAddress; + + GType gdm_address_get_type (void); diff --git a/x11/gdm/files/patch-common_gdm-common.c b/x11/gdm/files/patch-common_gdm-common.c new file mode 100644 index 000000000..9fa4acafa --- /dev/null +++ b/x11/gdm/files/patch-common_gdm-common.c @@ -0,0 +1,13 @@ +--- common/gdm-common.c.orig 2007-12-23 10:29:20.000000000 +0100 ++++ common/gdm-common.c 2007-12-23 10:29:34.000000000 +0100 +@@ -33,6 +33,10 @@ + + #include "gdm-common.h" + ++#ifndef ENODATA ++#define ENODATA EAGAIN ++#endif ++ + void + gdm_set_fatal_warnings_if_unstable (void) + { diff --git a/x11/gdm/files/patch-config.h.in b/x11/gdm/files/patch-config.h.in new file mode 100644 index 000000000..d17901da1 --- /dev/null +++ b/x11/gdm/files/patch-config.h.in @@ -0,0 +1,12 @@ +--- config.h.in.orig 2007-11-02 20:48:28.000000000 -0400 ++++ config.h.in 2007-11-02 20:49:39.000000000 -0400 +@@ -23,6 +23,9 @@ + #undef HAVE_LC_MESSAGES + #undef HAVE_LIBSM + #undef HAVE_LIBXDMCP ++#undef HAVE_LOGIN ++#undef HAVE_LOGOUT ++#undef HAVE_LOGWTMP + #undef HAVE_LOGINCAP + #undef HAVE_LOGINDEVPERM + #undef HAVE_LOGINRESTRICTIONS diff --git a/x11/gdm/files/patch-configure b/x11/gdm/files/patch-configure new file mode 100644 index 000000000..baa14aa86 --- /dev/null +++ b/x11/gdm/files/patch-configure @@ -0,0 +1,69 @@ +--- configure.orig 2009-05-02 22:45:53.000000000 -0400 ++++ configure 2009-05-02 22:47:16.000000000 -0400 +@@ -19163,15 +19163,18 @@ if test -n "$DAEMON_CFLAGS"; then + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"dbus-glib-1 >= \$DBUS_GLIB_REQUIRED_VERSION + gobject-2.0 >= \$GLIB_REQUIRED_VERSION ++ hal + \"") >&5 + ($PKG_CONFIG --exists --print-errors "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION + gobject-2.0 >= $GLIB_REQUIRED_VERSION ++ hal + ") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_DAEMON_CFLAGS=`$PKG_CONFIG --cflags "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION + gobject-2.0 >= $GLIB_REQUIRED_VERSION ++ hal + " 2>/dev/null` + else + pkg_failed=yes +@@ -19185,15 +19188,18 @@ if test -n "$DAEMON_LIBS"; then + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"dbus-glib-1 >= \$DBUS_GLIB_REQUIRED_VERSION + gobject-2.0 >= \$GLIB_REQUIRED_VERSION ++ hal + \"") >&5 + ($PKG_CONFIG --exists --print-errors "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION + gobject-2.0 >= $GLIB_REQUIRED_VERSION ++ hal + ") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_DAEMON_LIBS=`$PKG_CONFIG --libs "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION + gobject-2.0 >= $GLIB_REQUIRED_VERSION ++ hal + " 2>/dev/null` + else + pkg_failed=yes +@@ -19214,10 +19220,12 @@ fi + if test $_pkg_short_errors_supported = yes; then + DAEMON_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION + gobject-2.0 >= $GLIB_REQUIRED_VERSION ++ hal + " 2>&1` + else + DAEMON_PKG_ERRORS=`$PKG_CONFIG --print-errors "dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION + gobject-2.0 >= $GLIB_REQUIRED_VERSION ++ hal + " 2>&1` + fi + # Put the nasty error message in config.log where it belongs +@@ -19225,6 +19233,7 @@ fi + + { { $as_echo "$as_me:$LINENO: error: Package requirements (dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION + gobject-2.0 >= $GLIB_REQUIRED_VERSION ++ hal + ) were not met: + + $DAEMON_PKG_ERRORS +@@ -19238,6 +19247,7 @@ See the pkg-config man page for more det + " >&5 + $as_echo "$as_me: error: Package requirements (dbus-glib-1 >= $DBUS_GLIB_REQUIRED_VERSION + gobject-2.0 >= $GLIB_REQUIRED_VERSION ++ hal + ) were not met: + + $DAEMON_PKG_ERRORS diff --git a/x11/gdm/files/patch-daemon-gdm-xdmcp-display-factory.c b/x11/gdm/files/patch-daemon-gdm-xdmcp-display-factory.c new file mode 100644 index 000000000..63fb5db1c --- /dev/null +++ b/x11/gdm/files/patch-daemon-gdm-xdmcp-display-factory.c @@ -0,0 +1,156 @@ +--- daemon/gdm-xdmcp-display-factory.c.orig 2009-03-16 16:12:08.000000000 -0400 ++++ daemon/gdm-xdmcp-display-factory.c 2009-05-16 18:17:26.000000000 -0400 +@@ -35,6 +35,7 @@ + #include <netdb.h> + #include <arpa/inet.h> + #include <net/if.h> ++#include <netinet/in.h> + #ifdef HAVE_SYS_SOCKIO_H + #include <sys/sockio.h> + #endif +@@ -76,7 +77,7 @@ int deny_severity = LOG_WARNING; + #define DEFAULT_USE_MULTICAST FALSE + #define DEFAULT_MULTICAST_ADDRESS "ff02::1" + #define DEFAULT_HONOR_INDIRECT TRUE +-#define DEFAULT_MAX_DISPLAYS_PER_HOST 1 ++#define DEFAULT_MAX_DISPLAYS_PER_HOST 2 + #define DEFAULT_MAX_DISPLAYS 16 + #define DEFAULT_MAX_PENDING_DISPLAYS 4 + #define DEFAULT_MAX_WAIT 30 +@@ -404,6 +405,11 @@ static int + create_socket (struct addrinfo *ai) + { + int sock; ++#ifdef ENABLE_IPV6 ++#ifdef IPV6_V6ONLY ++ int off = 0; ++#endif ++#endif + + sock = socket (ai->ai_family, ai->ai_socktype, ai->ai_protocol); + if (sock < 0) { +@@ -411,6 +417,16 @@ create_socket (struct addrinfo *ai) + return sock; + } + ++#ifdef ENABLE_IPV6 ++#ifdef IPV6_V6ONLY ++ if (setsockopt (sock, IPPROTO_IPV6, IPV6_V6ONLY, (void *)&off, sizeof (off)) < 0) { ++ g_warning ("setsockopt: %s", g_strerror (errno)); ++ close (sock); ++ return -1; ++ } ++#endif ++#endif ++ + if (bind (sock, ai->ai_addr, ai->ai_addrlen) < 0) { + g_warning ("bind: %s", g_strerror (errno)); + close (sock); +@@ -833,7 +849,7 @@ gdm_xdmcp_send_willing (GdmXdmcpDisplayF + XdmcpFlush (factory->priv->socket_fd, + &factory->priv->buf, + (XdmcpNetaddr)gdm_address_peek_sockaddr_storage (address), +- (int)sizeof (struct sockaddr_storage)); ++ (int)gdm_sockaddr_len (gdm_address_peek_sockaddr_storage (address))); + + g_free (status.data); + } +@@ -877,7 +893,7 @@ gdm_xdmcp_send_unwilling (GdmXdmcpDispla + XdmcpFlush (factory->priv->socket_fd, + &factory->priv->buf, + (XdmcpNetaddr)gdm_address_peek_sockaddr_storage (address), +- (int)sizeof (struct sockaddr_storage)); ++ (int)gdm_sockaddr_len (gdm_address_peek_sockaddr_storage (address))); + + last_time = time (NULL); + } +@@ -986,7 +1002,7 @@ gdm_xdmcp_send_forward_query (GdmXdmcpDi + XdmcpFlush (factory->priv->socket_fd, + &factory->priv->buf, + (XdmcpNetaddr)gdm_address_peek_sockaddr_storage (ic->chosen_address), +- (int)sizeof (struct sockaddr_storage)); ++ (int)gdm_sockaddr_len (gdm_address_peek_sockaddr_storage (ic->chosen_address))); + + g_free (port.data); + g_free (addr.data); +@@ -1689,7 +1705,7 @@ gdm_xdmcp_really_send_managed_forward (G + XdmcpFlush (factory->priv->socket_fd, + &factory->priv->buf, + (XdmcpNetaddr)gdm_address_peek_sockaddr_storage (address), +- (int)sizeof (struct sockaddr_storage)); ++ (int)gdm_sockaddr_len (gdm_address_peek_sockaddr_storage (address))); + + g_free (addr.data); + } +@@ -1770,7 +1786,7 @@ gdm_xdmcp_send_got_managed_forward (GdmX + XdmcpFlush (factory->priv->socket_fd, + &factory->priv->buf, + (XdmcpNetaddr)gdm_address_peek_sockaddr_storage (address), +- (int)sizeof (struct sockaddr_storage)); ++ (int)gdm_sockaddr_len (gdm_address_peek_sockaddr_storage (address))); + } + + static gboolean +@@ -1943,7 +1959,7 @@ gdm_xdmcp_send_decline (GdmXdmcpDisplayF + XdmcpFlush (factory->priv->socket_fd, + &factory->priv->buf, + (XdmcpNetaddr)gdm_address_peek_sockaddr_storage (address), +- (int)sizeof (struct sockaddr_storage)); ++ (int)gdm_sockaddr_len (gdm_address_peek_sockaddr_storage (address))); + + /* Send MANAGED_FORWARD to indicate that the connection + * reached some sort of resolution */ +@@ -2091,7 +2107,7 @@ gdm_xdmcp_send_accept (GdmXdmcpDisplayFa + XdmcpFlush (factory->priv->socket_fd, + &factory->priv->buf, + (XdmcpNetaddr)gdm_address_peek_sockaddr_storage (address), +- (int)sizeof (struct sockaddr_storage)); ++ (int)gdm_sockaddr_len (gdm_address_peek_sockaddr_storage (address))); + + host = NULL; + gdm_address_get_numeric_info (address, &host, NULL); +@@ -2309,8 +2325,6 @@ gdm_xdmcp_handle_request (GdmXdmcpDispla + authorization_data.data = (CARD8 *) cookie->data; + authorization_data.length = cookie->len; + +- g_array_free (cookie, TRUE); +- + /* the addrs are NOT copied */ + gdm_xdmcp_send_accept (factory, + address, +@@ -2319,6 +2333,8 @@ gdm_xdmcp_handle_request (GdmXdmcpDispla + &authentication_data, + &authorization_name, + &authorization_data); ++ ++ g_array_free (cookie, TRUE); + } + } + } else { +@@ -2422,7 +2438,7 @@ gdm_xdmcp_send_failed (GdmXdmcpDisplayFa + XdmcpFlush (factory->priv->socket_fd, + &factory->priv->buf, + (XdmcpNetaddr)gdm_address_peek_sockaddr_storage (address), +- (int)sizeof (struct sockaddr_storage)); ++ (int)gdm_sockaddr_len (gdm_address_peek_sockaddr_storage (address))); + } + + static void +@@ -2446,7 +2462,7 @@ gdm_xdmcp_send_refuse (GdmXdmcpDisplayFa + XdmcpFlush (factory->priv->socket_fd, + &factory->priv->buf, + (XdmcpNetaddr)gdm_address_peek_sockaddr_storage (address), +- (int)sizeof (struct sockaddr_storage)); ++ (int)gdm_sockaddr_len (gdm_address_peek_sockaddr_storage (address))); + + /* + * This was from a forwarded query quite apparently so +@@ -2717,7 +2733,7 @@ gdm_xdmcp_send_alive (GdmXdmcpDisplayFac + XdmcpFlush (factory->priv->socket_fd, + &factory->priv->buf, + (XdmcpNetaddr)gdm_address_peek_sockaddr_storage (address), +- (int)sizeof (struct sockaddr_storage)); ++ (int)gdm_sockaddr_len (gdm_address_peek_sockaddr_storage (address))); + } + + static void diff --git a/x11/gdm/files/patch-daemon_Makefile.in b/x11/gdm/files/patch-daemon_Makefile.in new file mode 100644 index 000000000..137352970 --- /dev/null +++ b/x11/gdm/files/patch-daemon_Makefile.in @@ -0,0 +1,18 @@ +--- daemon/Makefile.in.orig 2009-05-31 15:51:18.000000000 -0400 ++++ daemon/Makefile.in 2009-05-31 15:56:32.000000000 -0400 +@@ -525,6 +525,7 @@ test_session_LDADD = \ + $(XLIB_LIBS) \ + $(EXTRA_DAEMON_LIBS) \ + $(DAEMON_LIBS) \ ++ $(EXTRA_DAEMON_LIBS) \ + $(PAM_LIBS) \ + $(NULL) + +@@ -660,6 +661,7 @@ gdm_session_worker_SOURCES = session-wor + gdm_session_worker_LDFLAGS = \ + $(XLIB_LIBS) \ + $(PAM_LIBS) \ ++ $(EXTRA_DAEMON_LIBS) \ + $(NULL) + + gdm_session_worker_LDADD = \ diff --git a/x11/gdm/files/patch-daemon_gdm-display-access-file.c b/x11/gdm/files/patch-daemon_gdm-display-access-file.c new file mode 100644 index 000000000..0f54784ec --- /dev/null +++ b/x11/gdm/files/patch-daemon_gdm-display-access-file.c @@ -0,0 +1,12 @@ +--- daemon/gdm-display-access-file.c.orig 2009-04-16 01:32:41.000000000 +0200 ++++ daemon/gdm-display-access-file.c 2009-04-16 01:33:17.000000000 +0200 +@@ -41,6 +41,9 @@ + #include "gdm-display-access-file.h" + #include "gdm-common.h" + ++/* OpenBSD defines 255, glibc defines 64. */ ++#define HOST_NAME_MAX 64 ++ + struct _GdmDisplayAccessFilePrivate + { + char *username; diff --git a/x11/gdm/files/patch-daemon_gdm-session-worker.c b/x11/gdm/files/patch-daemon_gdm-session-worker.c new file mode 100644 index 000000000..0c56d5da4 --- /dev/null +++ b/x11/gdm/files/patch-daemon_gdm-session-worker.c @@ -0,0 +1,67 @@ +--- daemon/gdm-session-worker.c.orig 2009-04-14 10:01:14.000000000 -0400 ++++ daemon/gdm-session-worker.c 2009-05-31 15:52:10.000000000 -0400 +@@ -31,6 +31,9 @@ + #include <errno.h> + #include <grp.h> + #include <pwd.h> ++#ifdef HAVE_LOGINCAP ++#include <login_cap.h> ++#endif + + #include <security/pam_appl.h> + +@@ -332,7 +335,7 @@ gdm_session_execute (const char *file, + * what to search if PATH is unset. POSIX may, dunno. + */ + +- path = "/bin:/usr/bin:."; ++ path = "/bin:/usr/bin:/usr/local/bin:."; + } + + len = strlen (file) + 1; +@@ -1757,11 +1760,12 @@ gdm_session_worker_start_user_session (G + char **environment; + char *home_dir; + int fd; ++#ifdef HAVE_LOGINCAP ++ char *login = worker->priv->username; ++ struct passwd *pwent = getpwnam (login); ++#endif + +- if (setuid (worker->priv->uid) < 0) { +- g_debug ("GdmSessionWorker: could not reset uid - %s", g_strerror (errno)); +- _exit (1); +- } ++ /* Call setsid() before setusercontext() */ + + if (setsid () < 0) { + g_debug ("GdmSessionWorker: could not set pid '%u' as leader of new session and process group - %s", +@@ -1769,6 +1773,28 @@ gdm_session_worker_start_user_session (G + _exit (2); + } + ++#ifdef HAVE_LOGINCAP ++ if (setusercontext (NULL, pwent, pwent->pw_uid, ++ LOGIN_SETLOGIN | LOGIN_SETPATH | ++ LOGIN_SETPRIORITY | LOGIN_SETRESOURCES | ++ LOGIN_SETUMASK | LOGIN_SETUSER | ++ LOGIN_SETENV) < 0) { ++ g_debug ("%s: setusercontext () failed for %s. " ++ "Aborting.", "gdm_session_worker_start_user_session", ++ login ? login : "(null)"); ++ } ++ ++ /* Propagate PATH environment variable from user context to child processes */ ++ ++ gdm_session_worker_set_environment_variable (worker, "PATH", getenv ("PATH")); ++ ++#else ++ if (setuid (worker->priv->uid) < 0) { ++ g_debug ("GdmSessionWorker: could not reset uid - %s", g_strerror (errno)); ++ _exit (1); ++ } ++#endif ++ + environment = gdm_session_worker_get_environment (worker); + + g_assert (geteuid () == getuid ()); diff --git a/x11/gdm/files/patch-data_Xsession.in b/x11/gdm/files/patch-data_Xsession.in new file mode 100644 index 000000000..894c97d16 --- /dev/null +++ b/x11/gdm/files/patch-data_Xsession.in @@ -0,0 +1,39 @@ +--- data/Xsession.in.orig 2008-05-12 20:25:54.000000000 -0400 ++++ data/Xsession.in 2008-06-09 01:29:59.000000000 -0400 +@@ -231,12 +231,31 @@ if [ "x$command" = "xdefault" ] ; then + fi + fi + ++is_gnome=0 ++if [ "x$command" = "xgnome-session" ]; then ++ is_gnome=1 ++fi ++ ++# add seahorse-agent if found ++if [ ${is_gnome} = 1 ]; then ++ seahorseagent="`gdmwhich seahorse-agent`" ++ if [ -n "$seahorseagent" ] && [ -x "$seahorseagent" ] && [ -z "$GPG_AGENT_INFO" ] ; then ++ command="dbus-launch --exit-with-session $seahorseagent --execute $command" ++ elif [ -z "$seahorseagent" ] ; then ++ echo "$0: seahorse-agent not found!" ++ fi ++fi ++ + # add ssh-agent if found +-sshagent="`gdmwhich ssh-agent`" +-if [ -n "$sshagent" ] && [ -x "$sshagent" ] && [ -z "$SSH_AUTH_SOCK" ]; then +- command="$sshagent -- $command" +-elif [ -z "$sshagent" ] ; then +- echo "$0: ssh-agent not found!" ++# ssh-agent functionality is handled by gnome-keyring-daemon which is launched ++# from gnome-session ++if [ ${is_gnome} != 1 ]; then ++ sshagent="`gdmwhich ssh-agent`" ++ if [ -n "$sshagent" ] && [ -x "$sshagent" ] && [ -z "$SSH_AUTH_SOCK" ]; then ++ command="$sshagent -- $command" ++ elif [ -z "$sshagent" ] ; then ++ echo "$0: ssh-agent not found!" ++ fi + fi + + echo "$0: Setup done, will execute: $command" diff --git a/x11/gdm/files/patch-data_gconf.path b/x11/gdm/files/patch-data_gconf.path new file mode 100644 index 000000000..2efdb3cc9 --- /dev/null +++ b/x11/gdm/files/patch-data_gconf.path @@ -0,0 +1,9 @@ +--- data/gconf.path.orig 2008-12-26 17:04:03.000000000 -0500 ++++ data/gconf.path 2008-12-26 17:04:13.000000000 -0500 +@@ -1,5 +1,5 @@ + # treat system-wide settings as mandatory +-xml:readonly:/etc/gconf/gconf.xml.system ++xml:readonly:%%LOCALBASE%%/etc/gconf/gconf.xml.system + + # override some settings + # we treat settings in this location as diff --git a/x11/gdm/files/patch-data_gdm.schemas.in.in b/x11/gdm/files/patch-data_gdm.schemas.in.in new file mode 100644 index 000000000..f52dd8bd5 --- /dev/null +++ b/x11/gdm/files/patch-data_gdm.schemas.in.in @@ -0,0 +1,11 @@ +--- data/gdm.schemas.in.in.orig 2009-05-16 18:17:53.000000000 -0400 ++++ data/gdm.schemas.in.in 2009-05-16 18:18:01.000000000 -0400 +@@ -77,7 +77,7 @@ + <schema> + <key>xdmcp/DisplaysPerHost</key> + <signature>i</signature> +- <default>1</default> ++ <default>2</default> + </schema> + <schema> + <key>xdmcp/Port</key> diff --git a/x11/gdm/files/patch-data_greeter-autostart_gdm-simple-greeter.desktop.in.in b/x11/gdm/files/patch-data_greeter-autostart_gdm-simple-greeter.desktop.in.in new file mode 100644 index 000000000..7febf5165 --- /dev/null +++ b/x11/gdm/files/patch-data_greeter-autostart_gdm-simple-greeter.desktop.in.in @@ -0,0 +1,7 @@ +--- data/greeter-autostart/gdm-simple-greeter.desktop.in.in.orig 2008-11-23 22:22:04.000000000 -0500 ++++ data/greeter-autostart/gdm-simple-greeter.desktop.in.in 2008-11-23 22:22:09.000000000 -0500 +@@ -5,4 +5,3 @@ Exec=@LIBEXECDIR@/gdm-simple-greeter + OnlyShowIn=GNOME; + X-GNOME-Autostart-Phase=Application + X-GNOME-Autostart-Notify=true +-X-GNOME-AutoRestart=true diff --git a/x11/gdm/files/patch-gui_simple-chooser_gdm-host-chooser-widget.c b/x11/gdm/files/patch-gui_simple-chooser_gdm-host-chooser-widget.c new file mode 100644 index 000000000..340e955b3 --- /dev/null +++ b/x11/gdm/files/patch-gui_simple-chooser_gdm-host-chooser-widget.c @@ -0,0 +1,38 @@ +--- gui/simple-chooser/gdm-host-chooser-widget.c.orig 2009-02-19 21:45:09.000000000 -0500 ++++ gui/simple-chooser/gdm-host-chooser-widget.c 2009-05-11 02:34:20.000000000 -0400 +@@ -311,7 +311,7 @@ do_ping (GdmHostChooserWidget *widget, + res = XdmcpFlush (widget->priv->socket_fd, + &widget->priv->broadcast_buf, + (XdmcpNetaddr)gdm_address_peek_sockaddr_storage (address), +- (int)sizeof (struct sockaddr_storage)); ++ (int)gdm_sockaddr_len (gdm_address_peek_sockaddr_storage (address))); + if (! res) { + g_warning ("Unable to flush the XDMCP broadcast packet: %s", g_strerror (errno)); + } +@@ -328,7 +328,7 @@ do_ping (GdmHostChooserWidget *widget, + res = XdmcpFlush (widget->priv->socket_fd, + &widget->priv->query_buf, + (XdmcpNetaddr)gdm_address_peek_sockaddr_storage (address), +- (int)sizeof (struct sockaddr_storage)); ++ (int)gdm_sockaddr_len (gdm_address_peek_sockaddr_storage (address))); + if (! res) { + g_warning ("Unable to flush the XDMCP query packet"); + } +@@ -442,7 +442,7 @@ find_broadcast_addresses (GdmHostChooser + /* paranoia */ + ifreq.ifr_name[sizeof (ifreq.ifr_name) - 1] = '\0'; + +- if (ioctl (sock, SIOCGIFFLAGS, &ifreq) < 0) { ++ if ((ioctl (sock, SIOCGIFFLAGS, &ifreq) < 0) && (errno != ENXIO)) { + g_warning ("Could not get SIOCGIFFLAGS for %s", ifr[i].ifr_name); + } + +@@ -542,6 +542,8 @@ xdmcp_init (GdmHostChooserWidget *widget + #ifdef ENABLE_IPV6 + widget->priv->socket_fd = socket (AF_INET6, SOCK_DGRAM, 0); + if (widget->priv->socket_fd != -1) { ++ int off = 0; ++ setsockopt(widget->priv->socket_fd, IPPROTO_IPV6, IPV6_V6ONLY, (void *)&off, sizeof (off)); + widget->priv->have_ipv6 = TRUE; + } + #endif diff --git a/x11/gdm/files/patch-gui_simple-greeter_Makefile.in b/x11/gdm/files/patch-gui_simple-greeter_Makefile.in new file mode 100644 index 000000000..56d49b99b --- /dev/null +++ b/x11/gdm/files/patch-gui_simple-greeter_Makefile.in @@ -0,0 +1,11 @@ +--- gui/simple-greeter/Makefile.in.orig 2008-02-13 01:57:37.000000000 -0500 ++++ gui/simple-greeter/Makefile.in 2008-02-13 01:57:44.000000000 -0500 +@@ -445,7 +445,7 @@ INCLUDES = \ + -DGDMCONFDIR=\"$(gdmconfdir)\" \ + -DDATADIR=\""$(datadir)"\" \ + -DSYSCONFDIR=\""$(sysconfdir)"\" \ +- -DLIBLOCALEDIR=\""$(prefix)/lib/locale"\" \ ++ -DLIBLOCALEDIR=\""$(prefix)/share/locale"\" \ + -DGNOMELOCALEDIR=\""$(datadir)/locale"\" \ + -DGLADEDIR=\""$(pkgdatadir)"\" \ + -DLIBEXECDIR=\""$(libexecdir)"\" \ diff --git a/x11/gdm/files/patch-gui_simple-greeter_gdm-languages.c b/x11/gdm/files/patch-gui_simple-greeter_gdm-languages.c new file mode 100644 index 000000000..9116dc917 --- /dev/null +++ b/x11/gdm/files/patch-gui_simple-greeter_gdm-languages.c @@ -0,0 +1,45 @@ +--- gui/simple-greeter/gdm-languages.c.orig 2008-11-22 17:16:42.000000000 -0500 ++++ gui/simple-greeter/gdm-languages.c 2008-11-22 17:29:05.000000000 -0500 +@@ -168,13 +168,13 @@ gdm_parse_language_name (const char *nam + *codesetp = NULL; + } + +- if (*codesetp != NULL) { ++/* if (*codesetp != NULL) { + char *codeset; + + codeset = normalize_codeset (*codesetp); + g_free (*codesetp); + *codesetp = codeset; +- } ++ }*/ + } + + if (modifierp != NULL) { +@@ -353,7 +353,7 @@ add_locale (const char *language_name) + if (language_name_is_utf8 (language_name)) { + name = g_strdup (language_name); + } else { +- name = g_strdup_printf ("%s.utf8", language_name); ++ name = g_strdup_printf ("%s.UTF-8", language_name); + + if (!language_name_is_utf8 (name)) { + g_free (name); +@@ -482,7 +482,7 @@ select_dirs (const struct dirent *dirent + struct stat st; + char *path; + +- path = g_build_filename (GNOMELOCALEDIR, dirent->d_name, NULL); ++ path = g_build_filename ("/usr/share/locale", dirent->d_name, NULL); + if (g_stat (path, &st) == 0) { + mode = st.st_mode; + } +@@ -502,7 +502,7 @@ collect_locales_from_directory (void) + int ndirents; + int cnt; + +- ndirents = scandir (GNOMELOCALEDIR, &dirents, select_dirs, alphasort); ++ ndirents = scandir ("/usr/share/locale", &dirents, select_dirs, alphasort); + + for (cnt = 0; cnt < ndirents; ++cnt) { + add_locale (dirents[cnt]->d_name); diff --git a/x11/gdm/files/patch-gui_simple-greeter_gdm-layouts.c b/x11/gdm/files/patch-gui_simple-greeter_gdm-layouts.c new file mode 100644 index 000000000..eff888777 --- /dev/null +++ b/x11/gdm/files/patch-gui_simple-greeter_gdm-layouts.c @@ -0,0 +1,11 @@ +--- gui/simple-greeter/gdm-layouts.c.orig 2009-07-06 17:10:45.000000000 -0400 ++++ gui/simple-greeter/gdm-layouts.c 2009-07-06 17:10:58.000000000 -0400 +@@ -52,7 +52,7 @@ init_xkl (void) + engine = xkl_engine_get_instance (GDK_DISPLAY ()); + xkl_engine_backup_names_prop (engine); + config_registry = xkl_config_registry_get_instance (engine); +- xkl_config_registry_load (config_registry); ++ xkl_config_registry_load (config_registry, TRUE); + + initial_config = xkl_config_rec_new (); + if (!xkl_config_rec_get_from_backup (initial_config, engine)) { diff --git a/x11/gdm/files/patch-gui_simple-greeter_gdm-remote-login-window.c b/x11/gdm/files/patch-gui_simple-greeter_gdm-remote-login-window.c new file mode 100644 index 000000000..059d72cf4 --- /dev/null +++ b/x11/gdm/files/patch-gui_simple-greeter_gdm-remote-login-window.c @@ -0,0 +1,10 @@ +--- gui/simple-greeter/gdm-remote-login-window.c.orig 2008-03-24 11:27:13.000000000 +0100 ++++ gui/simple-greeter/gdm-remote-login-window.c 2008-03-24 11:27:31.000000000 +0100 +@@ -25,6 +25,7 @@ + #include <unistd.h> + #include <sys/types.h> + #include <sys/wait.h> ++#include <sys/signal.h> + #include <errno.h> + + #include <glib.h> diff --git a/x11/gdm/files/patch-gui_simple-greeter_gdm-user-manager.c b/x11/gdm/files/patch-gui_simple-greeter_gdm-user-manager.c new file mode 100644 index 000000000..d666bc1fd --- /dev/null +++ b/x11/gdm/files/patch-gui_simple-greeter_gdm-user-manager.c @@ -0,0 +1,51 @@ +--- gui/simple-greeter/gdm-user-manager.c.orig 2008-04-29 13:38:43.000000000 -0400 ++++ gui/simple-greeter/gdm-user-manager.c 2008-05-03 13:27:52.000000000 -0400 +@@ -1269,17 +1269,23 @@ reload_passwd (GdmUserManager *manager) + GSList *old_users; + GSList *new_users; + GSList *list; +- FILE *fp; ++#ifndef __FreeBSD__ ++ FILE *fp; ++#endif + + old_users = NULL; + new_users = NULL; + ++#ifdef __FreeBSD__ ++ setpwent (); ++#else + errno = 0; + fp = fopen (PATH_PASSWD, "r"); + if (fp == NULL) { + g_warning ("Unable to open %s: %s", PATH_PASSWD, g_strerror (errno)); + goto out; + } ++#endif + + g_hash_table_foreach (manager->priv->users, listify_hash_values_hfunc, &old_users); + g_slist_foreach (old_users, (GFunc) g_object_ref, NULL); +@@ -1292,7 +1298,11 @@ reload_passwd (GdmUserManager *manager) + } + } + ++#ifdef __FreeBSD__ ++ for (pwent = getpwent (); pwent != NULL; pwent = getpwent ()) { ++#else + for (pwent = fgetpwent (fp); pwent != NULL; pwent = fgetpwent (fp)) { ++#endif + GdmUser *user; + + user = NULL; +@@ -1355,7 +1365,11 @@ reload_passwd (GdmUserManager *manager) + out: + /* Cleanup */ + ++#ifdef __FreeBSD__ ++ endpwent (); ++#else + fclose (fp); ++#endif + + g_slist_foreach (new_users, (GFunc) g_object_thaw_notify, NULL); + g_slist_foreach (new_users, (GFunc) g_object_unref, NULL); diff --git a/x11/gdm/files/patch-gui_simple-greeter_gdm-user.c b/x11/gdm/files/patch-gui_simple-greeter_gdm-user.c new file mode 100644 index 000000000..049b75b42 --- /dev/null +++ b/x11/gdm/files/patch-gui_simple-greeter_gdm-user.c @@ -0,0 +1,34 @@ +--- gui/simple-greeter/gdm-user.c.orig 2009-05-16 17:52:57.000000000 -0400 ++++ gui/simple-greeter/gdm-user.c 2009-05-16 18:08:08.000000000 -0400 +@@ -412,6 +412,7 @@ _gdm_user_update (GdmUser *u + /* Display Name */ + if (pwent->pw_gecos && pwent->pw_gecos[0] != '\0') { + gchar *first_comma; ++ gchar *ampersand; + + first_comma = strchr (pwent->pw_gecos, ','); + if (first_comma) { +@@ -425,6 +426,23 @@ _gdm_user_update (GdmUser *u + g_free (real_name); + real_name = NULL; + } ++ ++ while (real_name != NULL && (ampersand = strchr (real_name, '&')) != NULL) { ++ gchar *temp_real_name1; ++ gchar *temp_real_name2; ++ gchar *temp_name; ++ ++ temp_real_name1 = g_strndup (real_name, ++ (ampersand - real_name)); ++ temp_real_name2 = g_strdup (ampersand + 1); ++ temp_name = g_strdup (pwent->pw_name); ++ temp_name[0] = toupper (temp_name[0]); ++ g_free (real_name); ++ real_name = g_strdup_printf ("%s%s%s", temp_real_name1, temp_name, temp_real_name2); ++ g_free (temp_real_name1); ++ g_free (temp_real_name2); ++ g_free (temp_name); ++ } + } else { + real_name = NULL; + } diff --git a/x11/gdm/files/patch-hal-keyboard b/x11/gdm/files/patch-hal-keyboard new file mode 100644 index 000000000..a712f04a1 --- /dev/null +++ b/x11/gdm/files/patch-hal-keyboard @@ -0,0 +1,109 @@ +diff -up gdm-2.25.2/daemon/gdm-session-direct.c.system-keyboard gdm-2.25.2/daemon/gdm-session-direct.c +--- daemon/gdm-session-direct.c.system-keyboard 2008-08-26 15:04:00.000000000 -0400 ++++ daemon/gdm-session-direct.c 2009-02-24 22:55:02.656566009 -0500 +@@ -45,6 +45,8 @@ + #include <dbus/dbus-glib.h> + #include <dbus/dbus-glib-lowlevel.h> + ++#include <libhal.h> ++ + #include "gdm-session-direct.h" + #include "gdm-session.h" + #include "gdm-session-private.h" +@@ -595,14 +597,66 @@ get_default_language_name (GdmSessionDir + return setlocale (LC_MESSAGES, NULL); + } + ++static char * ++get_system_default_layout (GdmSessionDirect *session) ++{ ++ DBusConnection *connection; ++ LibHalContext *ctx; ++ char **devices; ++ int n_devices; ++ char *layout; ++ char *result; ++ ++ result = NULL; ++ ++ connection = dbus_g_connection_get_connection (session->priv->connection); ++ ctx = libhal_ctx_new (); ++ libhal_ctx_set_dbus_connection (ctx, connection); ++ ++ if (!libhal_ctx_init (ctx, NULL)) { ++ goto out; ++ } ++ ++ devices = libhal_find_device_by_capability (ctx, ++ "input.keyboard", ++ &n_devices, ++ NULL); ++ if (n_devices > 0) { ++ layout = libhal_device_get_property_string (ctx, ++ devices[0], ++ "input.x11_options.XkbLayout", ++ NULL); ++ if (!layout) { ++ layout = libhal_device_get_property_string (ctx, ++ devices[0], ++ "input.xkb.layout", ++ NULL); ++ } ++ result = g_strdup (layout); ++ libhal_free_string (layout); ++ } ++ ++ libhal_free_string_array (devices); ++ ++ libhal_ctx_shutdown (ctx, NULL); ++ libhal_ctx_free (ctx); ++ ++out: ++ if (!result) { ++ result = g_strdup ("us"); ++ } ++ ++ return result; ++} ++ + static const char * + get_default_layout_name (GdmSessionDirect *session) + { +- if (session->priv->saved_layout != NULL) { +- return session->priv->saved_layout; ++ if (!session->priv->saved_layout) { ++ session->priv->saved_layout = get_system_default_layout (session); + } + +- return "us"; ++ return session->priv->saved_layout; + } + + static char * +@@ -1971,9 +2025,10 @@ setup_session_environment (GdmSessionDir + "GDM_LANG", + get_language_name (session)); + +- gdm_session_direct_set_environment_variable (session, +- "GDM_KEYBOARD_LAYOUT", +- get_layout_name (session)); ++ if (g_strcmp0 (get_layout_name (session), get_system_default_layout (session)) != 0) ++ gdm_session_direct_set_environment_variable (session, ++ "GDM_KEYBOARD_LAYOUT", ++ get_layout_name (session)); + + gdm_session_direct_set_environment_variable (session, + "DISPLAY", +diff -up gdm-2.25.2/daemon/gdm-session-settings.c.system-keyboard gdm-2.25.2/daemon/gdm-session-settings.c +--- daemon/gdm-session-settings.c.system-keyboard 2008-08-26 15:04:00.000000000 -0400 ++++ daemon/gdm-session-settings.c 2009-02-24 22:51:00.158815919 -0500 +@@ -149,8 +149,7 @@ gdm_session_settings_set_layout_name (Gd + { + g_return_if_fail (GDM_IS_SESSION_SETTINGS (settings)); + +- if (settings->priv->layout_name == NULL || +- strcmp (settings->priv->layout_name, layout_name) != 0) { ++ if (g_strcmp0 (settings->priv->layout_name, layout_name) != 0) { + settings->priv->layout_name = g_strdup (layout_name); + g_object_notify (G_OBJECT (settings), "layout-name"); + } diff --git a/x11/gdm/pkg-descr b/x11/gdm/pkg-descr new file mode 100644 index 000000000..1699cf5b7 --- /dev/null +++ b/x11/gdm/pkg-descr @@ -0,0 +1,4 @@ +The GNOME 2.0 version of the xdm display manager. It supports user +icons, multiple sessions, and clean system shutdowns. + +WWW: http://www.gnome.org/projects/gdm/ diff --git a/x11/gdm/pkg-install b/x11/gdm/pkg-install new file mode 100644 index 000000000..788a1a610 --- /dev/null +++ b/x11/gdm/pkg-install @@ -0,0 +1,65 @@ +#!/bin/sh + +case $2 in +POST-INSTALL) + USER=gdm + GROUP=${USER} + UID=92 + GID=${UID} + PW=/usr/sbin/pw + CHMOD=/bin/chmod + CHOWN=/usr/sbin/chown + MKDIR=/bin/mkdir + + if ${PW} group show "${GROUP}" 2>/dev/null; then + echo "You already have a group \"${GROUP}\", so I will use it." + else + if ${PW} groupadd ${GROUP} -g ${GID}; then + echo "Added group \"${GROUP}\"." + else + echo "Adding group \"${GROUP}\" failed..." + exit 1 + fi + fi + + if ${PW} user show "${USER}" 2>/dev/null; then + echo "You already have a user \"${USER}\", so I will use it." + uhome=`${PW} user show ${USER} | awk -F: '{print $9}'` + if [ x"${uhome}" = x"/nonexistent" -o x"${uhome}" = x"/var/gdm" ]; then + ${PW} usermod ${USER} -d "${PKG_PREFIX}/etc/gdm/home" + fi + else + if ${PW} useradd ${USER} -u ${UID} -g ${GROUP} -h - \ + -d "${PKG_PREFIX}/etc/gdm/home" -s /sbin/nologin -c "GNOME Display Manager" + then + echo "Added user \"${USER}\"." + else + echo "Adding user \"${USER}\" failed..." + exit 1 + fi + fi + ${MKDIR} -p /var/gdm + ${MKDIR} -p /var/log/gdm + ${CHMOD} 0755 /var/log/gdm + ${CHOWN} root:wheel /var/log/gdm + ${CHOWN} -R root:${GROUP} /var/gdm + ${CHMOD} 1770 /var/gdm + ${MKDIR} -p /var/run/gdm + ${CHOWN} root:${GROUP} /var/run/gdm + ${CHMOD} 1777 /var/run/gdm + ${CHOWN} root:wheel ${PKG_PREFIX}/share/gdm + ${CHMOD} 0755 ${PKG_PREFIX}/share/gdm + ${MKDIR} -p ${PKG_PREFIX}/etc/gdm/home + ${CHOWN} root:${GROUP} ${PKG_PREFIX}/etc/gdm/home + ${CHMOD} 1770 ${PKG_PREFIX}/etc/gdm/home + install -o root -g wheel -m 444 ${PKG_PREFIX}/share/gdm/gconf.path ${PKG_PREFIX}/etc/gdm/home/.gconf.path + gconftool-2 --direct --config-source=xml:merged:${PKG_PREFIX}/etc/gdm/home/.gconf.mandatory --recursive-unset / + gconftool-2 --direct --config-source=xml:merged:${PKG_PREFIX}/etc/gdm/home/.gconf.mandatory --load ${PKG_PREFIX}/share/gdm/session-setup.entries + ${CHOWN} -R root:gdm ${PKG_PREFIX}/etc/gdm/home/.gconf.mandatory + ${CHMOD} 1750 ${PKG_PREFIX}/etc/gdm/home/.gconf.mandatory + ${CHMOD} 1640 ${PKG_PREFIX}/etc/gdm/home/.gconf.mandatory/*.xml + + ${MKDIR} -p ${PKG_PREFIX}/etc/dm/Sessions + exit 0 + ;; +esac diff --git a/x11/gdm/pkg-message b/x11/gdm/pkg-message new file mode 100644 index 000000000..038101552 --- /dev/null +++ b/x11/gdm/pkg-message @@ -0,0 +1,6 @@ +GDM is installed. + +Do _NOT_ use /etc/ttys to start gdm at boot time. This will result in gdm +hanging or restarting constantly. Instead, add gdm_enable="YES" to +/etc/rc.conf. GDM will be started automatic on the next reboot. + diff --git a/x11/gdm/pkg-plist b/x11/gdm/pkg-plist new file mode 100644 index 000000000..cfe404abd --- /dev/null +++ b/x11/gdm/pkg-plist @@ -0,0 +1,274 @@ +bin/gdm-screenshot +bin/gdmflexiserver +etc/dbus-1/system.d/gdm.conf +etc/gdm/Init/Default +etc/gdm/PostLogin/Default.sample +etc/gdm/PostSession/Default +etc/gdm/PreSession/Default +etc/gdm/Xsession +@unexec if cmp -s %D/etc/gdm/custom.conf %D/etc/gdm/custom.conf.default; then rm -f %D/etc/gdm/custom.conf; fi +etc/gdm/custom.conf.default +@exec [ -f %B/custom.conf ] || cp %B/%f %B/custom.conf +etc/gdm/gdm.schemas +etc/pam.d/gdm +libdata/bonobo/servers/GNOME_FastUserSwitchApplet.server +libexec/gdm-crash-logger +libexec/gdm-factory-slave +libexec/gdm-host-chooser +libexec/gdm-product-slave +libexec/gdm-session-worker +libexec/gdm-simple-chooser +libexec/gdm-simple-greeter +libexec/gdm-simple-slave +libexec/gdm-user-switch-applet +libexec/gdm-xdmcp-chooser-slave +sbin/gdm +sbin/gdm-binary +sbin/gdm-restart +sbin/gdm-safe-restart +sbin/gdm-stop +%%DATADIR%%/autostart/LoginWindow/at-spi-registryd-wrapper.desktop +%%DATADIR%%/autostart/LoginWindow/gdm-simple-greeter.desktop +%%DATADIR%%/autostart/LoginWindow/gnome-mag.desktop +%%DATADIR%%/autostart/LoginWindow/gnome-power-manager.desktop +%%DATADIR%%/autostart/LoginWindow/gnome-settings-daemon.desktop +%%DATADIR%%/autostart/LoginWindow/gok.desktop +%%DATADIR%%/autostart/LoginWindow/metacity.desktop +%%DATADIR%%/autostart/LoginWindow/orca-screen-reader.desktop +%%DATADIR%%/gconf.path +%%DATADIR%%/gdb-cmd +%%DATADIR%%/gdm-greeter-login-window.glade +%%DATADIR%%/session-setup.entries +share/gnome-2.0/ui/GNOME_FastUserSwitchApplet.xml +share/gnome/help/gdm/C/gdm.xml +share/gnome/help/gdm/C/legal.xml +share/gnome/help/gdm/de/gdm.xml +share/gnome/help/gdm/en_GB/gdm.xml +share/gnome/help/gdm/es/gdm.xml +share/gnome/help/gdm/fr/gdm.xml +share/gnome/help/gdm/it/gdm.xml +share/gnome/help/gdm/ko/gdm.xml +share/gnome/help/gdm/oc/gdm.xml +share/gnome/help/gdm/ru/gdm.xml +share/gnome/help/gdm/sv/gdm.xml +share/gnome/help/gdm/uk/gdm.xml +share/icons/hicolor/16x16/apps/gdm-xnest.png +share/icons/hicolor/32x32/apps/gdm-setup.png +share/icons/hicolor/32x32/apps/gdm-xnest.png +share/locale/af/LC_MESSAGES/gdm.mo +share/locale/am/LC_MESSAGES/gdm.mo +share/locale/ar/LC_MESSAGES/gdm.mo +share/locale/as/LC_MESSAGES/gdm.mo +share/locale/ast/LC_MESSAGES/gdm.mo +share/locale/az/LC_MESSAGES/gdm.mo +share/locale/be/LC_MESSAGES/gdm.mo +share/locale/be@latin/LC_MESSAGES/gdm.mo +share/locale/bg/LC_MESSAGES/gdm.mo +share/locale/bn/LC_MESSAGES/gdm.mo +share/locale/bn_IN/LC_MESSAGES/gdm.mo +share/locale/bs/LC_MESSAGES/gdm.mo +share/locale/ca/LC_MESSAGES/gdm.mo +share/locale/crh/LC_MESSAGES/gdm.mo +share/locale/cs/LC_MESSAGES/gdm.mo +share/locale/cy/LC_MESSAGES/gdm.mo +share/locale/da/LC_MESSAGES/gdm.mo +share/locale/de/LC_MESSAGES/gdm.mo +share/locale/dz/LC_MESSAGES/gdm.mo +share/locale/el/LC_MESSAGES/gdm.mo +share/locale/en_CA/LC_MESSAGES/gdm.mo +share/locale/en_GB/LC_MESSAGES/gdm.mo +share/locale/es/LC_MESSAGES/gdm.mo +share/locale/et/LC_MESSAGES/gdm.mo +share/locale/eu/LC_MESSAGES/gdm.mo +share/locale/fa/LC_MESSAGES/gdm.mo +share/locale/fi/LC_MESSAGES/gdm.mo +share/locale/fr/LC_MESSAGES/gdm.mo +share/locale/fur/LC_MESSAGES/gdm.mo +share/locale/ga/LC_MESSAGES/gdm.mo +share/locale/gl/LC_MESSAGES/gdm.mo +share/locale/gu/LC_MESSAGES/gdm.mo +share/locale/he/LC_MESSAGES/gdm.mo +share/locale/hi/LC_MESSAGES/gdm.mo +share/locale/hr/LC_MESSAGES/gdm.mo +share/locale/hu/LC_MESSAGES/gdm.mo +share/locale/hy/LC_MESSAGES/gdm.mo +share/locale/id/LC_MESSAGES/gdm.mo +share/locale/is/LC_MESSAGES/gdm.mo +share/locale/it/LC_MESSAGES/gdm.mo +share/locale/ja/LC_MESSAGES/gdm.mo +share/locale/ka/LC_MESSAGES/gdm.mo +share/locale/kn/LC_MESSAGES/gdm.mo +share/locale/ko/LC_MESSAGES/gdm.mo +share/locale/ku/LC_MESSAGES/gdm.mo +share/locale/lt/LC_MESSAGES/gdm.mo +share/locale/lv/LC_MESSAGES/gdm.mo +share/locale/mai/LC_MESSAGES/gdm.mo +share/locale/mg/LC_MESSAGES/gdm.mo +share/locale/mi/LC_MESSAGES/gdm.mo +share/locale/mk/LC_MESSAGES/gdm.mo +share/locale/ml/LC_MESSAGES/gdm.mo +share/locale/mn/LC_MESSAGES/gdm.mo +share/locale/mr/LC_MESSAGES/gdm.mo +share/locale/ms/LC_MESSAGES/gdm.mo +share/locale/nb/LC_MESSAGES/gdm.mo +share/locale/ne/LC_MESSAGES/gdm.mo +share/locale/nl/LC_MESSAGES/gdm.mo +share/locale/nn/LC_MESSAGES/gdm.mo +share/locale/nso/LC_MESSAGES/gdm.mo +share/locale/oc/LC_MESSAGES/gdm.mo +share/locale/or/LC_MESSAGES/gdm.mo +share/locale/pa/LC_MESSAGES/gdm.mo +share/locale/pl/LC_MESSAGES/gdm.mo +share/locale/ps/LC_MESSAGES/gdm.mo +share/locale/pt/LC_MESSAGES/gdm.mo +share/locale/pt_BR/LC_MESSAGES/gdm.mo +share/locale/ro/LC_MESSAGES/gdm.mo +share/locale/ru/LC_MESSAGES/gdm.mo +share/locale/rw/LC_MESSAGES/gdm.mo +share/locale/si/LC_MESSAGES/gdm.mo +share/locale/sk/LC_MESSAGES/gdm.mo +share/locale/sl/LC_MESSAGES/gdm.mo +share/locale/sq/LC_MESSAGES/gdm.mo +share/locale/sr/LC_MESSAGES/gdm.mo +share/locale/sr@latin/LC_MESSAGES/gdm.mo +share/locale/sv/LC_MESSAGES/gdm.mo +share/locale/ta/LC_MESSAGES/gdm.mo +share/locale/te/LC_MESSAGES/gdm.mo +share/locale/th/LC_MESSAGES/gdm.mo +share/locale/tr/LC_MESSAGES/gdm.mo +share/locale/uk/LC_MESSAGES/gdm.mo +share/locale/uz/LC_MESSAGES/gdm.mo +share/locale/uz@cyrillic/LC_MESSAGES/gdm.mo +share/locale/vi/LC_MESSAGES/gdm.mo +share/locale/wa/LC_MESSAGES/gdm.mo +share/locale/xh/LC_MESSAGES/gdm.mo +share/locale/zh_CN/LC_MESSAGES/gdm.mo +share/locale/zh_HK/LC_MESSAGES/gdm.mo +share/locale/zh_TW/LC_MESSAGES/gdm.mo +share/locale/zu/LC_MESSAGES/gdm.mo +share/omf/gdm/gdm-C.omf +share/omf/gdm/gdm-de.omf +share/omf/gdm/gdm-en_GB.omf +share/omf/gdm/gdm-es.omf +share/omf/gdm/gdm-fr.omf +share/omf/gdm/gdm-it.omf +share/omf/gdm/gdm-ko.omf +share/omf/gdm/gdm-oc.omf +share/omf/gdm/gdm-ru.omf +share/omf/gdm/gdm-sv.omf +share/omf/gdm/gdm-uk.omf +share/pixmaps/faces/astronaut.jpg +share/pixmaps/faces/baseball.png +share/pixmaps/faces/butterfly.png +share/pixmaps/faces/cat-eye.jpg +share/pixmaps/faces/chess.jpg +share/pixmaps/faces/coffee.jpg +share/pixmaps/faces/dice.jpg +share/pixmaps/faces/energy-arc.jpg +share/pixmaps/faces/fish.jpg +share/pixmaps/faces/flake.jpg +share/pixmaps/faces/flower.jpg +share/pixmaps/faces/grapes.jpg +share/pixmaps/faces/guitar.jpg +share/pixmaps/faces/launch.jpg +share/pixmaps/faces/leaf.jpg +share/pixmaps/faces/lightning.jpg +share/pixmaps/faces/penguin.jpg +share/pixmaps/faces/puppy.jpg +share/pixmaps/faces/sky.jpg +share/pixmaps/faces/soccerball.png +share/pixmaps/faces/sunflower.jpg +share/pixmaps/faces/sunset.jpg +share/pixmaps/faces/tennis-ball.png +share/pixmaps/faces/yellow-rose.jpg +share/pixmaps/gdm-foot-logo.png +share/pixmaps/gdm-setup.png +share/pixmaps/gdm-xnest.png +share/pixmaps/gdm.png +share/pixmaps/nobody.png +share/pixmaps/nohost.png +@exec mkdir -p %D/share/xsessions +@dirrmtry share/xsessions +@dirrm share/pixmaps/faces +@dirrm share/omf/gdm +@dirrm share/gnome/help/gdm/uk +@dirrm share/gnome/help/gdm/sv +@dirrm share/gnome/help/gdm/ru +@dirrm share/gnome/help/gdm/oc +@dirrm share/gnome/help/gdm/ko +@dirrm share/gnome/help/gdm/it +@dirrm share/gnome/help/gdm/fr +@dirrm share/gnome/help/gdm/es +@dirrm share/gnome/help/gdm/en_GB +@dirrm share/gnome/help/gdm/de +@dirrm share/gnome/help/gdm/C +@dirrm share/gnome/help/gdm +@dirrm %%DATADIR%%/autostart/LoginWindow +@dirrm %%DATADIR%%/autostart +@dirrm %%DATADIR%% +@dirrm etc/gdm/Sessions +@dirrm etc/gdm/PreSession +@dirrm etc/gdm/PostSession +@dirrm etc/gdm/PostLogin +@dirrm etc/gdm/Init +@unexec rm -rf %D/etc/gdm/home/.gconf* +@dirrmtry etc/gdm/home +@dirrmtry etc/gdm +@dirrmtry etc/dm/Sessions +@dirrmtry etc/dm +@dirrmtry sbin +@dirrmtry share/log/gdm +@dirrmtry share/log +@unexec /bin/rm -rf /var/gdm 2>/dev/null || /usr/bin/true +@unexec /bin/rm -rf /var/log/gdm 2>/dev/null || /usr/bin/true +@unexec /bin/rm -rf /var/run/gdm 2>/dev/null || /usr/bin/true +@dirrmtry share/locale/zu/LC_MESSAGES +@dirrmtry share/locale/zu +@dirrmtry share/locale/zh_HK/LC_MESSAGES +@dirrmtry share/locale/zh_HK +@dirrmtry share/locale/xh/LC_MESSAGES +@dirrmtry share/locale/xh +@dirrmtry share/locale/uz@cyrillic/LC_MESSAGES +@dirrmtry share/locale/uz@cyrillic +@dirrmtry share/locale/uz/LC_MESSAGES +@dirrmtry share/locale/uz +@dirrmtry share/locale/te/LC_MESSAGES +@dirrmtry share/locale/te +@dirrmtry share/locale/sr@latin/LC_MESSAGES +@dirrmtry share/locale/sr@latin +@dirrmtry share/locale/si/LC_MESSAGES +@dirrmtry share/locale/si +@dirrmtry share/locale/rw/LC_MESSAGES +@dirrmtry share/locale/rw +@dirrmtry share/locale/ps/LC_MESSAGES +@dirrmtry share/locale/ps +@dirrmtry share/locale/oc/LC_MESSAGES +@dirrmtry share/locale/oc +@dirrmtry share/locale/nso/LC_MESSAGES +@dirrmtry share/locale/nso +@dirrmtry share/locale/mr/LC_MESSAGES +@dirrmtry share/locale/mr +@dirrmtry share/locale/mi/LC_MESSAGES +@dirrmtry share/locale/mi +@dirrmtry share/locale/mg/LC_MESSAGES +@dirrmtry share/locale/mg +@dirrmtry share/locale/mai/LC_MESSAGES +@dirrmtry share/locale/mai +@dirrmtry share/locale/ku/LC_MESSAGES +@dirrmtry share/locale/ku +@dirrmtry share/locale/hy/LC_MESSAGES +@dirrmtry share/locale/hy +@dirrmtry share/locale/fur/LC_MESSAGES +@dirrmtry share/locale/fur +@dirrmtry share/locale/dz/LC_MESSAGES +@dirrmtry share/locale/dz +@dirrmtry share/locale/crh/LC_MESSAGES +@dirrmtry share/locale/crh +@dirrmtry share/locale/bn_IN/LC_MESSAGES +@dirrmtry share/locale/bn_IN +@dirrmtry share/locale/be@latin/LC_MESSAGES +@dirrmtry share/locale/be@latin +@dirrmtry share/locale/ast/LC_MESSAGES +@dirrmtry share/locale/ast +@dirrmtry share/locale/as/LC_MESSAGES +@dirrmtry share/locale/as |