|
|
ca483c |
Partial backport of the following commit, restricted to the
|
|
|
ca483c |
netgroup changes:
|
|
|
ca483c |
|
|
|
ca483c |
commit c6dfed243e0310bc3294c0fdf1816fceab024e9b
|
|
|
ca483c |
Author: Roland McGrath <roland@hack.frob.com>
|
|
|
ca483c |
Date: Wed Oct 22 13:17:20 2014 -0700
|
|
|
ca483c |
|
|
|
ca483c |
Rework some nscd code not to use variable-length struct types.
|
|
|
ca483c |
|
|
|
ca483c |
diff --git a/inet/netgroup.h b/inet/netgroup.h
|
|
|
ca483c |
index f3797a698d126157..fa1732762e32c2c0 100644
|
|
|
ca483c |
--- a/inet/netgroup.h
|
|
|
ca483c |
+++ b/inet/netgroup.h
|
|
|
ca483c |
@@ -26,7 +26,7 @@
|
|
|
ca483c |
struct name_list
|
|
|
ca483c |
{
|
|
|
ca483c |
struct name_list *next;
|
|
|
ca483c |
- char name[0];
|
|
|
ca483c |
+ char name[];
|
|
|
ca483c |
};
|
|
|
ca483c |
|
|
|
ca483c |
|
|
|
ca483c |
diff --git a/nscd/netgroupcache.c b/nscd/netgroupcache.c
|
|
|
ca483c |
index 7ee0c284ed58d1e3..7d7269a8edf1b99d 100644
|
|
|
ca483c |
--- a/nscd/netgroupcache.c
|
|
|
ca483c |
+++ b/nscd/netgroupcache.c
|
|
|
ca483c |
@@ -21,6 +21,7 @@
|
|
|
ca483c |
#include <errno.h>
|
|
|
ca483c |
#include <libintl.h>
|
|
|
ca483c |
#include <stdbool.h>
|
|
|
ca483c |
+#include <stdlib.h>
|
|
|
ca483c |
#include <unistd.h>
|
|
|
ca483c |
#include <sys/mman.h>
|
|
|
ca483c |
|
|
|
ca483c |
@@ -136,11 +137,8 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req,
|
|
|
ca483c |
char *buffer = NULL;
|
|
|
ca483c |
size_t nentries = 0;
|
|
|
ca483c |
size_t group_len = strlen (key) + 1;
|
|
|
ca483c |
- union
|
|
|
ca483c |
- {
|
|
|
ca483c |
- struct name_list elem;
|
|
|
ca483c |
- char mem[sizeof (struct name_list) + group_len];
|
|
|
ca483c |
- } first_needed;
|
|
|
ca483c |
+ struct name_list *first_needed
|
|
|
ca483c |
+ = alloca (sizeof (struct name_list) + group_len);
|
|
|
ca483c |
|
|
|
ca483c |
if (netgroup_database == NULL
|
|
|
ca483c |
&& __nss_database_lookup ("netgroup", NULL, NULL, &netgroup_database))
|
|
|
ca483c |
@@ -153,9 +151,9 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req,
|
|
|
ca483c |
|
|
|
ca483c |
memset (&data, '\0', sizeof (data));
|
|
|
ca483c |
buffer = xmalloc (buflen);
|
|
|
ca483c |
- first_needed.elem.next = &first_needed.elem;
|
|
|
ca483c |
- memcpy (first_needed.elem.name, key, group_len);
|
|
|
ca483c |
- data.needed_groups = &first_needed.elem;
|
|
|
ca483c |
+ first_needed->next = first_needed;
|
|
|
ca483c |
+ memcpy (first_needed->name, key, group_len);
|
|
|
ca483c |
+ data.needed_groups = first_needed;
|
|
|
ca483c |
|
|
|
ca483c |
while (data.needed_groups != NULL)
|
|
|
ca483c |
{
|