Index: kdm/config.def
===================================================================
--- kdm/config.def.orig
+++ kdm/config.def
@@ -792,6 +792,21 @@ Description:
  <emphasis>Do not</emphasis> change it, you may interfere with future
  upgrades and this could result in &kdm; failing to run.
 
+Key: SUSEConfigVersion
+Type: string
+Default: ""
+CDefault: -
+User: dummy
+# will be overwritten
+Instance:
+Comment:
+ This option exists solely for the purpose of a clean automatic upgrade.
+ Do not even think about changing it!
+Description:
+ This option exists solely for the purpose of clean automatic upgrades.
+ <emphasis>Do not</emphasis> change it, you may interfere with future
+ upgrades and this could result in &kdm; failing to run.
+
 Key: PAMService
 If: defined(USE_PAM)
 Type: string
@@ -874,10 +889,10 @@ Description:
 
 Key: PidFile
 Type: string
-Default: ""
+Default: "/var/run/kdm.pid"
 User: core
-Instance: "/var/run/kdm.pid"
-Merge: xdm
+Instance: ""
+Update: reset_sec_0_1
 Comment:
  Where &kdm; should store its PID (do not store if empty).
 Description:
@@ -901,10 +916,10 @@ Description:
 Key: AuthDir
 Type: path
 # differs from XDM
-Default: "/var/run/xauth"
+Default: "/var/lib/xdm/authdir/authfiles"
 User: core
-Instance: #"/tmp"
-Merge: xdm(P_authDir)
+Instance: #""
+Update: reset_sec_0_1
 Comment:
  Where to store authorization files.
 Description:
@@ -930,7 +945,7 @@ Description:
 
 Key: ExportList
 Type: list
-Default: ""
+Default: "LANG,XCURSOR_THEME"
 User: core
 Instance: #"LD_LIBRARY_PATH,ANOTHER_IMPORTANT_VAR"
 Merge: xdm(P_List)
@@ -1063,9 +1078,10 @@ Description:
 
 Key: Enable
 Type: bool
-Default: true
+Default: false
 User: dep(xdmcpEnable)
 Instance: false
+Update: reset_sec_0_1
 Comment: &
 Description:
  Whether &kdm; should listen to incoming &XDMCP; requests.
@@ -1102,11 +1118,10 @@ Description:
 Key: Xaccess
 Type: string
 # differs from xdm
-Default: *KDMCONF "/Xaccess"
+Default: *"/etc/X11/xdm/Xaccess"
 User: config(Xaccess)
-Instance: #""
-Update: mk_xaccess
-Merge: xdm:accessFile
+Instance: #
+Update: reset_sec_0_1
 Comment:
  &XDMCP; access control file in the usual XDM-Xaccess format.
 Description:
@@ -1164,13 +1179,11 @@ Description:
 
 Key: Willing
 Type: string
-Default: ""
+Default: "/etc/X11/xdm/Xwilling"
 User: core
 # will be overwritten
 Instance: #
-Update: mk_willing
-Merge: xdm
-Merge: kdm:Xwilling
+Update: reset_sec_0_1
 Comment:
  The program which is invoked to dynamically generate replies to &XDMCP;
  DirectQuery or BroadcastQuery requests.
@@ -1244,7 +1257,7 @@ Type: enum
  None/BO_NONE: no boot manager
  Grub/BO_GRUB: Grub boot manager
  Lilo/BO_LILO: Lilo boot manager (Linux on i386 &amp; x86-64 only)
-Default: None
+Default: Grub
 User: core
 User: greeter
 Instance: #Grub
@@ -1347,6 +1360,7 @@ Default: DEF_SERVER_CMD
 DDefault: -
 User: core
 Instance: :*/DEF_SERVER_CMD
+Update: reset_sec_0_1
 Comment:
  The command line to start the &X-Server;, without display number and VT spec.
  This string is subject to word splitting.
@@ -1355,7 +1369,7 @@ Description:
  This string is subject to word splitting.
  </para><para>
  The default is something reasonable for the system on which &kdm; was built,
- like <command>/usr/X11R6/bin/X</command>.
+ like <command>/usr/bin/X</command>.
 
 Key: ServerArgsLocal
 Type: string
@@ -1549,11 +1563,10 @@ Description:
 Key: Resources
 # XXX strictly speaking this is supposed to be a string list, i think.
 Type: string
