[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

xdm: Changes to 'upstream-unstable'



 .gitignore              |   85 +++++++++++++++++++++----
 COPYING                 |   53 +++++++---------
 Makefile.am             |   15 +++-
 access.c                |   23 ++++++-
 acinclude.m4            |   45 -------------
 app-defaults/.gitignore |    2 
 auth.c                  |  157 +++++++++++++++++++++++++++++++++++++-----------
 config/.gitignore       |    7 +-
 config/Xstartup.cpp     |    2 
 configure.ac            |   35 ++++++++--
 dm.c                    |  142 +++++++++++++++++++++++++++++--------------
 greeter/.gitignore      |    7 --
 greeter/Login.c         |  117 +++++++++++++++++++++--------------
 greeter/Login.h         |   41 +++++-------
 greeter/LoginP.h        |   41 +++++-------
 greeter/greet.c         |   64 ++++++++++---------
 m4/ac_define_dir.m4     |   45 +++++++++++++
 session.c               |   89 +++++++++++++++++++++++----
 socket.c                |   33 +++++++++-
 xdm.man.cpp             |    6 +
 xdmcp.c                 |   23 ++++++-
 21 files changed, 698 insertions(+), 334 deletions(-)

New commits:
commit 7006d5c582e382660437a64b749822116823ecee
Author: Julien Cristau <jcristau@debian.org>
Date:   Sat Apr 10 03:48:05 2010 +0200

    Bump to 1.1.10

diff --git a/configure.ac b/configure.ac
index 6d3c77a..5d0f243 100644
--- a/configure.ac
+++ b/configure.ac
@@ -22,7 +22,7 @@ dnl Process this file with autoconf to create configure.
 
 
 AC_PREREQ([2.60])
-AC_INIT(xdm,[1.1.9],[https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],xdm)
+AC_INIT(xdm,[1.1.10],[https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],xdm)
 AM_INIT_AUTOMAKE([foreign dist-bzip2])
 AM_MAINTAINER_MODE
 AC_CONFIG_MACRO_DIR([m4])

commit 7c4c0592aca80cc8affe4e94d2742caa754d5be3
Author: Julien Cristau <jcristau@debian.org>
Date:   Sun Apr 4 19:20:39 2010 +0200

    Add missing brace in previous commit
    
    Thanks to cjb and tinderbox.
    
    Signed-off-by: Julien Cristau <jcristau@debian.org>

diff --git a/socket.c b/socket.c
index 6c2702d..fc5d81e 100644
--- a/socket.c
+++ b/socket.c
@@ -176,7 +176,7 @@ CreateListeningSocket (struct sockaddr *sock_addr, int salen)
     RegisterCloseOnFork (fd);
 
 #  if defined(IPv6) && defined(IPV6_V6ONLY)
-    if (sock_addr->sa_family == AF_INET6)
+    if (sock_addr->sa_family == AF_INET6) {
 	int zero = 0;
 	if (setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, &zero, sizeof(zero)) < 0) {
 	    LogError ("Could not disable V6ONLY on XDMCP socket: %s\n",

commit 8eb897bb980dd6ce3f8ade517a8a39023a477743
Author: Julien Cristau <jcristau@debian.org>
Date:   Tue Mar 23 19:40:49 2010 +0100

    xdmcp: disable IPV6_V6ONLY for ipv6 listening sockets
    
    This allows ipv4 connections mapped to ipv6, in case the system default
    is backwards.
    
    Signed-off-by: Julien Cristau <jcristau@debian.org>
    Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>

diff --git a/socket.c b/socket.c
index 7e678ad..6c2702d 100644
--- a/socket.c
+++ b/socket.c
@@ -175,6 +175,16 @@ CreateListeningSocket (struct sockaddr *sock_addr, int salen)
     }
     RegisterCloseOnFork (fd);
 
+#  if defined(IPv6) && defined(IPV6_V6ONLY)
+    if (sock_addr->sa_family == AF_INET6)
+	int zero = 0;
+	if (setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, &zero, sizeof(zero)) < 0) {
+	    LogError ("Could not disable V6ONLY on XDMCP socket: %s\n",
+	              _SysErrorMsg (errno));
+	}
+    }
+#  endif
+
     if (bind (fd, sock_addr, salen) == -1)
     {
 	LogError ("error binding socket address %d: %s\n", request_port,

commit 3a4f890fa9466ed27d49ce97adbcad30b840d3d4
Author: Julien Cristau <jcristau@debian.org>
Date:   Tue Mar 23 19:40:48 2010 +0100

    Don't remove the pid file from xdm child processes
    
    The parent xdm process registers RemovePid with atexit(), which means
    that any child exit would trigger the (wrong) removal of the pidfile.
    So in RemovePid, don't do anything if we're not the parent xdm process.
    
    Signed-off-by: Julien Cristau <jcristau@debian.org>
    Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>

diff --git a/dm.c b/dm.c
index 55fb24e..da18800 100644
--- a/dm.c
+++ b/dm.c
@@ -969,6 +969,9 @@ StorePid (void)
 static void
 RemovePid (void)
 {
+    if (parent_pid != getpid())
+	return;
+
     Debug ("unlinking process ID file %s\n", pidFile);
     if (unlink (pidFile))
 	if (errno != ENOENT)

commit 931c98390274a9e0c62c41c5e9ceed6681e7a9b7
Author: Gaetan Nadon <memsize@videotron.ca>
Date:   Sat Mar 13 15:19:37 2010 -0500

    lint: option -rdynamic is not valid for the lint program
    
    Use xdm_LIBS instead. Tested on Solaris.
    
    Signed-off-by: Gaetan Nadon <memsize@videotron.ca>

diff --git a/Makefile.am b/Makefile.am
index b2ddf68..193e8a6 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -180,7 +180,7 @@ ALL_LINT_FLAGS=$(LINT_FLAGS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
 		$(AM_CPPFLAGS) $(CPPFLAGS)
 
 lint:
-	$(LINT) $(ALL_LINT_FLAGS) $(xdm_CFLAGS) $(xdm_SOURCES) $(xdm_LDADD)
+	$(LINT) $(ALL_LINT_FLAGS) $(xdm_CFLAGS) $(xdm_SOURCES) $(xdm_LIBS)
 	$(LINT) $(ALL_LINT_FLAGS) $(xdmshell_CFLAGS) $(xdmshell_SOURCES)
 	$(LINT) $(ALL_LINT_FLAGS) $(chooser_CFLAGS) $(chooser_SOURCES) $(chooser_LDADD)
 	(cd greeter && $(MAKE) $(AM_MAKEFLAGS) lint)

commit 34b9c0e02bc2d36da2c8c5ee468b2a2d63914610
Author: Alan Coopersmith <alan.coopersmith@sun.com>
Date:   Tue Mar 16 16:33:48 2010 -0700

    Reject PAM conversation calls after login dialog is closed
    
    Based on patch suggested by Bjoern A. Zeeb <bzeeb+patch@zabbadoz.net>
    to fix http://bugs.freedesktop.org/show_bug.cgi?id=10522
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com>

diff --git a/greeter/greet.c b/greeter/greet.c
index 1afe2f1..778c525 100644
--- a/greeter/greet.c
+++ b/greeter/greet.c
@@ -342,6 +342,8 @@ CloseGreet (struct display *d)
 	XSetAccessControl (dpy, DisableAccess);
     }
     XtDestroyWidget (toplevel);
+    toplevel = NULL;
+    login = NULL; /* child of toplevel, which we just destroyed */
     ClearCloseOnFork (XConnectionNumber (dpy));
     XCloseDisplay (dpy);
     Debug ("Greet connection closed\n");
@@ -707,6 +709,11 @@ static int pamconv(int num_msg,
     m = (struct pam_message *)*msg;
     r = *response;
 
+    if (login == NULL) {
+	status = PAM_CONV_ERR;
+	goto pam_error;
+    }
+
     for (i = 0; i < num_msg; i++ , m++ , r++) {
 	char *username;
 	int promptId = 0;

commit afc752d1c483e77de9aa3cb9532a67d95fd27dd9
Author: Alan Coopersmith <alan.coopersmith@sun.com>
Date:   Tue Mar 16 11:23:30 2010 -0700

    Make sure username is not NULL when calling syslog from FailedLogin()
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com>

diff --git a/greeter/greet.c b/greeter/greet.c
index 7f235ef..1afe2f1 100644
--- a/greeter/greet.c
+++ b/greeter/greet.c
@@ -410,9 +410,14 @@ static void
 FailedLogin (struct display *d, struct greet_info *greet)
 {
 #ifdef USE_SYSLOG
+    const char *username = greet->name;
+
+    if (username == NULL)
+	username = "username unavailable";
+
     syslog(LOG_AUTHPRIV|LOG_NOTICE,
 	   "LOGIN FAILURE ON %s, %s",
-	   d->name, greet->name);
+	   d->name, username);
 #endif
     DrawFail (login);
 #ifndef USE_PAM

commit 0f18bdfa7fcfe100e487f4c9f91ae37a125ef0f0
Author: Johannes Dewender <xorg@JonnyJD.net>
Date:   Fri Nov 13 21:28:23 2009 +0100

    Bug #25066: exec sessreg
    
    Sessreg saves the pid of the calling process in utmp.
    If this process is terminated the session is implicitly deleted.
    Xstartup is called and the process id is gone right when
    the script is done so the session is closed right away.
    Using "exec" will save the pid of the master process of this login.
    
    Signed-off-by: Johannes Dewender <xorg@JonnyJD.net>
    Tested-by: Johannes Dewender <xorg@JonnyJD.net>
    Acked-by: Julien Cristau <jcristau@debian.org>
    Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com>

diff --git a/config/Xstartup.cpp b/config/Xstartup.cpp
index d837359..001cef2 100644
--- a/config/Xstartup.cpp
+++ b/config/Xstartup.cpp
@@ -1,5 +1,5 @@
 XCOMM!/bin/sh
 XCOMM Register a login (derived from GiveConsole as follows:)
 XCOMM
-BINDIR/sessreg  -a -w WTMP_FILE -u UTMP_FILE \
+exec BINDIR/sessreg  -a -w WTMP_FILE -u UTMP_FILE \
 	-x XDMCONFIGDIR/Xservers -l $DISPLAY -h "" $USER

commit c9cdd56df50f280e90ba95cfa933222f94ad2677
Author: Alan Coopersmith <alan.coopersmith@sun.com>
Date:   Mon Mar 15 23:34:04 2010 -0700

    Move m4 macros to m4 subdir as automake/libtool recommend
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com>

diff --git a/.gitignore b/.gitignore
index a99636d..0f38e26 100644
--- a/.gitignore
+++ b/.gitignore
@@ -80,3 +80,8 @@ chooser
 xdm
 xdmshell
 
+m4/libtool.m4
+m4/lt~obsolete.m4
+m4/ltoptions.m4
+m4/ltsugar.m4
+m4/ltversion.m4
diff --git a/Makefile.am b/Makefile.am
index 7c1df5e..b2ddf68 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -196,3 +196,4 @@ ChangeLog:
 
 dist-hook: ChangeLog INSTALL
 
+ACLOCAL_AMFLAGS = -I m4
diff --git a/acinclude.m4 b/acinclude.m4
deleted file mode 100644
index 44971b9..0000000
--- a/acinclude.m4
+++ /dev/null
@@ -1,45 +0,0 @@
-# ===========================================================================
-#          http://www.nongnu.org/autoconf-archive/ac_define_dir.html
-# ===========================================================================
-#
-# SYNOPSIS
-#
-#   AC_DEFINE_DIR(VARNAME, DIR [, DESCRIPTION])
-#
-# DESCRIPTION
-#
-#   This macro sets VARNAME to the expansion of the DIR variable, taking
-#   care of fixing up ${prefix} and such.
-#
-#   VARNAME is then offered as both an output variable and a C preprocessor
-#   symbol.
-#
-#   Example:
-#
-#      AC_DEFINE_DIR([DATADIR], [datadir], [Where data are placed to.])
-#
-# LICENSE
-#
-#   Copyright (c) 2008 Stepan Kasal <kasal@ucw.cz>
-#   Copyright (c) 2008 Andreas Schwab <schwab@suse.de>
-#   Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de>
-#   Copyright (c) 2008 Alexandre Oliva
-#
-#   Copying and distribution of this file, with or without modification, are
-#   permitted in any medium without royalty provided the copyright notice
-#   and this notice are preserved.
-
-AC_DEFUN([AC_DEFINE_DIR], [
-  prefix_NONE=
-  exec_prefix_NONE=
-  test "x$prefix" = xNONE && prefix_NONE=yes && prefix=$ac_default_prefix
-  test "x$exec_prefix" = xNONE && exec_prefix_NONE=yes && exec_prefix=$prefix
-dnl In Autoconf 2.60, ${datadir} refers to ${datarootdir}, which in turn
-dnl refers to ${prefix}.  Thus we have to use `eval' twice.
-  eval ac_define_dir="\"[$]$2\""
-  eval ac_define_dir="\"$ac_define_dir\""
-  AC_SUBST($1, "$ac_define_dir")
-  AC_DEFINE_UNQUOTED($1, "$ac_define_dir", [$3])
-  test "$prefix_NONE" && prefix=NONE
-  test "$exec_prefix_NONE" && exec_prefix=NONE
-])
diff --git a/configure.ac b/configure.ac
index b2f0922..6d3c77a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -25,6 +25,7 @@ AC_PREREQ([2.60])
 AC_INIT(xdm,[1.1.9],[https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],xdm)
 AM_INIT_AUTOMAKE([foreign dist-bzip2])
 AM_MAINTAINER_MODE
+AC_CONFIG_MACRO_DIR([m4])
 
 # Require xorg-macros: XORG_DEFAULT_OPTIONS
 m4_ifndef([XORG_MACROS_VERSION],
diff --git a/m4/ac_define_dir.m4 b/m4/ac_define_dir.m4
new file mode 100644
index 0000000..44971b9
--- /dev/null
+++ b/m4/ac_define_dir.m4
@@ -0,0 +1,45 @@
+# ===========================================================================
+#          http://www.nongnu.org/autoconf-archive/ac_define_dir.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+#   AC_DEFINE_DIR(VARNAME, DIR [, DESCRIPTION])
+#
+# DESCRIPTION
+#
+#   This macro sets VARNAME to the expansion of the DIR variable, taking
+#   care of fixing up ${prefix} and such.
+#
+#   VARNAME is then offered as both an output variable and a C preprocessor
+#   symbol.
+#
+#   Example:
+#
+#      AC_DEFINE_DIR([DATADIR], [datadir], [Where data are placed to.])
+#
+# LICENSE
+#
+#   Copyright (c) 2008 Stepan Kasal <kasal@ucw.cz>
+#   Copyright (c) 2008 Andreas Schwab <schwab@suse.de>
+#   Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de>
+#   Copyright (c) 2008 Alexandre Oliva
+#
+#   Copying and distribution of this file, with or without modification, are
+#   permitted in any medium without royalty provided the copyright notice
+#   and this notice are preserved.
+
+AC_DEFUN([AC_DEFINE_DIR], [
+  prefix_NONE=
+  exec_prefix_NONE=
+  test "x$prefix" = xNONE && prefix_NONE=yes && prefix=$ac_default_prefix
+  test "x$exec_prefix" = xNONE && exec_prefix_NONE=yes && exec_prefix=$prefix
+dnl In Autoconf 2.60, ${datadir} refers to ${datarootdir}, which in turn
+dnl refers to ${prefix}.  Thus we have to use `eval' twice.
+  eval ac_define_dir="\"[$]$2\""
+  eval ac_define_dir="\"$ac_define_dir\""
+  AC_SUBST($1, "$ac_define_dir")
+  AC_DEFINE_UNQUOTED($1, "$ac_define_dir", [$3])
+  test "$prefix_NONE" && prefix=NONE
+  test "$exec_prefix_NONE" && exec_prefix=NONE
+])

commit b9226288b96f0c5988d2c2f52718674d39803a5e
Author: Alan Coopersmith <alan.coopersmith@sun.com>
Date:   Mon Mar 15 23:21:30 2010 -0700

    Replace hardcoded NAMELEN of 14 for ancient SysV with MAXNAMELEN
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com>

diff --git a/auth.c b/auth.c
index fa1223b..8e2c226 100644
--- a/auth.c
+++ b/auth.c
@@ -309,8 +309,8 @@ static int
 MakeServerAuthFile (struct display *d, FILE ** file)
 {
     int len;
-#if defined(SYSV) && !defined(SVR4)
-# define NAMELEN	14
+#ifdef MAXNAMELEN
+# define NAMELEN	MAXNAMELEN
 #else
 # define NAMELEN	255
 #endif

commit af916ebc97a3bd6208f1376e52a4310099b48622
Author: Alan Coopersmith <alan.coopersmith@sun.com>
Date:   Mon Mar 15 18:12:05 2010 -0700

    echo_passwd should key off PAM no-echo state, not prompt position
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com>

diff --git a/greeter/Login.c b/greeter/Login.c
index 60c21e9..86e3d44 100644
--- a/greeter/Login.c
+++ b/greeter/Login.c
@@ -359,7 +359,7 @@ realizeValue (LoginWidget w, int cursor, int promptNum, GC gc)
     XDM_ASSERT(promptNum >= 0 && promptNum <= LAST_PROMPT);
 
     /* replace all password characters with asterisks */
-    if ((promptNum == LOGIN_PROMPT_PASSWORD) && (w->login.echo_passwd == True))
+    if ((state == LOGIN_PROMPT_ECHO_OFF) && (w->login.echo_passwd == True))
     {
 	Cardinal length = strlen(text);
 	Cardinal i = 0;
@@ -404,7 +404,7 @@ realizeValue (LoginWidget w, int cursor, int promptNum, GC gc)
 			    width - curoff, height);
 	}
     } else if ((state == LOGIN_PROMPT_ECHO_ON) || (state == LOGIN_TEXT_INFO) ||
-	       ((promptNum == LOGIN_PROMPT_PASSWORD) && (w->login.echo_passwd == True)))
+	       ((state == LOGIN_PROMPT_ECHO_OFF) && (w->login.echo_passwd == True)))
     {
 	int textwidth;
 	int offset = max(cursor, VALUE_SHOW_START(w, promptNum));
@@ -439,7 +439,7 @@ realizeValue (LoginWidget w, int cursor, int promptNum, GC gc)
 	}
     }
     /* free memory */
-    if ((promptNum == LOGIN_PROMPT_PASSWORD) && (w->login.echo_passwd == True))
+    if ((state == LOGIN_PROMPT_ECHO_OFF) && (w->login.echo_passwd == True))
     {
 	XtFree(text);
     }
@@ -491,7 +491,7 @@ realizeCursor (LoginWidget w, GC gc)
 	}
 	break;
     case LOGIN_PROMPT_ECHO_OFF:
-	if ((w->login.activePrompt == LOGIN_PROMPT_PASSWORD) && (w->login.echo_passwd == True)) {
+	if (w->login.echo_passwd == True) {
 	    int len = PROMPT_CURSOR(w, w->login.activePrompt) -
 		VALUE_SHOW_START(w, w->login.activePrompt);
 

commit dd9dc06055e16cd72ff34c2caea22a6627803fa5
Author: Georgy A. Shepelev <gerik@super-komputer6-44.ultra>
Date:   Wed Dec 9 09:34:02 2009 +0300

    xdm: add documentation of the "EchoPasswd" option to the man page
    
    Signed-off-by: Georgy A. Shepelev <shepelev.georgy@googlemail.com>

diff --git a/xdm.man.cpp b/xdm.man.cpp
index 0d9a8b4..6b65694 100644
--- a/xdm.man.cpp
+++ b/xdm.man.cpp
@@ -1050,6 +1050,10 @@ If set to ``true'', allow an otherwise failing password match to succeed
 if the account does not require a password at all.
 The default is ``false'', so only users that have passwords assigned can
 log in.
+.IP "\fBxlogin.Login.echoPasswd\fP"
+If set to ``true'', stars will be rendered instead of the password itself,
+i.e. '***...'.
+The default is ``false''.
 .IP "\fBxlogin.Login.translations\fP"
 This specifies the translations used for the login widget.  Refer to the X
 Toolkit documentation for a complete discussion on translations.  The default

commit 7437298deab265b7669043d4a470a684201f5f3c
Author: Georgy A. Shepelev <gerik@k24a.ulsu.ru>
Date:   Wed Dec 9 12:18:50 2009 +0300

    Adding an option to show stars instead of the password itself.
    
    The behaviour can be controlled via 'xlogin*echoPasswd' option
    in Xresource file. The default option value is 'false'.
    
    Signed-off-by: Georgy A. Shepelev <shepelev.georgy@googlemail.com>
    Tested-by: Georgy A. Shepelev <shepelev.georgy@googlemail.com>
    
    [Reformatted to match existing code style by Alan Coopersmith]
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com>

diff --git a/greeter/Login.c b/greeter/Login.c
index c691992..60c21e9 100644
--- a/greeter/Login.c
+++ b/greeter/Login.c
@@ -219,7 +219,9 @@ static XtResource resources[] = {
     {XtNallowNullPasswd, XtCAllowNullPasswd, XtRBoolean, sizeof (Boolean),
 	offset(allow_null_passwd), XtRImmediate, (XtPointer) False},
     {XtNallowRootLogin, XtCAllowRootLogin, XtRBoolean, sizeof(Boolean),
-     offset(allow_root_login), XtRImmediate, (XtPointer) True}
+	offset(allow_root_login), XtRImmediate, (XtPointer) True},
+    {XtNechoPasswd, XtCEchoPasswd, XtRBoolean, sizeof(Boolean),
+	offset(echo_passwd), XtRImmediate, (XtPointer) False}
 };
 
 #undef offset
@@ -350,12 +352,34 @@ static inline int max (int a, int b) { return a > b ? a : b; }
 static void
 realizeValue (LoginWidget w, int cursor, int promptNum, GC gc)
 {
-    loginPromptState state = w->login.prompts[promptNum].state;
+    loginPromptState state = PROMPT_STATE(w, promptNum);
     char *text = VALUE_TEXT(w, promptNum);
     int	x, y, height, width, curoff;
 
     XDM_ASSERT(promptNum >= 0 && promptNum <= LAST_PROMPT);
 
+    /* replace all password characters with asterisks */
+    if ((promptNum == LOGIN_PROMPT_PASSWORD) && (w->login.echo_passwd == True))
+    {
+	Cardinal length = strlen(text);
+	Cardinal i = 0;
+
+	text = XtMalloc(length + 1);
+
+	if (text == NULL)
+	{
+	    LogOutOfMem("realizeValue");
+	    return;
+	}
+
+	while (i < length)
+	{
+	    text[i++] = '*';
+	}
+
+	text[i] = 0;
+    }
+
     x = VALUE_X (w,promptNum);
     y = PROMPT_Y (w,promptNum);
 
@@ -365,7 +389,7 @@ realizeValue (LoginWidget w, int cursor, int promptNum, GC gc)
     height -= (w->login.inframeswidth * 2);
     width -= (w->login.inframeswidth * 2);
 #ifdef XPM
-    width -= (w->login.logoWidth + 2*(w->login.logoPadding));
+    width -= (w->login.logoWidth + (w->login.logoPadding * 2));
 #endif
     if (cursor > VALUE_SHOW_START(w, promptNum))
 	curoff = TEXT_WIDTH (text, text, cursor);
@@ -379,7 +403,9 @@ realizeValue (LoginWidget w, int cursor, int promptNum, GC gc)
 			    x + curoff, y - TEXT_Y_INC(w),
 			    width - curoff, height);
 	}
-    } else if ((state == LOGIN_PROMPT_ECHO_ON) || (state == LOGIN_TEXT_INFO)) {
+    } else if ((state == LOGIN_PROMPT_ECHO_ON) || (state == LOGIN_TEXT_INFO) ||
+	       ((promptNum == LOGIN_PROMPT_PASSWORD) && (w->login.echo_passwd == True)))
+    {
 	int textwidth;
 	int offset = max(cursor, VALUE_SHOW_START(w, promptNum));
 	int textlen = strlen (text + offset);
@@ -412,6 +438,11 @@ realizeValue (LoginWidget w, int cursor, int promptNum, GC gc)
 	    DRAW_STRING(text, x + curoff, y, text + offset, textlen);
 	}
     }
