Index: kdm/config.def =================================================================== --- kdm/config.def.orig +++ kdm/config.def @@ -792,6 +792,21 @@ Description: Do not 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. + Do not 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 & 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. The default is something reasonable for the system on which &kdm; was built, - like /usr/X11R6/bin/X. + like /usr/bin/X. 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 Shutdown... menu entry is shown at all Root/SHUT_ROOT: the root 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. Use with extreme care! @@ -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 +# + +# +# 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 +