-Default: ""
+Default: "/etx/X11/xdm/Xresources"
 User: core
 Instance: #*/""
-Update: cp_resources
-Merge: xdm
+Update: reset_sec_0_1
 Comment:
  Specify a file with X-resources for the greeter, chooser and background.
  The KDE frontend does not use this file, so you do not need it unless you
@@ -1581,12 +1594,11 @@ Description:
 
 Key: Setup
 Type: string
-Default: ""
+Default: "/etc/X11/xdm/Xsetup"
 User: core
 # will be overwritten
 Instance: #*/""
-Update: mk_setup
-Merge: xdm
+Update: reset_sec_0_1
 Comment:
  A program to run before the greeter is shown. Can be used to start an
  xconsole or an alternative background generator. Subject to word splitting.
@@ -1602,12 +1614,11 @@ Description:
 
 Key: Startup
 Type: string
-Default: ""
+Default: "/etc/X11/xdm/Xstartup"
 User: core
 # will be overwritten
 Instance: #*/""
-Update: mk_startup
-Merge: xdm
+Update: reset_sec_0_1
 Comment:
  A program to run before a user session starts. Subject to word splitting.
 Description:
@@ -1620,12 +1631,11 @@ Description:
 
 Key: Reset
 Type: string
-Default: ""
+Default: "/etc/X11/xdm/Xreset"
 User: core
 # will be overwritten
 Instance: #*/""
-Update: mk_reset
-Merge: xdm
+Update: reset_sec_0_1
 Comment:
  A program to run after a user session exits. Subject to word splitting.
 Description:
@@ -1638,12 +1648,12 @@ Description:
 
 Key: Session
 Type: string
-Default: XBINDIR "/xterm -ls -T"
+Default: "/etc/X11/xdm/Xsession"
 #Merge: xdm - incompatible!
 User: core
 # will be overwritten
 Instance: #*/""
-Update: mk_session
+Update: reset_sec_0_1
 Comment:
  The program which is run as the user which logs in. It is supposed to
  interpret the session argument (see SessionsDirs) and start an appropriate
@@ -1746,10 +1756,11 @@ Description:
 
 Key: AllowRootLogin
 Type: bool
-Default: true
+Default: false
 User: core
 User: greeter(showRoot)
-Instance: */false
+Instance: #*/false
+Update: reset_sec_1_2
 Merge: xdm
 Comment:
  Allow root logins?
@@ -1764,6 +1775,7 @@ User: core
 # sensible?
 Instance: */false
 Instance: :*/true
+Update: reset_sec_0_1
 Merge: xdm
 Comment:
  Allow to log in, when user has set an empty password?
@@ -1775,12 +1787,13 @@ Type: enum
  None/SHUT_NONE: no <guilabel>Shutdown...</guilabel> menu entry is shown at all
  Root/SHUT_ROOT: the <systemitem class="username">root</systemitem> password must be entered to shut down
  All/SHUT_ALL: everybody can shut down the machine
-Default: All
+Default: Root
 User: core
 User: greeter
 Instance: */Root
-Instance: :*/All
-Merge: kdm:-Greeter/
+Instance: #:*/All
+Update: reset_sec_0_1
+#Merge: kdm:-Greeter/
 Comment: &
 Description:
  Who is allowed to shut down the system. This applies both to the
@@ -1866,6 +1879,7 @@ Type: bool
 Default: false
 User: dep
 Instance: #:0/true
+Update: reset_sec_0_1
 Comment: &
 Description:
  Enable automatic login. <emphasis>Use with extreme care!</emphasis>
@@ -1899,7 +1913,7 @@ Default: ""
 PostProc: PautoLoginX
 User: core(autoUser)
 User: greeter
-Instance: #:0/"fred"
+Instance: #:0/""
 Merge: xdm:autoUser(P_autoUser)
 Comment: &
 Description:
@@ -1930,10 +1944,10 @@ Description:
 
 Key: SessionsDirs
 Type: list
-Default: KDMDATA "/sessions"
+Default: "/etc/X11/sessions," KDMDATA "/sessions,/usr/share/xsessions"
 User: core
 User: greeter-c
