Blame SOURCES/kde-workspace-4.8.2-bz#732830-login.patch

b5cc75
diff -up kde-workspace-4.8.2/kdm/CMakeLists.txt.bz#732830-login kde-workspace-4.8.2/kdm/CMakeLists.txt
b5cc75
--- kde-workspace-4.8.2/kdm/CMakeLists.txt.bz#732830-login	2012-03-30 00:02:31.000000000 +0200
b5cc75
+++ kde-workspace-4.8.2/kdm/CMakeLists.txt	2012-03-30 13:38:35.094493727 +0200
b5cc75
@@ -33,6 +33,11 @@ set(backgroundlib_SRCS
b5cc75
     ${CMAKE_CURRENT_SOURCE_DIR}/kcm/background/bgsettings.cpp
b5cc75
 )
b5cc75
 
b5cc75
+set(kdmminmaxuidlib_SRCS
b5cc75
+    ${CMAKE_CURRENT_SOURCE_DIR}/kdm-minmaxuid.c
b5cc75
+    ${CMAKE_CURRENT_SOURCE_DIR}/kdm-minmaxuid.h
b5cc75
+)
b5cc75
+
b5cc75
 # after confci is defined
b5cc75
 add_subdirectory(backend)
b5cc75
 add_subdirectory(kfrontend)
b5cc75
diff -up kde-workspace-4.8.2/kdm/config.def.bz#732830-login kde-workspace-4.8.2/kdm/config.def
b5cc75
--- kde-workspace-4.8.2/kdm/config.def.bz#732830-login	2012-03-30 00:02:31.000000000 +0200
b5cc75
+++ kde-workspace-4.8.2/kdm/config.def	2012-03-30 13:38:35.112493501 +0200
b5cc75
@@ -2288,9 +2288,13 @@ Instance: #*/
b5cc75
 Update: upd_minshowuid
b5cc75
 Comment:
b5cc75
  Special case of HiddenUsers: users with a non-zero UID less than this number
b5cc75
- will not be shown as well.
b5cc75
+ will not be shown as well.  Setting this to -1 means that the limit should be
b5cc75
+ determined in a platform-specific way (by reading /etc/login.defs or using a
b5cc75
+ compiled-in default).
b5cc75
 Description:
b5cc75
- See <option>ShowUsers</option>.
b5cc75
+ See <option>ShowUsers</option>.  Setting this to -1 means that the limit
b5cc75
+ should be determined in a platform-specific way (by reading
b5cc75
+ <filename>/etc/login.defs</filename> or using a compiled-in default).
b5cc75
 
b5cc75
 Key: MaxShowUID
b5cc75
 Type: int
b5cc75
@@ -2301,9 +2305,11 @@ Instance: #*/
b5cc75
 Update: upd_maxshowuid
b5cc75
 Comment:
b5cc75
  Complement to MinShowUID: users with a UID greater than this number will
b5cc75
- not be shown as well.
b5cc75
+ not be shown as well.  Unlike MinShowUID, the special value -1 is not
b5cc75
+ supported.
b5cc75
 Description:
b5cc75
- See <option>ShowUsers</option>.
b5cc75
+ See <option>ShowUsers</option>.  Unlike <option>MinShowUID</option>, the
b5cc75
+ special value -1 is not supported.
b5cc75
 
b5cc75
 Key: SortUsers
b5cc75
 Type: bool
b5cc75
diff -up kde-workspace-4.8.2/kdm/kcm/CMakeLists.txt.bz#732830-login kde-workspace-4.8.2/kdm/kcm/CMakeLists.txt
b5cc75
--- kde-workspace-4.8.2/kdm/kcm/CMakeLists.txt.bz#732830-login	2012-03-30 00:02:31.000000000 +0200
b5cc75
+++ kde-workspace-4.8.2/kdm/kcm/CMakeLists.txt	2012-03-30 13:38:35.114493477 +0200
b5cc75
@@ -15,6 +15,7 @@ kde4_add_ui_files(kcmbackgroundlib_SRCS
b5cc75
     background/bgadvanced_ui.ui)
b5cc75
 
