[v2,01/23] support: Update support_format_* NSS formatting routines for null pointers

Message ID 6bf77cf6e09f069826341a381625578b4c2a2392.1774037705.git.fweimer@redhat.com (mailing list archive)
State Failed CI
Headers
Series NSS, nscd updates (for group merging and more) |

Checks

Context Check Description
redhat-pt-bot/TryBot-apply_patch success Patch applied to master at the time it was sent

Commit Message

Florian Weimer March 20, 2026, 8:41 p.m. UTC
  Some tests will need to check for the presence of null pointers.  It
makes sense to support this in the formatting functions.
---
 support/support_format_group.c    |  7 +++++--
 support/support_format_hostent.c  | 31 ++++++++++++++++++++-----------
 support/support_format_netent.c   |  9 +++++++--
 support/support_format_protoent.c | 11 ++++++++---
 support/support_format_rpcent.c   |  8 ++++++--
 support/support_format_servent.c  |  9 +++++++--
 support/support_format_sgrp.c     | 16 ++++++++++++----
 7 files changed, 65 insertions(+), 26 deletions(-)
  

Comments

Carlos O'Donell March 23, 2026, 3:42 p.m. UTC | #1
On 3/20/26 4:41 PM, Florian Weimer wrote:
> Some tests will need to check for the presence of null pointers.  It
> makes sense to support this in the formatting functions.

LGTM.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>