-Instance: #*/"/etc/X11/sessions,/usr/share/xsessions"
+Instance: #*/""
 Comment:
  The directories containing session type definitions in .desktop format.
 Description:
@@ -2008,7 +2022,8 @@ Type: enum
  Clock/LOGO_CLOCK: a neat analog clock
 Default: Clock
 User: greeter
-Instance: */Logo
+Instance: */Clock
+Update: reset_sec_0_1
 Comment:
  What should be shown in the greeter's logo are:
 Description:
@@ -2223,7 +2238,7 @@ Description:
 
 Key: HiddenUsers
 Type: list
-Default: ""
+Default: "root"
 User: greeter-c(noUsers)
 Instance: #*/"root"
 # depends on {Min,Max}ShowUID
@@ -2363,13 +2378,14 @@ Type: enum
 Default: OneStar
 User: greeter
 Instance: #*/NoEcho
+Update: reset_sec_0_1
 Comment: &
 Description:
  The password input fields cloak the typed in text. Specify, how to do it:
 
 Key: UseBackground
 Type: bool
-Default: true
+Default: false
 User: greeter
 Instance: #*/!
 Comment:
@@ -2507,6 +2523,7 @@ Type: bool
 Default: false
 User: greeter
 Instance: :0/true
+Update: reset_sec_0_1
 Comment:
  Enable &kdm;'s built-in xconsole. Note that this can be enabled for only
  one display at a time.
@@ -2595,9 +2612,10 @@ Description:
 
 Key: Preloader
 Type: string
-Default: ""
+Default: KDE_BINDIR "/preloadkde"
 User: greeter-c
-Instance: */KDE_BINDIR "/preloadkde"
+Instance: */""
+Update: reset_sec_0_1
 Comment: &
 Description:
  A program to run while the greeter is visible. It is supposed to preload
@@ -2606,7 +2624,7 @@ Description:
 
 Key: UseTheme
 Type: bool
-Default: false
+Default: true
 User: greeter
 Instance: #*/true
 Comment: &
@@ -2615,9 +2633,10 @@ Description:
 
 Key: Theme
 Type: string
-Default: ""
+Default: KDMDATA "/themes/SUSE"
 User: greeter
-Instance: */KDMDATA "/themes/circles"
+Instance: */""
+Update: reset_sec_0_1
 Comment: &
 Description:
  The theme to use for the greeter. Can point to either a directory or an XML
