From 4f7666f97120a01e5bbbf335cf3effbddd2b5cd2 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Mon, 23 Apr 2012 17:27:02 +1000 Subject: s4-libnet Always return after composite_error() This can and does cause crashes as multiple conflicting sets of callbacks run on memory that may have been destroyed. Andrew Bartlett --- source4/libnet/groupinfo.c | 1 + source4/libnet/libnet_domain.c | 1 + source4/libnet/userinfo.c | 1 + 3 files changed, 3 insertions(+) (limited to 'source4/libnet') diff --git a/source4/libnet/groupinfo.c b/source4/libnet/groupinfo.c index 932ab0ca9a..0bc0d9f4b8 100644 --- a/source4/libnet/groupinfo.c +++ b/source4/libnet/groupinfo.c @@ -93,6 +93,7 @@ static void continue_groupinfo_lookup(struct tevent_req *subreq) - we're looking for only one at the moment */ if (s->lookup.out.rids->count == 0) { composite_error(c, NT_STATUS_NO_SUCH_USER); + return; } /* TODO: find proper status code for more than one rid found */ diff --git a/source4/libnet/libnet_domain.c b/source4/libnet/libnet_domain.c index d2b96958ee..acd2ece7a9 100644 --- a/source4/libnet/libnet_domain.c +++ b/source4/libnet/libnet_domain.c @@ -1137,6 +1137,7 @@ static void continue_samr_close_handle(struct tevent_req *subreq) /* did everything go fine ? */ if (!NT_STATUS_IS_OK(s->samrclose.out.result)) { composite_error(c, s->samrclose.out.result); + return; } composite_done(c); diff --git a/source4/libnet/userinfo.c b/source4/libnet/userinfo.c index d485eecf5b..ddb249ee96 100644 --- a/source4/libnet/userinfo.c +++ b/source4/libnet/userinfo.c @@ -92,6 +92,7 @@ static void continue_userinfo_lookup(struct tevent_req *subreq) - we're looking for only one at the moment */ if (s->lookup.out.rids->count == 0) { composite_error(c, NT_STATUS_NO_SUCH_USER); + return; } /* TODO: find proper status code for more than one rid found */ -- cgit