> ---
>   support/support_format_group.c    |  7 +++++--
>   support/support_format_hostent.c  | 31 ++++++++++++++++++++-----------
>   support/support_format_netent.c   |  9 +++++++--
>   support/support_format_protoent.c | 11 ++++++++---
>   support/support_format_rpcent.c   |  8 ++++++--
>   support/support_format_servent.c  |  9 +++++++--
>   support/support_format_sgrp.c     | 16 ++++++++++++----
>   7 files changed, 65 insertions(+), 26 deletions(-)
> 
> diff --git a/support/support_format_group.c b/support/support_format_group.c
> index fb714564cd..a9ad4973c0 100644
> --- a/support/support_format_group.c
> +++ b/support/support_format_group.c
> @@ -35,8 +35,11 @@ support_format_group (const struct group *g)
>     fprintf (mem.out, "name: %s\n", g->gr_name);
>     fprintf (mem.out, "passwd: %s\n", g->gr_passwd);
>     fprintf (mem.out, "gid: %u\n", (unsigned) g->gr_gid);
> -  for (char **mp = g->gr_mem; *mp != NULL; ++mp)
> -    fprintf (mem.out, "member: %s\n", *mp);
> +  if (g->gr_mem != NULL)
> +    for (char **mp = g->gr_mem; *mp != NULL; ++mp)
> +      fprintf (mem.out, "member: %s\n", *mp);
> +  else
> +    fputs ("gr_mem: (null)\n", mem.out);
>   
>     xfclose_memstream (&mem);
>     return mem.buffer;
> diff --git a/support/support_format_hostent.c b/support/support_format_hostent.c
> index f76ec459cd..4b3ef8e1d8 100644
> --- a/support/support_format_hostent.c
> +++ b/support/support_format_hostent.c
> @@ -59,17 +59,26 @@ support_format_hostent (const struct hostent *h)
>     xopen_memstream (&mem);
>   
>     fprintf (mem.out, "name: %s\n", h->h_name);
> -  for (char **alias = h->h_aliases; *alias != NULL; ++alias)
> -    fprintf (mem.out, "alias: %s\n", *alias);
> -  for (unsigned i = 0; h->h_addr_list[i] != NULL; ++i)
> -    {
> -      char buf[128];
> -      if (inet_ntop (h->h_addrtype, h->h_addr_list[i],
> -                     buf, sizeof (buf)) == NULL)
> -        fprintf (mem.out, "error: inet_ntop failed: %m\n");
> -      else
> -        fprintf (mem.out, "address: %s\n", buf);
> -    }
> +
> +  if (h->h_aliases != NULL)
> +    for (char **alias = h->h_aliases; *alias != NULL; ++alias)
> +      fprintf (mem.out, "alias: %s\n", *alias);
> +  else
> +    fputs ("h_aliases: (null)\n", mem.out);
> +
> +  if (h->h_addr_list != NULL)
> +    for (unsigned i = 0; h->h_addr_list[i] != NULL; ++i)
> +      {
> +        char buf[128];
> +        if (inet_ntop (h->h_addrtype, h->h_addr_list[i],
> +                       buf, sizeof (buf)) == NULL)
> +          fprintf (mem.out, "error: inet_ntop failed: %m\n");
> +        else
> +          fprintf (mem.out, "address: %s\n", buf);
> +      }
> +  else
> +    fputs ("h_addr_list: (null)\n", mem.out);
> +
>     if (h->h_length != address_length (h->h_addrtype))
>       {
>         char *family = support_format_address_family (h->h_addrtype);
> diff --git a/support/support_format_netent.c b/support/support_format_netent.c
> index 7f08476dd3..1ff2f93c26 100644
> --- a/support/support_format_netent.c
> +++ b/support/support_format_netent.c
> @@ -41,8 +41,13 @@ support_format_netent (const struct netent *e)
>   
>     if (e->n_name != NULL)
>       fprintf (mem.out, "name: %s\n", e->n_name);
> -  for (char **ap = e->n_aliases; *ap != NULL; ++ap)
> -    fprintf (mem.out, "alias: %s\n", *ap);
> +
> +  if (e->n_aliases != NULL)
> +    for (char **ap = e->n_aliases; *ap != NULL; ++ap)
> +      fprintf (mem.out, "alias: %s\n", *ap);
> +  else
> +    fputs ("n_aliases: (null)\n", mem.out);
> +
>     if (e->n_addrtype != AF_INET)
>       fprintf (mem.out, "addrtype: %d\n", e->n_addrtype);
>     /* On alpha, e->n_net is an unsigned long.  */
> diff --git a/support/support_format_protoent.c b/support/support_format_protoent.c
> index 25c177f5da..187e7ff318 100644
> --- a/support/support_format_protoent.c
> +++ b/support/support_format_protoent.c
> @@ -32,9 +32,14 @@ support_format_protoent (const struct protoent *e)
>     struct xmemstream mem;
>     xopen_memstream (&mem);
>   
> -  fprintf (mem.out, "name: %s\n", e->p_name);
> -  for (char **ap = e->p_aliases; *ap != NULL; ++ap)
> -    fprintf (mem.out, "alias: %s\n", *ap);
> +  fprintf (mem.out, "name: %s\n", e->p_name ?: "(null)");
> +
> +  if (e->p_aliases != NULL)
> +    for (char **ap = e->p_aliases; *ap != NULL; ++ap)
> +      fprintf (mem.out, "alias: %s\n", *ap);
> +  else
> +    fputs ("p_aliases: (null)\n", mem.out);
> +
>     fprintf (mem.out, "proto: %d\n", e->p_proto);
>   
>     xfclose_memstream (&mem);
> diff --git a/support/support_format_rpcent.c b/support/support_format_rpcent.c
> index 1b898f3e27..66ee00f319 100644
> --- a/support/support_format_rpcent.c
> +++ b/support/support_format_rpcent.c
> @@ -34,8 +34,12 @@ support_format_rpcent (const struct rpcent *r)
>   
>     fprintf (mem.out, "name: %s\n", r->r_name);
>     fprintf (mem.out, "number: %d\n", r->r_number);
> -  for (char **ap = r->r_aliases; *ap != NULL; ++ap)
> -    fprintf (mem.out, "alias: %s\n", *ap);
> +
> +  if (r->r_aliases != NULL)
> +    for (char **ap = r->r_aliases; *ap != NULL; ++ap)
> +      fprintf (mem.out, "alias: %s\n", *ap);
> +  else
> +    fputs ("r_aliases: (null)\n", mem.out);
>   
>     xfclose_memstream (&mem);
>     return mem.buffer;
> diff --git a/support/support_format_servent.c b/support/support_format_servent.c
> index fbe8138222..b8823ab485 100644
> --- a/support/support_format_servent.c
> +++ b/support/support_format_servent.c
> @@ -34,8 +34,13 @@ support_format_servent (const struct servent *e)
>     xopen_memstream (&mem);
>   
>     fprintf (mem.out, "name: %s\n", e->s_name);
> -  for (char **ap = e->s_aliases; *ap != NULL; ++ap)
> -    fprintf (mem.out, "alias: %s\n", *ap);
> +
> +  if (e->s_aliases != NULL)
> +    for (char **ap = e->s_aliases; *ap != NULL; ++ap)
> +      fprintf (mem.out, "alias: %s\n", *ap);
> +  else
> +    fputs ("s_aliases: (null)\n", mem.out);
> +
>     fprintf (mem.out, "port: %d\n", ntohs (e->s_port));
>     fprintf (mem.out, "proto: %s\n", e->s_proto);
>   
> diff --git a/support/support_format_sgrp.c b/support/support_format_sgrp.c
> index d9b7d12478..0b4bdd7dfc 100644
> --- a/support/support_format_sgrp.c
> +++ b/support/support_format_sgrp.c
> @@ -34,10 +34,18 @@ support_format_sgrp (const struct sgrp *s)
>   
>     fprintf (mem.out, "name: %s\n", s->sg_namp);
>     fprintf (mem.out, "passwd: %s\n", s->sg_passwd);
> -  for (char **ap = s->sg_adm; *ap != NULL; ++ap)
> -    fprintf (mem.out, "admin: %s\n", *ap);
> -  for (char **mp = s->sg_mem; *mp != NULL; ++mp)
> -    fprintf (mem.out, "member: %s\n", *mp);
> +
> +  if (s->sg_adm != NULL)
> +    for (char **ap = s->sg_adm; *ap != NULL; ++ap)
> +      fprintf (mem.out, "admin: %s\n", *ap);
> +  else
> +    fputs ("sg_adm: (null)\n", mem.out);
> +
> +  if (s->sg_mem != NULL)
> +    for (char **mp = s->sg_mem; *mp != NULL; ++mp)
> +      fprintf (mem.out, "member: %s\n", *mp);
> +  else
> +    fputs ("sg_mem: (null)\n", mem.out);
>   
>     xfclose_memstream (&mem);
>     return mem.buffer;
  

Patch

diff --git a/support/support_format_group.c b/support/support_format_group.c
index fb714564cd..a9ad4973c0 100644
--- a/support/support_format_group.c
+++ b/support/support_format_group.c
@@ -35,8 +35,11 @@  support_format_group (const struct group *g)
   fprintf (mem.out, "name: %s\n", g->gr_name);
   fprintf (mem.out, "passwd: %s\n", g->gr_passwd);
   fprintf (mem.out, "gid: %u\n", (unsigned) g->gr_gid);
-  for (char **mp = g->gr_mem; *mp != NULL; ++mp)
-    fprintf (mem.out, "member: %s\n", *mp);
+  if (g->gr_mem != NULL)
+    for (char **mp = g->gr_mem; *mp != NULL; ++mp)
+      fprintf (mem.out, "member: %s\n", *mp);
+  else
+    fputs ("gr_mem: (null)\n", mem.out);
 
   xfclose_memstream (&mem);
   return mem.buffer;
diff --git a/support/support_format_hostent.c b/support/support_format_hostent.c
index f76ec459cd..4b3ef8e1d8 100644
--- a/support/support_format_hostent.c
+++ b/support/support_format_hostent.c
@@ -59,17 +59,26 @@  support_format_hostent (const struct hostent *h)
   xopen_memstream (&mem);
 
   fprintf (mem.out, "name: %s\n", h->h_name);
-  for (char **alias = h->h_aliases; *alias != NULL; ++alias)
-    fprintf (mem.out, "alias: %s\n", *alias);
-  for (unsigned i = 0; h->h_addr_list[i] != NULL; ++i)
-    {
-      char buf[128];
-      if (inet_ntop (h->h_addrtype, h->h_addr_list[i],
-                     buf, sizeof (buf)) == NULL)
-        fprintf (mem.out, "error: inet_ntop failed: %m\n");
-      else
-        fprintf (mem.out, "address: %s\n", buf);
-    }
+
+  if (h->h_aliases != NULL)
+    for (char **alias = h->h_aliases; *alias != NULL; ++alias)
+      fprintf (mem.out, "alias: %s\n", *alias);
+  else
+    fputs ("h_aliases: (null)\n", mem.out);
+
+  if (h->h_addr_list != NULL)
+    for (unsigned i = 0; h->h_addr_list[i] != NULL; ++i)
+      {
+        char buf[128];
+        if (inet_ntop (h->h_addrtype, h->h_addr_list[i],
+                       buf, sizeof (buf)) == NULL)
+          fprintf (mem.out, "error: inet_ntop failed: %m\n");
+        else
+          fprintf (mem.out, "address: %s\n", buf);
+      }
+  else
+    fputs ("h_addr_list: (null)\n", mem.out);
+
   if (h->h_length != address_length (h->h_addrtype))
     {
       char *family = support_format_address_family (h->h_addrtype);
diff --git a/support/support_format_netent.c b/support/support_format_netent.c
index 7f08476dd3..1ff2f93c26 100644
--- a/support/support_format_netent.c
+++ b/support/support_format_netent.c
@@ -41,8 +41,13 @@  support_format_netent (const struct netent *e)
 
   if (e->n_name != NULL)
     fprintf (mem.out, "name: %s\n", e->n_name);
-  for (char **ap = e->n_aliases; *ap != NULL; ++ap)
-    fprintf (mem.out, "alias: %s\n", *ap);
+
+  if (e->n_aliases != NULL)
+    for (char **ap = e->n_aliases; *ap != NULL; ++ap)
+      fprintf (mem.out, "alias: %s\n", *ap);
+  else
+    fputs ("n_aliases: (null)\n", mem.out);
+
   if (e->n_addrtype != AF_INET)
     fprintf (mem.out, "addrtype: %d\n", e->n_addrtype);
   /* On alpha, e->n_net is an unsigned long.  */
diff --git a/support/support_format_protoent.c b/support/support_format_protoent.c
index 25c177f5da..187e7ff318 100644
--- a/support/support_format_protoent.c
+++ b/support/support_format_protoent.c
@@ -32,9 +32,14 @@  support_format_protoent (const struct protoent *e)
   struct xmemstream mem;
   xopen_memstream (&mem);
 
-  fprintf (mem.out, "name: %s\n", e->p_name);
-  for (char **ap = e->p_aliases; *ap != NULL; ++ap)
-    fprintf (mem.out, "alias: %s\n", *ap);
+  fprintf (mem.out, "name: %s\n", e->p_name ?: "(null)");
+
+  if (e->p_aliases != NULL)
+    for (char **ap = e->p_aliases; *ap != NULL; ++ap)
+      fprintf (mem.out, "alias: %s\n", *ap);
+  else
+    fputs ("p_aliases: (null)\n", mem.out);
+
   fprintf (mem.out, "proto: %d\n", e->p_proto);
 
   xfclose_memstream (&mem);
diff --git a/support/support_format_rpcent.c b/support/support_format_rpcent.c
index 1b898f3e27..66ee00f319 100644
--- a/support/support_format_rpcent.c
+++ b/support/support_format_rpcent.c
@@ -34,8 +34,12 @@  support_format_rpcent (const struct rpcent *r)
 
   fprintf (mem.out, "name: %s\n", r->r_name);
   fprintf (mem.out, "number: %d\n", r->r_number);
-  for (char **ap = r->r_aliases; *ap != NULL; ++ap)
-    fprintf (mem.out, "alias: %s\n", *ap);
+
+  if (r->r_aliases != NULL)
+    for (char **ap = r->r_aliases; *ap != NULL; ++ap)
+      fprintf (mem.out, "alias: %s\n", *ap);
+  else
+    fputs ("r_aliases: (null)\n", mem.out);
 
   xfclose_memstream (&mem);
   return mem.buffer;
diff --git a/support/support_format_servent.c b/support/support_format_servent.c
index fbe8138222..b8823ab485 100644
--- a/support/support_format_servent.c
+++ b/support/support_format_servent.c
@@ -34,8 +34,13 @@  support_format_servent (const struct servent *e)
   xopen_memstream (&mem);
 
   fprintf (mem.out, "name: %s\n", e->s_name);
-  for (char **ap = e->s_aliases; *ap != NULL; ++ap)
-    fprintf (mem.out, "alias: %s\n", *ap);
+
+  if (e->s_aliases != NULL)
+    for (char **ap = e->s_aliases; *ap != NULL; ++ap)
+      fprintf (mem.out, "alias: %s\n", *ap);
+  else
+    fputs ("s_aliases: (null)\n", mem.out);
+
   fprintf (mem.out, "port: %d\n", ntohs (e->s_port));
   fprintf (mem.out, "proto: %s\n", e->s_proto);
 
diff --git a/support/support_format_sgrp.c b/support/support_format_sgrp.c
index d9b7d12478..0b4bdd7dfc 100644
--- a/support/support_format_sgrp.c
+++ b/support/support_format_sgrp.c
@@ -34,10 +34,18 @@  support_format_sgrp (const struct sgrp *s)
 
   fprintf (mem.out, "name: %s\n", s->sg_namp);
   fprintf (mem.out, "passwd: %s\n", s->sg_passwd);
-  for (char **ap = s->sg_adm; *ap != NULL; ++ap)
-    fprintf (mem.out, "admin: %s\n", *ap);
-  for (char **mp = s->sg_mem; *mp != NULL; ++mp)
-    fprintf (mem.out, "member: %s\n", *mp);
+
+  if (s->sg_adm != NULL)
+    for (char **ap = s->sg_adm; *ap != NULL; ++ap)
+      fprintf (mem.out, "admin: %s\n", *ap);
+  else
+    fputs ("sg_adm: (null)\n", mem.out);
+
+  if (s->sg_mem != NULL)
+    for (char **mp = s->sg_mem; *mp != NULL; ++mp)
+      fprintf (mem.out, "member: %s\n", *mp);
+  else
+    fputs ("sg_mem: (null)\n", mem.out);
 
   xfclose_memstream (&mem);
   return mem.buffer;