Index: kdm/kfrontend/read_sysconfig.sh
===================================================================
--- /dev/null
+++ kdm/kfrontend/read_sysconfig.sh
@@ -0,0 +1,147 @@
+#!/bin/bash
+#
+# Copyright (c) 2006 SUSE Linux Products GmbH Nuernberg, Germany.
+#
+# Author: Stephan Kulow   <coolo@suse.de>
+#
+
+#
+# check if we are started as root
+# only one of UID and USER must be set correctly
+#
+if test "$UID" != 0 -a "$USER" != root; then
+    echo "You must be root to start $0."
+    exit 1
+fi
+
+#
+# check for sysconfig/displaymanager or rc.config
+#
+test -f /etc/sysconfig/displaymanager && source /etc/sysconfig/displaymanager
+test -f /etc/sysconfig/security       && source /etc/sysconfig/security
+test -f /etc/sysconfig/language       && source /etc/sysconfig/language
+
+#
+# source /etc/profile to get $kdedir
+#
+kdedir="/opt/kde3"
+kdmdir="/var/adm/kdm"
+
+# check for write permissions
+[ -w ${kdmdir} ] || mkdir -p ${kdmdir}
+[ -w ${kdmdir} ] || exit
+
+#
+# Set Style of Shutdown
+#
+ECHO_MODE="OneStar"
+ALLOW_ROOT_LOGIN="true"
+case "$DISPLAYMANAGER_SHUTDOWN" in
+    all|ALL|All)
+         DISPLAYMANAGER_SHUTDOWN=All;;
+    none|NONE|None)
+         DISPLAYMANAGER_SHUTDOWN=None;;
+    auto|Auto|AUTO)
+      case "$PERMISSION_SECURITY" in
+	*easy*)
+	     DISPLAYMANAGER_SHUTDOWN=All
+             ;;
+        *paranoid*)
+             ECHO_MODE="NoEcho"
+             ALLOW_ROOT_LOGIN="false"
+	     DISPLAYMANAGER_SHUTDOWN=Root
+             ;;
+	*)
+	     DISPLAYMANAGER_SHUTDOWN=Root
+	     ;;
+      esac
+      ;;
+    * )
+        DISPLAYMANAGER_SHUTDOWN=Root;;
+esac
+
+(
+echo "[X-*-Greeter]"
+if [ -n "$KDM_USERS" ]; then
+  echo "ShowUsers=Selected"
+  echo -n "SelectedUsers="
+  echo ${KDM_USERS}|sed -e 's@ [ ]*@ @g' -e 's@ @,@g'
+else
+  echo "ShowUsers=NotHidden"
+fi
+if [ "$DISPLAYMANAGER_AD_INTEGRATION" = "yes" ]; then
+  echo "PluginsLogin=winbind"
+fi
+if [ -n "$DISPLAYMANAGER_KDM_THEME" -a -d "/opt/kde3/share/apps/kdm/themes/$DISPLAYMANAGER_KDM_THEME" ]; then
+  echo "Theme=/opt/kde3/share/apps/kdm/themes/$DISPLAYMANAGER_KDM_THEME"
+  echo "UseTheme=true"
+  echo "UseBackground=false"
+else
+  echo "UseTheme=false"
+  echo "UseBackground=true"
+fi
+# kdm has en_US as default instead of simply reading LC_LANG :(
+echo "Language="
+
+echo "[Xdmcp]"
+if [ "$DISPLAYMANAGER_REMOTE_ACCESS" = "yes" ]; then
+  echo "Enable=true"
+else
+  echo "Enable=false"
+fi
+
+echo "[X-:0-Core]"
+if [ "$DISPLAYMANAGER_AUTOLOGIN" ]; then
+  echo "AutoLoginEnable=true"
+  echo "AutoLoginUser=${DISPLAYMANAGER_AUTOLOGIN}"
+else
+  echo "AutoLoginEnable=false"
+fi
+if [ "$DISPLAYMANAGER_XSERVER_TCP_PORT_6000_OPEN" = "yes" ]; then
+  echo "ServerArgsLocal="
+else
+  echo "ServerArgsLocal=-nolisten tcp"
+fi
+if [ "$DISPLAYMANAGER_PASSWORD_LESS_LOGIN" = "yes" ]; then
+   echo "NoPassEnable=true"
+   echo "NoPassAllUsers=true"
+else
+   echo "NoPassEnable=false"
+   echo "NoPassAllUsers=false"
+fi
+
+echo "[X-:*-Core]"
+echo "AllowShutdown=${DISPLAYMANAGER_SHUTDOWN}"
+echo "AllowRootLogin=${ALLOW_ROOT_LOGIN}"
+echo "AllowNullPasswd=${ALLOW_ROOT_LOGIN}"
+
+echo "[X-*-Core]"
+
+if test "$DISPLAYMANAGER_ROOT_LOGIN_REMOTE" = "yes"; then
+    echo "AllowRootLogin=true"
+else
+    echo "AllowRootLogin=false"
+fi
+
+case "$DISPLAYMANAGER_XSERVER" in
+   Xgl)
+	xgl=`type -p Xgl`
+	echo "ServerCmd=$xgl $DISPLAYMANAGER_XGL_OPTS -br"
+        echo "ServerTimeout=50"
+        ;;
+   Xorg)
+        xorg=`type -p Xorg`
+	echo "ServerCmd=$xorg -br"
+	;;
+   *)
+	echo "#Unknown X server - leaving X"
+	;;
+esac
+
+echo "[General]"
+if [ "$DISPLAYMANAGER_STARTS_XSERVER" != "yes" ]; then
+  echo "StaticServers="
+fi
+
+) > ${kdmdir}/kdmrc.sysconfig
+
Index: kdm/kfrontend/kdm_config.c
===================================================================
--- kdm/kfrontend/kdm_config.c.orig
+++ kdm/kfrontend/kdm_config.c
@@ -386,7 +386,7 @@ static const char *kdmrc = KDMCONF "/kdm
 static Section *rootsec;
 
 static void
