union rap_share_info, r->out.available);
for (i = 0, j = 0; i < r->out.available; i++) {
+ size_t sname_len;
+
if (!NT_STATUS_IS_OK(share_get_config(mem_ctx, sctx, snames[i], &scfg))) {
DEBUG(3, ("WARNING: Service [%s] disappeared after enumeration!\n", snames[i]));
continue;
}
- strncpy((char *)r->out.info[j].info1.share_name,
+ /* Make sure we have NUL-termination */
+ sname_len = MIN(strlen(snames[i]),
+ sizeof(r->out.info[j].info1.share_name));
+ strlcpy((char *)r->out.info[j].info1.share_name,
snames[i],
- sizeof(r->out.info[0].info1.share_name));
+ sname_len);
r->out.info[i].info1.reserved1 = 0;
r->out.info[i].info1.share_type = dcesrv_common_get_share_type(mem_ctx, NULL, scfg);
r->out.info[i].info1.comment = share_string_option(mem_ctx, scfg, SHARE_COMMENT, "");