avoid passing NULL to asprintf(3) when there's no parent dn entry,
this happens when adding a new naming context and then putting the first
rdn in.

Jun 24 23:51:23 x250 ldapd: vfprintf %s NULL in "@%.*s,%.*s"
Jun 25 00:13:14 x250 ldapd: vfprintf %s NULL in "@%.*s,%.*s"

? ldapd.diff
Index: index.c
===================================================================
RCS file: /cvs/src/usr.sbin/ldapd/index.c,v
retrieving revision 1.11
diff -u -p -r1.11 index.c
--- index.c     20 Jan 2017 11:55:08 -0000      1.11
+++ index.c     24 Jun 2018 22:06:04 -0000
@@ -144,9 +144,14 @@ index_rdn_key(struct namespace *ns, stru
                ++parent_dn;
        }
 
-       if (asprintf(&t, "@%.*s,%.*s", pdnsz, parent_dn, rdnsz,
-           (char *)dn->data) == -1)
-               return -1;
+       if (!pdnsz) {
+               if (asprintf(&t, "@,%.*s", rdnsz, (char *)dn->data) == -1)
+                       return -1;
+       } else {
+               if (asprintf(&t, "@%.*s,%.*s", pdnsz, parent_dn, rdnsz,
+                   (char *)dn->data) == -1)
+                       return -1;
+       }
 
        normalize_dn(t);
        key->data = t;

Reply via email to