-ReadConf()
+ReadConfFile(const char *rcfile)
 {
 	const char *nstr, *dstr, *cstr, *dhost, *dnum, *dclass;
 	char *s, *e, *st, *en, *ek, *sl, *pt;
@@ -396,14 +396,9 @@ ReadConf()
 	int nlen, dlen, clen, dhostl, dnuml, dclassl;
 	int i, line, sectmoan, restl;
 	File file;
-	static int confread;
 
-	if (confread)
-		return;
-	confread = 1;
-
-	Debug( "reading config %s ...\n", kdmrc );
-	if (!readFile( &file, kdmrc, "master configuration" ))
+	Debug( "reading config %s ...\n", rcfile );
+	if (!readFile( &file, rcfile, "master configuration" ))
 		return;
 
 	for (s = file.buf, line = 0, cursec = 0, sectmoan = 1; s < file.eof; s++) {
@@ -429,7 +424,7 @@ ReadConf()
 				e--;
 			if (*e != ']') {
 				cursec = 0;
-				LogError( "Invalid section header at %s:%d\n", kdmrc, line );
+				LogError( "Invalid section header at %s:%d\n", rcfile, line );
 				continue;
 			}
 			nstr = sl + 1;
@@ -438,8 +433,8 @@ ReadConf()
 				if (nlen == cursec->nlen &&
 				    !memcmp( nstr, cursec->name, nlen ))
 				{
-					LogInfo( "Multiple occurrences of section [%.*s] in %s. "
-					         "Consider merging them.\n", nlen, nstr, kdmrc );
+					Debug( "Multiple occurrences of section [%.*s] in %s. "
+					         "Consider merging them.\n", nlen, nstr, rcfile );
 					goto secfnd;
 				}
 			if (nstr[0] == 'X' && nstr[1] == '-') {
@@ -495,7 +490,7 @@ ReadConf()
 		  illsec:
 			cursec = 0;
 			LogError( "Unrecognized section name [%.*s] at %s:%d\n",
-			          nlen, nstr, kdmrc, line );
+			          nlen, nstr, rcfile, line );
 			continue;
 		  newsec:
 			if (!(cursec = Malloc( sizeof(*cursec) )))
@@ -523,7 +518,7 @@ ReadConf()
 		if (!cursec) {
 			if (sectmoan) {
 				sectmoan = 0;
-				LogError( "Entry outside any section at %s:%d", kdmrc, line );
+				LogError( "Entry outside any section at %s:%d", rcfile, line );
 			}
 			goto sktoeol;
 		}
@@ -531,13 +526,13 @@ ReadConf()
 		for (; (s < file.eof) && (*s != '\n'); s++)
 			if (*s == '=')
 				goto haveeq;
-		LogError( "Invalid entry (missing '=') at %s:%d\n", kdmrc, line );
+		LogError( "Invalid entry (missing '=') at %s:%d\n", rcfile, line );
 		continue;
 
 	  haveeq:
 		for (ek = s - 1; ; ek--) {
 			if (ek < sl) {
-				LogError( "Invalid entry (empty key) at %s:%d\n", kdmrc, line );
+				LogError( "Invalid entry (empty key) at %s:%d\n", rcfile, line );
 				goto sktoeol;
 			}
 			if (!isspace( *ek ))
@@ -551,7 +546,7 @@ ReadConf()
 			if (*s == '\\') {
 				s++;
 				if (s >= file.eof || *s == '\n') {
-					LogError( "Trailing backslash at %s:%d\n", kdmrc, line );
+					LogError( "Trailing backslash at %s:%d\n", rcfile, line );
 					break;
 				}
 				switch (*s) {
@@ -580,29 +575,42 @@ ReadConf()
 				goto keyok;
 		}
 		LogError( "Unrecognized key '%.*s' in section [%.*s] at %s:%d\n",
-		          nlen, nstr, cursec->nlen, cursec->name, kdmrc, line );
+		          nlen, nstr, cursec->nlen, cursec->name, rcfile, line );
 		continue;
 	  keyok:
 		for (curent = cursec->entries; curent; curent = curent->next)
 			if (ce == curent->ent) {
 				LogError( "Multiple occurrences of key '%s' in section [%.*s]"
 				          " of %s\n",
-				          ce->name, cursec->nlen, cursec->name, kdmrc );
+				          ce->name, cursec->nlen, cursec->name, rcfile );
 				goto keyfnd;
 			}
 		if (!(curent = Malloc( sizeof(*curent) )))
 			return;
+		curent->next = cursec->entries;
+		cursec->entries = curent;
+	keyfnd:
 		curent->ent = ce;
 		curent->line = line;
 		curent->val = st;
 		curent->vallen = en - st;
-		curent->next = cursec->entries;
-		cursec->entries = curent;
-	  keyfnd:
 		continue;
 	}
 }
 