+    /* free memory */
+    if ((promptNum == LOGIN_PROMPT_PASSWORD) && (w->login.echo_passwd == True))
+    {
+	XtFree(text);
+    }
 }
 
 static void
@@ -460,9 +491,18 @@ realizeCursor (LoginWidget w, GC gc)
 	}
 	break;
     case LOGIN_PROMPT_ECHO_OFF:
-	/* Move cursor one pixel per character to give some feedback without
-	   giving away the password length */
-	x += PROMPT_CURSOR(w, w->login.activePrompt);
+	if ((w->login.activePrompt == LOGIN_PROMPT_PASSWORD) && (w->login.echo_passwd == True)) {
+	    int len = PROMPT_CURSOR(w, w->login.activePrompt) -
+		VALUE_SHOW_START(w, w->login.activePrompt);
+
+	    x += len*TEXT_WIDTH(text, "*", 1);
+	}
+	else
+	{
+	    /* Move cursor one pixel per character to give some feedback
+	       without giving away the password length */
+	    x += PROMPT_CURSOR(w, w->login.activePrompt);
+	}
 	break;
     }
 
diff --git a/greeter/Login.h b/greeter/Login.h
index 43e3f5d..e819672 100644
--- a/greeter/Login.h
+++ b/greeter/Login.h
@@ -100,6 +100,7 @@ from The Open Group.
 # define XtNallowAccess		"allowAccess"
 # define XtNallowNullPasswd	"allowNullPasswd"
 # define XtNallowRootLogin	"allowRootLogin"
