Building samba-4.24.0rc2 with glibc-2.43 and gcc-15/16 results in the following warnings. Since glibc-2.43 and ISO C23, the functions bsearch, memchr, strchr, strpbrk, strrchr, strstr, wcschr, wcspbrk, wcsrchr, wcsstr and wmemchr that return pointers into their input arrays now have definitions as macros that return a pointer to a const-qualified type when the input argument is a pointer to a const-qualified type. https://lists.gnu.org/archive/html/info-gnu/2026-01/msg00005.html ../../third_party/heimdal/lib/base/db.c:359:7: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../third_party/heimdal/lib/base/db.c:1329:21: warning: initialization discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../third_party/heimdal/lib/base/bsearch.c:819:7: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../lib/util/charset/util_str.c:370:24: warning: return discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../lib/util/charset/util_str.c:420:24: warning: return discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../lib/util/smb_strtox.c:83:24: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../lib/util/smb_strtox.c:159:24: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../lib/util/base64.c:51:24: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../third_party/heimdal/lib/base/expand_path.c:642:19: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../third_party/heimdal/lib/base/db.c:359:7: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../third_party/heimdal/lib/base/db.c:1329:21: warning: initialization discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../third_party/heimdal/lib/base/bsearch.c:819:7: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../third_party/heimdal/lib/asn1/oid_resolution.c:186:18: warning: initialization discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../third_party/heimdal/lib/asn1/oid_resolution.c:194:15: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../third_party/heimdal/lib/wind/normalize.c:141:23: warning: initialization discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../third_party/heimdal/lib/wind/combining.c:53:15: warning: initialization discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../third_party/heimdal/lib/wind/bidi.c:55:15: warning: initialization discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../third_party/heimdal/lib/wind/bidi.c:65:15: warning: initialization discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../third_party/heimdal/lib/hx509/name.c:931:15: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../third_party/heimdal/lib/krb5/addr_families.c:478:7: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../lib/ldb/common/ldb_ldif.c:117:24: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../lib/ldb/common/ldb_modules.c:202:15: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../source4/dsdb/common/util.c:5867:11: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../source4/dsdb/common/util.c:5886:11: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../auth/credentials/credentials.c:397:27: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../auth/credentials/credentials.c:487:35: warning: initialization discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../auth/credentials/credentials.c:500:27: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../lib/util/smb_strtox.c:83:24: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../lib/util/smb_strtox.c:159:24: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../nsswitch/libwbclient/wbc_sid.c:720:27: warning: initialization discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../nsswitch/libwbclient/wbc_sid.c:851:27: warning: initialization discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../nsswitch/libwbclient/wbc_sid.c:933:19: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../nsswitch/libwbclient/wbc_sid.c:1017:19: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../source4/dsdb/samdb/cracknames.c:1196:11: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../source4/dsdb/samdb/cracknames.c:1576:11: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../lib/addns/dnsquery_srv.c:348:27: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../source3/lib/wins_srv.c:185:19: warning: initialization discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../source3/param/util.c:30:11: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../source3/param/util.c:45:11: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../librpc/rpc/binding.c:398:19: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../source3/libsmb/cliconnect.c:2535:27: warning: initialization discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../libcli/auth/netlogon_creds_cli.c:172:11: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../lib/cmdline/cmdline.c:241:16: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../lib/cmdline/cmdline.c:245:30: warning: initialization discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../source3/smbd/mangle_hash.c:818:23: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../source3/smbd/msdfs.c:136:11: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../source3/smbd/mangle_hash2.c:461:15: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../source3/smbd/mangle_hash2.c:705:15: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../source3/smbd/smb1_lanman.c:733:16: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../source3/smbd/filename.c:423:20: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../source3/libsmb/libsmb_path.c:270:16: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../source3/printing/nt_printing_migrate.c:317:27: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../source3/printing/nt_printing.c:1168:30: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../source3/printing/nt_printing.c:1168:30: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../source3/printing/nt_printing.c:1168:30: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../source3/printing/nt_printing.c:1168:30: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../source3/printing/nt_printing.c:1168:30: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../source3/rpc_server/rpc_host.c:317:14: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../source3/modules/vfs_fruit.c:5341:11: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../source3/rpc_server/spoolss/srv_spoolss_nt.c:10167:20: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../third_party/heimdal/lib/base/db.c:359:7: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../third_party/heimdal/lib/base/db.c:1329:21: warning: initialization discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../third_party/heimdal/lib/base/bsearch.c:819:7: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../third_party/heimdal/lib/base/expand_path.c:642:19: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] ../../third_party/heimdal/lib/krb5/addr_families.c:478:7: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
Looking at a small sample of these, it looks like we can just add const to some declarations. We are typically checking substrings of a const string, which in practice we still treat as const ("needle" here): char *needle = NULL; //... if ((flags & SMB_STR_ALLOW_NEGATIVE ) == 0) { /* did we convert a negative "number" ? */ needle = strchr(nptr, '-'); if (needle != NULL && needle < tmp_endptr) { *err = EINVAL; goto out; } Having said that, I am not entirely sure the build should be allowing the compiler and libc to assume C23, but also I am also sort of glad it does. Rudi, are you thinking of providing patches?
Hi Douglas, I have been doing patches for the other packages. Happy to do for samba too, probably just want a little guidance on how many patches we want / how they are broken up, before I create the commits and PR.
I think perhaps we want one patch for all the simple ones -- those that will look like this: - char *needle = NULL; + const char *needle = NULL; excluding all of /third_party/, which we need to fix upstream (or ignore). Then we'd want separate patches for the ones that do something more tricky, perhaps because they reveal a real bug. Also read https://www.samba.org/samba/devel/copyright-policy.html and https://wiki.samba.org/index.php/Contribute and also... thanks!
Hi Douglas - patches written and PRed: https://gitlab.com/samba-team/samba/-/merge_requests/4428 Remaining warnings (not third_party/heimdal) are as below: cache_mangled_name will need to be refactored - not to modify the const ../../source3/smbd/mangle_hash.c: In function 'cache_mangled_name': ../../source3/smbd/mangle_hash.c:818:23: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] _spoolss_SetPrinterDataEx will need be refactored is oid_string does indeed need to modify r->in.value_name ../../source3/rpc_server/spoolss/srv_spoolss_nt.c: In function '_spoolss_SetPrinterDataEx': ../../source3/rpc_server/spoolss/srv_spoolss_nt.c:10167:20: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] 10167 | oid_string = strchr(r->in.value_name, ','); | ^ printing_tdb_migrate_printer will need to be refactored as valuename is modifing the passed in const r.printer_data[j].name ../../source3/printing/nt_printing_migrate.c: In function 'printing_tdb_migrate_printer': ../../source3/printing/nt_printing_migrate.c:317:27: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] 317 | valuename = strchr(keyname, '\\'); | ^