+2013-06-11 Andreas Schwab <schwab@suse.de>
+
+ [BZ #15577]
+ * nscd/connections.c (nscd_run_worker): Always zero-terminate key.
+ * nscd/netgroupcache.c (addgetnetgrentX): Properly handle absent
+ values in the triple.
+ * nscd/nscd_netgroup.c (__nscd_setnetgrent): Include zero
+ terminator in the group key.
+
2013-06-11 Andreas Jaeger <aj@suse.de>
* po/zh_TW.po: Update Chinese (traditional) translation from
15336, 15337, 15339, 15342, 15346, 15359, 15361, 15366, 15380, 15381,
15394, 15395, 15405, 15406, 15409, 15416, 15418, 15419, 15423, 15424,
15426, 15429, 15441, 15442, 15448, 15465, 15480, 15485, 15488, 15490,
- 15493, 15497, 15506, 15529, 15536, 15553, 15583.
+ 15493, 15497, 15506, 15529, 15536, 15553, 15577, 15583.
* CVE-2013-0242 Buffer overrun in regexp matcher has been fixed (Bugzilla
#15078).
else
{
/* Get the key. */
- char keybuf[MAXKEYLEN];
+ char keybuf[MAXKEYLEN + 1];
if (__builtin_expect (TEMP_FAILURE_RETRY (read (fd, keybuf,
req.key_len))
strerror_r (errno, buf, sizeof (buf)));
goto close_and_out;
}
+ keybuf[req.key_len] = '\0';
if (__builtin_expect (debug_level, 0) > 0)
{
const char *nuser = data.val.triple.user;
const char *ndomain = data.val.triple.domain;
- if (data.val.triple.host > data.val.triple.user
- || data.val.triple.user > data.val.triple.domain)
+ if (nhost == NULL || nuser == NULL || ndomain == NULL
+ || nhost > nuser || nuser > ndomain)
{
- const char *last = MAX (nhost,
- MAX (nuser, ndomain));
- size_t bufused = (last + strlen (last) + 1
- - buffer);
+ const char *last = nhost;
+ if (last == NULL
+ || (nuser != NULL && nuser > last))
+ last = nuser;
+ if (last == NULL
+ || (ndomain != NULL && ndomain > last))
+ last = ndomain;
+
+ size_t bufused
+ = (last == NULL
+ ? buffilled
+ : last + strlen (last) + 1 - buffer);
/* We have to make temporary copies. */
- size_t hostlen = strlen (nhost) + 1;
- size_t userlen = strlen (nuser) + 1;
- size_t domainlen = strlen (ndomain) + 1;
+ size_t hostlen = strlen (nhost ?: "") + 1;
+ size_t userlen = strlen (nuser ?: "") + 1;
+ size_t domainlen = strlen (ndomain ?: "") + 1;
size_t needed = hostlen + userlen + domainlen;
if (buflen - req->key_len - bufused < needed)
}
nhost = memcpy (buffer + bufused,
- nhost, hostlen);
+ nhost ?: "", hostlen);
nuser = memcpy ((char *) nhost + hostlen,
- nuser, userlen);
+ nuser ?: "", userlen);
ndomain = memcpy ((char *) nuser + userlen,
- ndomain, domainlen);
+ ndomain ?: "", domainlen);
}
char *wp = buffer + buffilled;
{
int gc_cycle;
int nretries = 0;
- size_t group_len = strlen (group);
+ size_t group_len = strlen (group) + 1;
/* If the mapping is available, try to search there instead of
communicating with the nscd. */