From: Andreas Schneider Date: Tue, 3 Aug 2021 09:04:37 +0000 (+0200) Subject: s3:winbindd: Add a check for the path length of 'winbindd socket directory' X-Git-Tag: ldb-2.5.0~1029 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=aab5cc95e224fef0efafeb1c37a4eb414aee65a0;p=thirdparty%2Fsamba.git s3:winbindd: Add a check for the path length of 'winbindd socket directory' BUG: https://bugzilla.samba.org/show_bug.cgi?id=14779 Signed-off-by: Andreas Schneider Reviewed-by: Andrew Bartlett --- diff --git a/source3/winbindd/winbindd.c b/source3/winbindd/winbindd.c index 4f367d07ecb..89e62b43ca0 100644 --- a/source3/winbindd/winbindd.c +++ b/source3/winbindd/winbindd.c @@ -1658,6 +1658,7 @@ int main(int argc, const char **argv) bool ok; const struct dcesrv_endpoint_server *ep_server = NULL; struct dcesrv_context *dce_ctx = NULL; + size_t winbindd_socket_dir_len = 0; setproctitle_init(argc, discard_const(argv), environ); @@ -1810,6 +1811,30 @@ int main(int argc, const char **argv) } } + winbindd_socket_dir_len = strlen(lp_winbindd_socket_directory()); + if (winbindd_socket_dir_len > 0) { + size_t winbindd_socket_len = + winbindd_socket_dir_len + 1 + + strlen(WINBINDD_SOCKET_NAME); + struct sockaddr_un un = { + .sun_family = AF_UNIX, + }; + size_t sun_path_len = sizeof(un.sun_path); + + if (winbindd_socket_len >= sun_path_len) { + DBG_ERR("The winbind socket path [%s/%s] is too long " + "(%zu >= %zu)\n", + lp_winbindd_socket_directory(), + WINBINDD_SOCKET_NAME, + winbindd_socket_dir_len, + sun_path_len); + exit(1); + } + } else { + DBG_ERR("'winbindd_socket_directory' parameter is empty\n"); + exit(1); + } + if (!cluster_probe_ok()) { exit(1); }