+# define XtNechoPasswd		"echoPasswd"
 
 # define XtNface 		"face"
 # define XtCFace		"Face"
@@ -140,6 +141,7 @@ from The Open Group.
 # define XtCAllowAccess		"AllowAccess"
 # define XtCAllowNullPasswd	"AllowNullPasswd"
 # define XtCAllowRootLogin	"AllowRootLogin"
+# define XtCEchoPasswd		"EchoPasswd"
 
 # define XtNchangePasswdMessage	"changePasswdMessage"
 # define XtCChangePasswdMessage	"ChangePasswdMessage"
diff --git a/greeter/LoginP.h b/greeter/LoginP.h
index 59274d3..049c8b1 100644
--- a/greeter/LoginP.h
+++ b/greeter/LoginP.h
@@ -130,6 +130,8 @@ typedef struct {
 	Boolean		allow_access;	/* disable access control on login */
 	Boolean		allow_null_passwd; /* allow null password on login */
 	Boolean		allow_root_login; /* allow root login */
+	/* show password as asterisks, i.e. '**...' */
+	Boolean		echo_passwd;
 	XIC		xic;		/* input method of input context */
 	loginPromptData	prompts[NUM_PROMPTS];
     	time_t 		msgTimeout;
diff --git a/greeter/greet.c b/greeter/greet.c
index d5ea0e6..7f235ef 100644
--- a/greeter/greet.c
+++ b/greeter/greet.c
@@ -73,7 +73,7 @@ from The Open Group.
 #include "dm.h"
 #include "dm_error.h"
 #include "greet.h"
-#include "Login.h"
+#include "LoginP.h"
 
 #if defined(HAVE_OPENLOG) && defined(HAVE_SYSLOG_H)
 # define USE_SYSLOG
@@ -499,9 +499,9 @@ greet_user_rtn GreetUser(
 	const char *	  login_prompt;
 
 
-	SetPrompt(login, 0, NULL, LOGIN_PROMPT_NOT_SHOWN, False);
+	SetPrompt(login, LOGIN_PROMPT_USERNAME, NULL, LOGIN_PROMPT_NOT_SHOWN, False);
 	login_prompt  = GetPrompt(login, LOGIN_PROMPT_USERNAME);
-	SetPrompt(login, 1, NULL, LOGIN_PROMPT_NOT_SHOWN, False);
+	SetPrompt(login, LOGIN_PROMPT_PASSWORD, NULL, LOGIN_PROMPT_NOT_SHOWN, False);
 
 # define RUN_AND_CHECK_PAM_ERROR(function, args)			\
 	    do { 						\

commit 34d120f31347697886a419411d9d4d825874f3f0
Author: Alan Coopersmith <alan.coopersmith@sun.com>
Date:   Fri Jan 15 13:23:24 2010 -0800

    Update Sun license notices to current X.Org standard form
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com>

diff --git a/COPYING b/COPYING
index b65badb..bdba8f6 100644
--- a/COPYING
+++ b/COPYING
@@ -1,3 +1,26 @@
+Copyright © 2002, 2006, 2009 Sun Microsystems, Inc.  All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice (including the next
+paragraph) shall be included in all copies or substantial portions of the
+Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+	------------------------------------------------------------
+
 Copyright 1988, 1989, 1990, 1991, 1994, 1998  The Open Group
 
 Permission to use, copy, modify, distribute, and sell this software and its
@@ -25,7 +48,6 @@ from The Open Group.
 	------------------------------------------------------------
 
 Copyright 1988, 1990, 1998  The Open Group
-Copyright 2002 Sun Microsystems, Inc.  All rights reserved.
 
 Permission to use, copy, modify, distribute, and sell this software and its
 documentation for any purpose is hereby granted without fee, provided that
@@ -79,35 +101,6 @@ authorization.
 
 	------------------------------------------------------------
 
-Copyright 2006, 2009 Sun Microsystems, Inc.  All rights reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, and/or sell copies of the Software, and to permit persons
-to whom the Software is furnished to do so, provided that the above
-copyright notice(s) and this permission notice appear in all copies of
-the Software and that both the above copyright notice(s) and this
-permission notice appear in supporting documentation.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
-OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
-HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL
-INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING
-FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
-NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
-WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-Except as contained in this notice, the name of a copyright holder
-shall not be used in advertising or otherwise to promote the sale, use
-or other dealings in this Software without prior written authorization
-of the copyright holder.
-
-	------------------------------------------------------------
-
 md5 code in genauth.c implements something close to the MD5 message-digest
 algorithm.  This code is based on code written by Colin Plumb in 1993, 
 no copyright is claimed.
diff --git a/access.c b/access.c
index a9558b8..ad736ff 100644
--- a/access.c
+++ b/access.c
@@ -1,7 +1,28 @@
 /*
+ * Copyright © 2002 Sun Microsystems, Inc.  All rights reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+/*
  *
 Copyright 1990, 1998  The Open Group
-Copyright 2002 Sun Microsystems, Inc.  All rights reserved.
 
 Permission to use, copy, modify, distribute, and sell this software and its
 documentation for any purpose is hereby granted without fee, provided that
diff --git a/greeter/Login.c b/greeter/Login.c
index 5afe363..c691992 100644
--- a/greeter/Login.c
+++ b/greeter/Login.c
@@ -25,32 +25,27 @@ other dealings in this Software without prior written authorization
 from The Open Group.
 
 */
-/* Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
+/*
+ * Copyright © 2006 Sun Microsystems, Inc.  All rights reserved.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, and/or sell copies of the Software, and to permit persons
- * to whom the Software is furnished to do so, provided that the above
- * copyright notice(s) and this permission notice appear in all copies of
- * the Software and that both the above copyright notice(s) and this
- * permission notice appear in supporting documentation.
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
- * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL
- * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING
- * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
- * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
- * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
  *
- * Except as contained in this notice, the name of a copyright holder
- * shall not be used in advertising or otherwise to promote the sale, use
- * or other dealings in this Software without prior written authorization
- * of the copyright holder.
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
  */
 
 
diff --git a/greeter/Login.h b/greeter/Login.h
index 7d04a1a..43e3f5d 100644
--- a/greeter/Login.h
+++ b/greeter/Login.h
@@ -25,32 +25,27 @@ other dealings in this Software without prior written authorization
 from The Open Group.
 
 */
-/* Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
+/*
+ * Copyright © 2006 Sun Microsystems, Inc.  All rights reserved.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, and/or sell copies of the Software, and to permit persons
- * to whom the Software is furnished to do so, provided that the above
- * copyright notice(s) and this permission notice appear in all copies of
- * the Software and that both the above copyright notice(s) and this
- * permission notice appear in supporting documentation.
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
- * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL
- * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING
- * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
- * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
- * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
  *
- * Except as contained in this notice, the name of a copyright holder
- * shall not be used in advertising or otherwise to promote the sale, use
- * or other dealings in this Software without prior written authorization
- * of the copyright holder.
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
  */
 
 /*
diff --git a/greeter/LoginP.h b/greeter/LoginP.h
index d73a9a1..59274d3 100644
--- a/greeter/LoginP.h
+++ b/greeter/LoginP.h
@@ -25,32 +25,27 @@ other dealings in this Software without prior written authorization
 from The Open Group.
 
 */
-/* Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
+/*
+ * Copyright © 2006 Sun Microsystems, Inc.  All rights reserved.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, and/or sell copies of the Software, and to permit persons
- * to whom the Software is furnished to do so, provided that the above
- * copyright notice(s) and this permission notice appear in all copies of
- * the Software and that both the above copyright notice(s) and this
- * permission notice appear in supporting documentation.
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
- * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL
- * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING
- * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
- * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
- * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
  *
- * Except as contained in this notice, the name of a copyright holder
- * shall not be used in advertising or otherwise to promote the sale, use
- * or other dealings in this Software without prior written authorization
- * of the copyright holder.
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
  */
 
 /*
diff --git a/greeter/greet.c b/greeter/greet.c
index f4c972b..d5ea0e6 100644
--- a/greeter/greet.c
+++ b/greeter/greet.c
@@ -25,32 +25,27 @@ other dealings in this Software without prior written authorization
 from The Open Group.
 
 */
-/* Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
+/*
+ * Copyright © 2006 Sun Microsystems, Inc.  All rights reserved.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, and/or sell copies of the Software, and to permit persons
- * to whom the Software is furnished to do so, provided that the above
- * copyright notice(s) and this permission notice appear in all copies of
- * the Software and that both the above copyright notice(s) and this
- * permission notice appear in supporting documentation.
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
- * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL
- * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING
- * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
- * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
- * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
  *
- * Except as contained in this notice, the name of a copyright holder
- * shall not be used in advertising or otherwise to promote the sale, use
- * or other dealings in this Software without prior written authorization
- * of the copyright holder.
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER


Reply to: