]> git.ipfire.org Git - ipfire-2.x.git/blob - src/patches/glibc/glibc-rh629823-2.patch
dhcpcd: fix delay after dhcp down.
[ipfire-2.x.git] / src / patches / glibc / glibc-rh629823-2.patch
1 commit 50fd745b4dec07e8e213cf2703b5cabcfa128225
2 Author: Andreas Schwab <schwab@suse.de>
3 Date: Mon Jun 10 14:39:09 2013 +0200
4
5 Fix handling of netgroup cache in nscd
6
7 diff --git a/nscd/connections.c b/nscd/connections.c
8 index 7099215..69e3e7d 100644
9 --- a/nscd/connections.c
10 +++ b/nscd/connections.c
11 @@ -1779,7 +1779,7 @@ nscd_run_worker (void *p)
12 else
13 {
14 /* Get the key. */
15 - char keybuf[MAXKEYLEN];
16 + char keybuf[MAXKEYLEN + 1];
17
18 if (__builtin_expect (TEMP_FAILURE_RETRY (read (fd, keybuf,
19 req.key_len))
20 @@ -1791,6 +1791,7 @@ nscd_run_worker (void *p)
21 strerror_r (errno, buf, sizeof (buf)));
22 goto close_and_out;
23 }
24 + keybuf[req.key_len] = '\0';
25
26 if (__builtin_expect (debug_level, 0) > 0)
27 {
28 diff --git a/nscd/netgroupcache.c b/nscd/netgroupcache.c
29 index 2d6c5aa..dd06ce4 100644
30 --- a/nscd/netgroupcache.c
31 +++ b/nscd/netgroupcache.c
32 @@ -192,18 +192,26 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req,
33 const char *nuser = data.val.triple.user;
34 const char *ndomain = data.val.triple.domain;
35
36 - if (data.val.triple.host > data.val.triple.user
37 - || data.val.triple.user > data.val.triple.domain)
38 + if (nhost == NULL || nuser == NULL || ndomain == NULL
39 + || nhost > nuser || nuser > ndomain)
40 {
41 - const char *last = MAX (nhost,
42 - MAX (nuser, ndomain));
43 - size_t bufused = (last + strlen (last) + 1
44 - - buffer);
45 + const char *last = nhost;
46 + if (last == NULL
47 + || (nuser != NULL && nuser > last))
48 + last = nuser;
49 + if (last == NULL
50 + || (ndomain != NULL && ndomain > last))
51 + last = ndomain;
52 +
53 + size_t bufused
54 + = (last == NULL
55 + ? buffilled
56 + : last + strlen (last) + 1 - buffer);
57
58 /* We have to make temporary copies. */
59 - size_t hostlen = strlen (nhost) + 1;
60 - size_t userlen = strlen (nuser) + 1;
61 - size_t domainlen = strlen (ndomain) + 1;
62 + size_t hostlen = strlen (nhost ?: "") + 1;
63 + size_t userlen = strlen (nuser ?: "") + 1;
64 + size_t domainlen = strlen (ndomain ?: "") + 1;
65 size_t needed = hostlen + userlen + domainlen;
66
67 if (buflen - req->key_len - bufused < needed)
68 @@ -226,11 +234,11 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req,
69 }
70
71 nhost = memcpy (buffer + bufused,
72 - nhost, hostlen);
73 + nhost ?: "", hostlen);
74 nuser = memcpy ((char *) nhost + hostlen,
75 - nuser, userlen);
76 + nuser ?: "", userlen);
77 ndomain = memcpy ((char *) nuser + userlen,
78 - ndomain, domainlen);
79 + ndomain ?: "", domainlen);
80 }
81
82 char *wp = buffer + buffilled;
83 diff --git a/nscd/nscd_netgroup.c b/nscd/nscd_netgroup.c
84 index cac4ebf..acb2c81 100644
85 --- a/nscd/nscd_netgroup.c
86 +++ b/nscd/nscd_netgroup.c
87 @@ -48,7 +48,7 @@ __nscd_setnetgrent (const char *group, struct __netgrent *datap)
88 {
89 int gc_cycle;
90 int nretries = 0;
91 - size_t group_len = strlen (group);
92 + size_t group_len = strlen (group) + 1;
93
94 /* If the mapping is available, try to search there instead of
95 communicating with the nscd. */