Fix bug #8953 - winbind can hang as nbt_getdc() has no timeout.
[ddiss/samba.git] / source3 / libsmb / clidgram.c
index 92f381e87b4f1215c392b9ee0ddd0d221115a432..c7ff6ca30b61ca4fddd4eb53f9597bef7a29e3a5 100644 (file)
@@ -20,6 +20,8 @@
 */
 
 #include "includes.h"
+#include "libsmb/libsmb.h"
+#include "../lib/util/tevent_ntstatus.h"
 #include "libsmb/clidgram.h"
 #include "libsmb/nmblib.h"
 #include "messages.h"
@@ -434,6 +436,7 @@ NTSTATUS nbt_getdc_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx,
 }
 
 NTSTATUS nbt_getdc(struct messaging_context *msg_ctx,
+                  uint32_t timeout_in_seconds,
                   const struct sockaddr_storage *dc_addr,
                   const char *domain_name,
                   const struct dom_sid *sid,
@@ -457,6 +460,10 @@ NTSTATUS nbt_getdc(struct messaging_context *msg_ctx,
        if (req == NULL) {
                goto fail;
        }
+       if (!tevent_req_set_endtime(req, ev,
+                       timeval_current_ofs(timeout_in_seconds, 0))) {
+               goto fail;
+       }
        if (!tevent_req_poll_ntstatus(req, ev, &status)) {
                goto fail;
        }