b5cc75
 set(kcm_kdm_PART_SRCS ${kcmbackgroundlib_SRCS} ${backgroundlib_SRCS}
b5cc75
+   ${kdmminmaxuidlib_SRCS}
b5cc75
    background.cpp
b5cc75
    kdm-gen.cpp
b5cc75
    kdm-dlg.cpp
b5cc75
diff -up kde-workspace-4.8.2/kdm/kcm/kdm-users.cpp.bz#732830-login kde-workspace-4.8.2/kdm/kcm/kdm-users.cpp
b5cc75
--- kde-workspace-4.8.2/kdm/kcm/kdm-users.cpp.bz#732830-login	2012-03-30 00:02:31.000000000 +0200
b5cc75
+++ kde-workspace-4.8.2/kdm/kcm/kdm-users.cpp	2012-03-30 13:38:35.123493365 +0200
b5cc75
@@ -58,6 +58,9 @@
b5cc75
 #include <unistd.h>
b5cc75
 #include <pwd.h>
b5cc75
 
b5cc75
+#include "../kdm-minmaxuid.h"
b5cc75
+
b5cc75
+
b5cc75
 extern KConfig *config;
b5cc75
 
b5cc75
 extern int handleActionReply(QWidget *parent, const KAuth::ActionReply &reply);
b5cc75
@@ -80,28 +83,11 @@ static int executeFaceAction(QWidget *pa
b5cc75
 KDMUsersWidget::KDMUsersWidget(QWidget *parent)
b5cc75
     : QWidget(parent)
b5cc75
 {
b5cc75
-#ifdef __linux__
b5cc75
-    struct stat st;
b5cc75
-    if (!stat("/etc/debian_version", &st)) { /* debian */
b5cc75
-        defminuid = "1000";
b5cc75
-        defmaxuid = "29999";
b5cc75
-    } else if (!stat("/usr/portage", &st)) { /* gentoo */
b5cc75
-        defminuid = "1000";
b5cc75
-        defmaxuid = "65000";
b5cc75
-    } else if (!stat("/etc/mandrake-release", &st)) { /* mandrake - check before redhat! */
b5cc75
-        defminuid = "500";
b5cc75
-        defmaxuid = "65000";
b5cc75
-    } else if (!stat("/etc/redhat-release", &st)) { /* redhat */
b5cc75
-        defminuid = "100";
b5cc75
-        defmaxuid = "65000";
b5cc75
-    } else /* if (!stat("/etc/SuSE-release", &st)) */ { /* suse */
b5cc75
-        defminuid = "500";
b5cc75
-        defmaxuid = "65000";
b5cc75
-    }
b5cc75
-#else
b5cc75
-    defminuid = "1000";
b5cc75
-    defmaxuid = "65000";
b5cc75
-#endif
b5cc75
+    int minUid, maxUid;
b5cc75
+
b5cc75
+    getDefaultMinMaxUids(&minUid, &maxUid);
b5cc75
+    defminuid = QString::number(minUid);
b5cc75
+    defmaxuid = QString::number(maxUid);
b5cc75
 
b5cc75
     m_userPixDir = config->group("X-*-Greeter").readEntry("FaceDir",
b5cc75
             QString(KStandardDirs::installPath("data") + "kdm/faces" + '/'));
b5cc75
diff -up kde-workspace-4.8.2/kdm/kcm/main.cpp.bz#732830-login kde-workspace-4.8.2/kdm/kcm/main.cpp
b5cc75
--- kde-workspace-4.8.2/kdm/kcm/main.cpp.bz#732830-login	2012-03-30 00:02:31.000000000 +0200
b5cc75
+++ kde-workspace-4.8.2/kdm/kcm/main.cpp	2012-03-30 13:38:35.135493214 +0200
b5cc75
@@ -59,6 +59,7 @@
b5cc75
 #include <pwd.h>
b5cc75
 #include <grp.h>
b5cc75
 
b5cc75
+#include "../kdm-minmaxuid.h"
b5cc75
 
b5cc75
 K_PLUGIN_FACTORY(KDMFactory, registerPlugin<KDModule>();)
b5cc75
 K_EXPORT_PLUGIN(KDMFactory("kdmconfig"))
b5cc75
@@ -393,13 +394,14 @@ void KDModule::propagateUsers()
b5cc75
 {
b5cc75
     groupmap.clear();
b5cc75
     emit clearUsers();
b5cc75
+    int realminuid = interpretMinUid(minshowuid);
b5cc75
     QMap<QString, int> lusers;
b5cc75
     QMap<QString, QPair<int, QStringList> >::const_iterator it;
b5cc75
     QStringList::ConstIterator jt;
b5cc75
     QMap<QString, int>::Iterator gmapi;
b5cc75
     for (it = usermap.constBegin(); it != usermap.constEnd(); ++it) {
b5cc75
         int uid = it.value().first;
b5cc75
-        if (!uid || (uid >= minshowuid && uid <= maxshowuid)) {
b5cc75
+        if (!uid || (uid >= realminuid && uid <= maxshowuid)) {
b5cc75
             lusers[it.key()] = uid;
b5cc75
             for (jt = it.value().second.begin(); jt != it.value().second.end(); ++jt)
b5cc75
                 if ((gmapi = groupmap.find(*jt)) == groupmap.end()) {
b5cc75
@@ -415,6 +417,8 @@ void KDModule::propagateUsers()
b5cc75
 
b5cc75
 void KDModule::slotMinMaxUID(int min, int max)
b5cc75
 {
b5cc75
+    int oldrealmin = interpretMinUid(minshowuid);
b5cc75
+    int newrealmin = interpretMinUid(min);
b5cc75
     if (updateOK) {
b5cc75
         QMap<QString, int> alusers, dlusers;
b5cc75
         QMap<QString, QPair<int, QStringList> >::const_iterator it;
b5cc75
@@ -424,8 +428,8 @@ void KDModule::slotMinMaxUID(int min, in
b5cc75
             int uid = it.value().first;
b5cc75
             if (!uid)
b5cc75
                 continue;
b5cc75
-            if ((uid >= minshowuid && uid <= maxshowuid) &&
b5cc75
-                    !(uid >= min && uid <= max)) {
b5cc75
+            if ((uid >= oldrealmin && uid <= maxshowuid) &&
b5cc75
+                    !(uid >= newrealmin && uid <= max)) {
b5cc75
                 dlusers[it.key()] = uid;
b5cc75
                 for (jt = it.value().second.begin();
b5cc75
                         jt != it.value().second.end(); ++jt) {
b5cc75
@@ -435,8 +439,8 @@ void KDModule::slotMinMaxUID(int min, in
b5cc75
                         dlusers['@' + *jt] = -uid;
b5cc75
                     }
b5cc75
                 }
b5cc75
-            } else if ((uid >= min && uid <= max) &&
b5cc75
-                       !(uid >= minshowuid && uid <= maxshowuid)) {
b5cc75
+            } else if ((uid >= newrealmin && uid <= max) &&
b5cc75
+                       !(uid >= oldrealmin && uid <= maxshowuid)) {
b5cc75
                 alusers[it.key()] = uid;
b5cc75
                 for (jt = it.value().second.begin();
b5cc75
                         jt != it.value().second.end(); ++jt)
b5cc75
diff -up kde-workspace-4.8.2/kdm/kdm-minmaxuid.c.bz#732830-login kde-workspace-4.8.2/kdm/kdm-minmaxuid.c
b5cc75
--- kde-workspace-4.8.2/kdm/kdm-minmaxuid.c.bz#732830-login	2012-03-30 13:38:35.137493189 +0200
b5cc75
+++ kde-workspace-4.8.2/kdm/kdm-minmaxuid.c	2012-03-30 13:38:35.137493189 +0200
b5cc75
@@ -0,0 +1,152 @@
b5cc75
+/*
b5cc75
+ * Utilities for handling the UID range allocated for non-system user
b5cc75
+ */
b5cc75
+
b5cc75
+#include <stdio.h>
b5cc75
+#include <sys/stat.h>
b5cc75
+#ifdef __linux__
b5cc75
+#include <assert.h>
b5cc75
+#include <errno.h>
b5cc75
+#include <inttypes.h>
b5cc75
+#include <regex.h>
b5cc75
+#include <stdlib.h>
b5cc75
+#include <string.h>
b5cc75
+#endif
b5cc75
+
b5cc75
+#include "kdm-minmaxuid.h"
b5cc75
+
b5cc75
+static void internalMinMaxUids(int *minUid, int *maxUid, int staticValues)
b5cc75
+{
b5cc75
+    struct stat st;
b5cc75
+
b5cc75
+#ifdef __linux__
b5cc75
+    if (!stat("/etc/debian_version", &st)) { /* debian */
b5cc75
+        *minUid = 1000;
b5cc75
+        *maxUid = 29999;
b5cc75
+    } else if (!stat("/usr/portage", &st)) { /* gentoo */
b5cc75
+        *minUid = 1000;
b5cc75
+        *maxUid = 65000;
b5cc75
+    } else if (!stat("/etc/mandrake-release", &st)) { /* mandrake - check before redhat! */
b5cc75
+        *minUid = 500;
b5cc75
+        *maxUid = 65000;
b5cc75
+    } else if (!stat("/etc/redhat-release", &st)) { /* redhat */
b5cc75
+	if (!staticValues && !stat("/etc/login.defs", &st))
b5cc75
+	    *minUid = -1;
b5cc75
+	else
b5cc75
+	    *minUid = 100;
b5cc75
+        *maxUid = 65000;
b5cc75
+    } else /* if (!stat("/etc/SuSE-release", &st)) */ { /* suse */
b5cc75
+        *minUid = 500;
b5cc75
+        *maxUid = 65000;
b5cc75
+    }
b5cc75
+#else
b5cc75
+    *minUid = 1000;
b5cc75
+    *maxUid = 65000;
b5cc75
+#endif
b5cc75
+}
b5cc75
+
b5cc75
+void getDefaultMinMaxUids(int *minUid, int *maxUid)
b5cc75
+{
b5cc75
+    internalMinMaxUids(minUid, maxUid, 0);
b5cc75
+}
b5cc75
+
b5cc75
+#ifdef __linux__
b5cc75
+static int getLoginDefsMinUid(void)
b5cc75
+{
b5cc75
+    int res;
b5cc75
+    char *buf;
b5cc75
+    size_t buf_size;
b5cc75
+    ssize_t line_len;
b5cc75
+    regex_t re;
b5cc75
+    FILE *f;
b5cc75
+
b5cc75
+    f = fopen("/etc/login.defs", "r");
b5cc75
+    if (f == NULL)
b5cc75
+	return -1;
b5cc75
+
b5cc75
+    /* No, this is not particularly nice, but "compatible" is more important
b5cc75
+       than "beautiful". */
b5cc75
+    if (regcomp(&re,
b5cc75
+		"^[ \t]*"	/* Initial whitespace */
b5cc75
+		"([^ \t]+)"	/* Variable name */
b5cc75
+		"[ \t][ \t\"]*"	/* Separator - yes, may have multiple "s */
b5cc75
+		"("
b5cc75
+		"([^\"]*)\".*"	/* Value, case 1 - terminated by " */
b5cc75
+		/* Value, case 2 - only drop trailing [[:space:]] */
b5cc75
+		"|([^\"]*[^[:space:]])?[[:space:]]*"
b5cc75
+		")$", REG_EXTENDED) != 0)
b5cc75
+	abort();
b5cc75
+
b5cc75
+    buf = NULL;
b5cc75
+    buf_size = 0;
b5cc75
+    res = -1;
b5cc75
+    while ((line_len = getline(&buf, &buf_size, f)) > 0) {
b5cc75
+	regmatch_t match[5];
b5cc75
+	const char *name, *value;
b5cc75
+
b5cc75
+	if (line_len > 0 && buf[line_len - 1] == '\n')
b5cc75
+	    buf[line_len - 1] = '\0';
b5cc75
+
b5cc75
+	if (regexec(&re, buf, sizeof(match) / sizeof(*match), match, 0) != 0)
b5cc75
+	    continue;
b5cc75
+
b5cc75
+	assert(match[1].rm_so != -1);
b5cc75
+	name = buf + match[1].rm_so;
b5cc75
+	if (*name == '#')
b5cc75
+	    continue;
b5cc75
+	/* The "separator" is at least one character long, so we can safely
b5cc75
+	   overwrite it with '\0'. */
b5cc75
+	buf[match[1].rm_eo] = '\0';
b5cc75
+
b5cc75
+	if (match[3].rm_so != -1) {
b5cc75
+	    value = buf + match[3].rm_so;
b5cc75
+	    buf[match[3].rm_eo] = '\0';
b5cc75
+	} else if (match[4].rm_so != -1) {
b5cc75
+	    value = buf + match[4].rm_so;
b5cc75
+	    buf[match[4].rm_eo] = '\0';
b5cc75
+	} else
b5cc75
+	    value = "";
b5cc75
+
b5cc75
+	/* fprintf(stderr, "\tMatched: %s = %s!\n", name, value); */
b5cc75
+
b5cc75
+	if (strcmp(name, "UID_MIN") == 0) {
b5cc75
+	    intmax_t imax;
b5cc75
+	    char *p;
b5cc75
+
b5cc75
+	    errno = 0;
b5cc75
+	    imax = strtoimax(value, &p, 10);
b5cc75
+	    if (errno == 0 && *p == '\0' && p != value && (uid_t)imax == imax)
b5cc75
+		res = imax;
b5cc75
+	}
b5cc75
+    }
b5cc75
+    free(buf);
b5cc75
+
b5cc75
+    regfree(&re);
b5cc75
+    fclose(f);
b5cc75
+
b5cc75
+    return res;
b5cc75
+}
b5cc75
+#endif
b5cc75
+
b5cc75
+int interpretMinUid(int minUid)
b5cc75
+{
b5cc75
+    int res, dummy;
b5cc75
+
b5cc75
+    if (minUid != -1)
b5cc75
+	return minUid;
b5cc75
+#ifdef __linux__
b5cc75
+    res = getLoginDefsMinUid();
b5cc75
+    if (res != -1)
b5cc75
+	return res;
b5cc75
+#endif
b5cc75
+    internalMinMaxUids(&res, &dummy, 1);
b5cc75
+    return res;
b5cc75
+}
b5cc75
+
b5cc75
+#ifdef TESTING
b5cc75
+int main(void)
b5cc75
+{
b5cc75
+    printf("interpretMinUid returns %d\n", interpretMinUid(-1));
b5cc75
+    return 0;
b5cc75
+}
b5cc75
+#endif
b5cc75
diff -up kde-workspace-4.8.2/kdm/kdm-minmaxuid.h.bz#732830-login kde-workspace-4.8.2/kdm/kdm-minmaxuid.h
b5cc75
--- kde-workspace-4.8.2/kdm/kdm-minmaxuid.h.bz#732830-login	2012-03-30 13:38:35.148493053 +0200
b5cc75
+++ kde-workspace-4.8.2/kdm/kdm-minmaxuid.h	2012-03-30 13:38:35.138493177 +0200
b5cc75
@@ -0,0 +1,25 @@
b5cc75
+/*
b5cc75
+ * Utilities for handling the UID range allocated for non-system user
b5cc75
+ */
b5cc75
+
b5cc75
+#ifndef KDM_MINMAXUID_H
b5cc75
+#define KDM_MINMAXUID_H
b5cc75
+
b5cc75
+#ifdef __cplusplus
b5cc75
+extern "C" {
b5cc75
+#endif
b5cc75
+
b5cc75
+/* Get platform-specific defaults for minShowUID and maxShowUID.
b5cc75
+   Never fails. */
b5cc75
+void getDefaultMinMaxUids(int *minUid, int *maxUid);
b5cc75
+
b5cc75
+/* Return the lower limit of user UIDs, based on supplied minShowUID value
b5cc75
+   (i.e. interpret the value -1). */
b5cc75
+int interpretMinUid(int minUid);
b5cc75
+
b5cc75
+#ifdef __cplusplus
b5cc75
+}
b5cc75
+#endif
b5cc75
+
b5cc75
+
b5cc75
+#endif
b5cc75
diff -up kde-workspace-4.8.2/kdm/kfrontend/CMakeLists.txt.bz#732830-login kde-workspace-4.8.2/kdm/kfrontend/CMakeLists.txt
b5cc75
--- kde-workspace-4.8.2/kdm/kfrontend/CMakeLists.txt.bz#732830-login	2012-03-30 00:02:31.000000000 +0200
b5cc75
+++ kde-workspace-4.8.2/kdm/kfrontend/CMakeLists.txt	2012-03-30 13:38:35.149493040 +0200
b5cc75
@@ -52,6 +52,7 @@ set(kdm_greet_SRCS
b5cc75
 	utils.cpp
b5cc75
 	utils.h
b5cc75
 	${kdmthemer_SRCS}
b5cc75
+	${kdmminmaxuidlib_SRCS}
b5cc75
 )
b5cc75
 
b5cc75
 if (XDMCP)
b5cc75
@@ -93,7 +94,7 @@ kde4_add_executable(krootimage ${krootim
b5cc75
 target_link_libraries(krootimage ${KDE4_KDEUI_LIBS} ${X11_X11_LIB} ${QIMAGEBLITZ_LIBRARIES})
b5cc75
 install(TARGETS krootimage DESTINATION ${LIBEXEC_INSTALL_DIR})
b5cc75
 
b5cc75
-set(genkdmconf_SRCS genkdmconf.c)
b5cc75
+set(genkdmconf_SRCS genkdmconf.c ${kdmminmaxuidlib_SRCS})
b5cc75
 macro_add_file_dependencies(genkdmconf.c ${confci})
b5cc75
 kde4_add_executable(genkdmconf NOGUI ${genkdmconf_SRCS})
b5cc75
 macro_add_compile_flags(genkdmconf -U_REENTRANT)
b5cc75
diff -up kde-workspace-4.8.2/kdm/kfrontend/genkdmconf.c.bz#732830-login kde-workspace-4.8.2/kdm/kfrontend/genkdmconf.c
b5cc75
--- kde-workspace-4.8.2/kdm/kfrontend/genkdmconf.c.bz#732830-login	2012-03-30 00:02:31.000000000 +0200
b5cc75
+++ kde-workspace-4.8.2/kdm/kfrontend/genkdmconf.c	2012-03-30 13:49:49.760059248 +0200
b5cc75
@@ -58,6 +58,8 @@ Foundation, Inc., 51 Franklin Street, Fi
b5cc75
 # endif
b5cc75
 #endif
b5cc75
 
b5cc75
+#include "../kdm-minmaxuid.h"
b5cc75
+
b5cc75
 #define WANT_CONF_GEN
b5cc75
 #include <config.ci>
b5cc75
 
b5cc75
@@ -2008,7 +2010,7 @@ upd_showusers(Entry *ce, Section *cs)
b5cc75
     }
b5cc75
 }
b5cc75
 
b5cc75
-static const char *defminuid, *defmaxuid;
b5cc75
+static char defminuid[64], defmaxuid[64];
b5cc75
 
b5cc75
 static void
b5cc75
 upd_minshowuid(Entry *ce, Section *cs ATTR_UNUSED)
b5cc75
@@ -2034,16 +2036,18 @@ upd_hiddenusers(Entry *ce, Section *cs)
b5cc75
     char *nv;
b5cc75
     const char *msu, *pt, *et;
b5cc75
     struct passwd *pw;
b5cc75
-    unsigned minuid, maxuid;
b5cc75
+    int minuid, maxuid;
b5cc75
     char nbuf[128];
b5cc75
 
b5cc75
     if (!ce->active)
b5cc75
         return;
b5cc75
 
b5cc75
     msu = getFqVal(cs->name, "MinShowUID", "0");
b5cc75
-    sscanf(msu, "%u", &minuid);
b5cc75
+    sscanf(msu, "%d", &minuid);
b5cc75
     msu = getFqVal(cs->name, "MaxShowUID", "65535");
b5cc75
-    sscanf(msu, "%u", &maxuid);
b5cc75
+    sscanf(msu, "%d", &maxuid);
b5cc75
+
b5cc75
+    minuid = interpretMinUid(minuid);
b5cc75
 
b5cc75
     nv = 0;
b5cc75
     pt = ce->value;
b5cc75
@@ -2057,7 +2061,7 @@ upd_hiddenusers(Entry *ce, Section *cs)
b5cc75
         }
b5cc75
         if ((pw = getpwnam(nbuf))) {
b5cc75
             if (!pw->pw_uid ||
b5cc75
-                (pw->pw_uid >= minuid && pw->pw_uid <= maxuid))
b5cc75
+                (pw->pw_uid >= (uid_t)minuid && pw->pw_uid <= (uid_t)maxuid))
b5cc75
             {
b5cc75
                 if (nv)
b5cc75
                     strCat(&nv, ",%s", nbuf);
b5cc75
@@ -3000,7 +3004,7 @@ int main(int argc, char **argv)
b5cc75
     StrList *fp;
b5cc75
     Section *cs;
b5cc75
     Entry *ce, **cep;
b5cc75
-    int i, ap, locals, foreigns;
b5cc75
+    int i, ap, locals, foreigns, minuid, maxuid;
b5cc75
     int no_old_xdm = 0, no_old_kde = 0;
b5cc75
     struct stat st;
b5cc75
 
b5cc75
@@ -3239,27 +3243,9 @@ int main(int argc, char **argv)
b5cc75
             }
b5cc75
         }
b5cc75
     }
b5cc75
-#ifdef __linux__
b5cc75
-    if (!stat("/etc/debian_version", &st)) { /* debian */
b5cc75
-        defminuid = "1000";
b5cc75
-        defmaxuid = "29999";
b5cc75
-    } else if (!stat("/usr/portage", &st)) { /* gentoo */
b5cc75
-        defminuid = "1000";
b5cc75
-        defmaxuid = "65000";
b5cc75
-    } else if (!stat("/etc/mandrake-release", &st)) { /* mandrake - check before redhat! */
b5cc75
-        defminuid = "500";
b5cc75
-        defmaxuid = "65000";
b5cc75
-    } else if (!stat("/etc/redhat-release", &st)) { /* redhat */
b5cc75
-        defminuid = "100";
b5cc75
-        defmaxuid = "65000";
b5cc75
-    } else /* if (!stat("/etc/SuSE-release", &st)) */ { /* suse */
b5cc75
-        defminuid = "500";
b5cc75
-        defmaxuid = "65000";
b5cc75
-    }
b5cc75
-#else
b5cc75
-    defminuid = "1000";
b5cc75
-    defmaxuid = "65000";
b5cc75
-#endif
b5cc75
+    getDefaultMinMaxUids(&minuid, &maxuid);
b5cc75
+    sprintf(defminuid, "%d", minuid);
b5cc75
+    sprintf(defmaxuid, "%d", maxuid);
b5cc75
     for (i = 0; i <= CONF_MAX_PRIO; i++)
b5cc75
         for (cs = config; cs; cs = cs->next)
b5cc75
             for (ce = cs->ents; ce; ce = ce->next)
b5cc75
diff -up kde-workspace-4.8.2/kdm/kfrontend/kgreeter.cpp.bz#732830-login kde-workspace-4.8.2/kdm/kfrontend/kgreeter.cpp
b5cc75
--- kde-workspace-4.8.2/kdm/kfrontend/kgreeter.cpp.bz#732830-login	2012-03-30 00:02:31.000000000 +0200
b5cc75
+++ kde-workspace-4.8.2/kdm/kfrontend/kgreeter.cpp	2012-03-30 13:38:35.163492865 +0200
b5cc75
@@ -66,6 +66,8 @@ Foundation, Inc., 51 Franklin Street, Fi
b5cc75
 #include <X11/Xlib.h>
b5cc75
 #include <fixx11h.h>
b5cc75
 
b5cc75
+#include "../kdm-minmaxuid.h"
b5cc75
+
b5cc75
 class UserListView : public QListWidget {
b5cc75
   public:
b5cc75
     UserListView(QWidget *parent = 0)
b5cc75
@@ -389,12 +391,13 @@ KGreeter::insertUsers()
b5cc75
             default_pix.fill(0);
b5cc75
         }
b5cc75
     }
b5cc75
+    int realLowUserId = interpretMinUid(_lowUserId);
b5cc75
     if (_showUsers == SHOW_ALL) {
b5cc75
         UserList noUsers(_noUsers);
b5cc75
         QSet<QString> dupes;
b5cc75
         for (setpwent(); (ps = getpwent()) != 0;) {
b5cc75
             if (*ps->pw_dir && *ps->pw_shell &&
b5cc75
-                (ps->pw_uid >= (unsigned)_lowUserId ||
b5cc75
+                (ps->pw_uid >= (unsigned)realLowUserId ||
b5cc75
                  (!ps->pw_uid && _showRoot)) &&
b5cc75
                 ps->pw_uid <= (unsigned)_highUserId &&
b5cc75
                 !noUsers.hasUser(ps->pw_name) &&
b5cc75
@@ -413,7 +416,7 @@ KGreeter::insertUsers()
b5cc75
             QSet<QString> dupes;
b5cc75
             for (setpwent(); (ps = getpwent()) != 0;) {
b5cc75
                 if (*ps->pw_dir && *ps->pw_shell &&
b5cc75
-                    (ps->pw_uid >= (unsigned)_lowUserId ||
b5cc75
+                    (ps->pw_uid >= (unsigned)realLowUserId ||
b5cc75
                      (!ps->pw_uid && _showRoot)) &&
b5cc75
                     ps->pw_uid <= (unsigned)_highUserId &&
b5cc75
                     (users.hasUser(ps->pw_name) ||