+static void ReadConf()
+{
+	static int confread = 0;
+
+	if (confread)
+		return;
+	confread++;
+
+	system("/opt/kde3/share/apps/kdm/read_sysconfig.sh");
+	ReadConfFile("/var/adm/kdm/kdmrc.sysconfig");
+	ReadConfFile(kdmrc);
+}
+
 static Entry *
 FindGEnt( int id )
 {
Index: kdm/kfrontend/genkdmconf.c
===================================================================
--- kdm/kfrontend/genkdmconf.c.orig
+++ kdm/kfrontend/genkdmconf.c
@@ -66,6 +66,7 @@ Foundation, Inc., 51 Franklin Street, Fi
 #define stringify(x) __stringify(x)
 
 #define RCVERSTR stringify(RCVERMAJOR) "." stringify(RCVERMINOR)
+#define SUSERCVERSTR "2"
 
 static int old_scripts, no_old_scripts, old_confs, no_old,
 	no_backup, no_in_notice, use_destdir, mixed_scripts;
@@ -73,7 +74,7 @@ static const char *newdir = KDMCONF, *fa
 	*oldxdm, *oldkde;
 
 static int oldver;
-
+static int oldsusever;
 
 typedef struct StrList {
 	struct StrList *next;
@@ -462,6 +463,7 @@ wrconf( FILE *f )
 	const char *cmt;
 
 	putfqval( "General", "ConfigVersion", RCVERSTR );
+	putfqval( "General", "SUSEConfigVersion", SUSERCVERSTR );
 	for (cs = config; cs; cs = cs->next) {
 		fprintf( f, "%s[%s]\n",
 		         cs->comment ? cs->comment : "\n", cs->name );
@@ -1363,6 +1365,26 @@ upd_consolettys( Entry *ce, Section *cs
 }
 #endif
 
+static void
+reset_sec_0_1( Entry *ce, Section *cs ATTR_UNUSED )
+{
+    if (oldsusever < 1 || !ce->written )
+    {
+        ce->active = 0;
+    }
+    return;
+}
+
+static void
+reset_sec_1_2( Entry *ce, Section *cs ATTR_UNUSED )
+{
+    if (oldsusever < 2 || !ce->written )
+    {
+        ce->active = 0;
+    }
+    return;
+}
+
 #ifdef XDMCP
 static void
 cp_keyfile( Entry *ce, Section *cs ATTR_UNUSED )
@@ -2228,7 +2250,7 @@ static int
 mergeKdmRcNewer( const char *path )
 {
 	char *p;
-	const char *cp, *sec, *key;
+	const char *cp, *sec, *key, *susever;
 	RSection *rootsect, *cs;
 	REntry *ce;
 	int i, j;
@@ -2291,8 +2313,12 @@ mergeKdmRcNewer( const char *path )
 	}
 
 #ifdef XDMCP
-	applydefs( kdmdefs_all, as(kdmdefs_all), path );
+	/* applydefs( kdmdefs_all, as(kdmdefs_all), path ); */
 #endif
+	susever = getfqval( "General", "SUSEConfigVersion", "" );
+	if (sscanf( susever, "%u", &oldsusever ) != 1)
+	    oldsusever = 0;
+
 	if (!*(cp = getfqval( "General", "ConfigVersion", "" ))) { /* < 3.1 */
 		mod_usebg = 1;
 		if (is22conf( path )) {
Index: kdm/kfrontend/Makefile.am
===================================================================
--- kdm/kfrontend/Makefile.am.orig
+++ kdm/kfrontend/Makefile.am
@@ -64,3 +64,7 @@ kdm_greet_COMPILE_FIRST = ../config.ci
 kdm_config_COMPILE_FIRST = ../config.ci
 genkdmconf_COMPILE_FIRST = ../config.ci
 
+
+appsdir = $(kde_datadir)/kdm
+apps_SCRIPTS = read_sysconfig.sh
+