Update to 0.8.12, part 3
Forward-port our local patch to catch out-of-range UID and GID values when we read them.
This commit is contained in:
parent
782d1c4236
commit
93520225bb
@ -1,22 +1,25 @@
|
|||||||
diff -up nss-pam-ldapd-0.7.17/nslcd/common.c.overflow nss-pam-ldapd-0.7.17/nslcd/common.c
|
Always use a function that we know will catch out-of-range values for UIDs and
|
||||||
--- nss-pam-ldapd-0.7.17/nslcd/common.c.overflow 2012-09-09 19:51:44.254856507 +0200
|
GIDs, which are currently unsigned 32-bit numbers everywhere, and which won't
|
||||||
+++ nss-pam-ldapd-0.7.17/nslcd/common.c 2012-09-09 19:52:32.602252083 +0200
|
produce a result that'll silently be truncated if we store the result in a
|
||||||
@@ -148,19 +148,25 @@ int read_address(TFILE *fp,char *addr,in
|
uid_t or gid_t.
|
||||||
return 0;
|
--- nss-pam-ldapd/nslcd/common.c
|
||||||
|
+++ nss-pam-ldapd/nslcd/common.c
|
||||||
|
@@ -273,19 +273,23 @@ long int binsid2id(const char *binsid)
|
||||||
|
((((long int)binsid[i+2])&0xff)<<16)|((((long int)binsid[i+3])&0xff)<<24);
|
||||||
}
|
}
|
||||||
|
|
||||||
-#ifdef WANT_STRTOUI
|
-#ifdef WANT_STRTOUI
|
||||||
+
|
-/* provide a strtoui() implementation, similar to strtoul() but returning
|
||||||
/* provide a strtoui() implementation, similar to strtoul() but returning
|
+/* provide a strtoid() implementation, similar to strtoul() but returning
|
||||||
an range-checked unsigned int instead */
|
an range-checked unsigned int instead */
|
||||||
-unsigned int strtoui(const char *nptr,char **endptr,int base)
|
-unsigned int strtoui(const char *nptr,char **endptr,int base)
|
||||||
+uint32_t strtoid(const char *nptr,char **endptr,int base)
|
+unsigned int strtoid(const char *nptr,char **endptr,int base)
|
||||||
{
|
{
|
||||||
- unsigned long val;
|
- unsigned long val;
|
||||||
- val=strtoul(nptr,endptr,base);
|
- val=strtoul(nptr,endptr,base);
|
||||||
- if (val>UINT_MAX)
|
- if (val>UINT_MAX)
|
||||||
+ long long val;
|
+ long long val;
|
||||||
+
|
+ /* use the fact that long long is 64-bit, even on 32-bit systems */
|
||||||
+ val=strtoll(nptr,endptr,base);
|
+ val=strtoll(nptr,endptr,base);
|
||||||
+ if (val>UINT32_MAX)
|
+ if (val>UINT32_MAX)
|
||||||
{
|
{
|
||||||
@ -24,24 +27,22 @@ diff -up nss-pam-ldapd-0.7.17/nslcd/common.c.overflow nss-pam-ldapd-0.7.17/nslcd
|
|||||||
- return UINT_MAX;
|
- return UINT_MAX;
|
||||||
+ return UINT32_MAX;
|
+ return UINT32_MAX;
|
||||||
}
|
}
|
||||||
- /* If errno was set by strtoull, we'll pass it back as-is */
|
- /* If errno was set by strtoul, we'll pass it back as-is */
|
||||||
- return (unsigned int)val;
|
- return (unsigned int)val;
|
||||||
+ else if (val<0)
|
+ else if (val < 0)
|
||||||
+ {
|
+ {
|
||||||
+ errno=EINVAL;
|
+ errno=EINVAL;
|
||||||
+ return UINT32_MAX;
|
+ return UINT32_MAX;
|
||||||
+ }
|
+ }
|
||||||
+
|
|
||||||
+ /* If errno was set, we'll pass it back as-is */
|
+ /* If errno was set, we'll pass it back as-is */
|
||||||
+ return (uint32_t) val;
|
+ return (uint32_t)val;
|
||||||
}
|
}
|
||||||
-#endif /* WANT_STRTOUI */
|
-#endif /* WANT_STRTOUI */
|
||||||
diff -up nss-pam-ldapd-0.7.17/nslcd/common.h.overflow nss-pam-ldapd-0.7.17/nslcd/common.h
|
--- nss-pam-ldapd/nslcd/common.h
|
||||||
--- nss-pam-ldapd-0.7.17/nslcd/common.h.overflow 2012-09-09 19:51:49.826786849 +0200
|
+++ nss-pam-ldapd/nslcd/common.h
|
||||||
+++ nss-pam-ldapd-0.7.17/nslcd/common.h 2012-09-09 19:52:53.669988699 +0200
|
@@ -139,31 +139,9 @@ int nsswitch_db_uses_ldap(const char *fi
|
||||||
@@ -98,31 +98,9 @@ MYLDAP_ENTRY *uid2entry(MYLDAP_SESSION *
|
#endif /* _POSIX_HOST_NAME_MAX */
|
||||||
/* transforms the uid into a DN by doing an LDAP lookup */
|
#endif /* not HOST_NAME_MAX */
|
||||||
MUST_USE char *uid2dn(MYLDAP_SESSION *session,const char *uid,char *buf,size_t buflen);
|
|
||||||
|
|
||||||
-/* provide strtouid() function alias */
|
-/* provide strtouid() function alias */
|
||||||
-#if SIZEOF_UID_T == SIZEOF_UNSIGNED_LONG_INT
|
-#if SIZEOF_UID_T == SIZEOF_UNSIGNED_LONG_INT
|
||||||
@ -70,7 +71,7 @@ diff -up nss-pam-ldapd-0.7.17/nslcd/common.h.overflow nss-pam-ldapd-0.7.17/nslcd
|
|||||||
-#endif
|
-#endif
|
||||||
+uint32_t strtoid(const char *nptr,char **endptr,int base);
|
+uint32_t strtoid(const char *nptr,char **endptr,int base);
|
||||||
+#define strtouid (uid_t)strtoid
|
+#define strtouid (uid_t)strtoid
|
||||||
+#define strtogid (uid_t)strtoid
|
+#define strtogid (gid_t)strtoid
|
||||||
|
|
||||||
#ifdef WANT_STRTOUI
|
#ifdef WANT_STRTOUI
|
||||||
/* provide a strtoui() if it is needed */
|
/* provide a strtoui() if it is needed */
|
@ -25,7 +25,7 @@ Source2: nslcd.init
|
|||||||
Source3: nslcd.tmpfiles
|
Source3: nslcd.tmpfiles
|
||||||
Source4: nslcd.service
|
Source4: nslcd.service
|
||||||
Patch1: nss-pam-ldapd-0.8.12-validname.patch
|
Patch1: nss-pam-ldapd-0.8.12-validname.patch
|
||||||
Patch3: nss-pam-ldapd-0.7.x-uid-overflow.patch
|
Patch3: nss-pam-ldapd-0.8.12-uid-overflow.patch
|
||||||
Patch4: nss-pam-ldapd-0.7.x-epipe.patch
|
Patch4: nss-pam-ldapd-0.7.x-epipe.patch
|
||||||
Patch5: nss-pam-ldapd-0.7.16-skipall.patch
|
Patch5: nss-pam-ldapd-0.7.16-skipall.patch
|
||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||||
|
Loading…
Reference in New Issue
Block a user