[SCM] Samba Shared Repository - branch master updated

Andrew Bartlett abartlet at samba.org
Thu Mar 1 05:41:04 MST 2012


The branch, master has been updated
       via  9c11c0c s4-libnet: Remove set but unused variables
       via  1a5eafb s4-libnet: Move to talloc_get_type_abort()
       via  31bf81a s4:torture/smb2/ioctl.c - quiet format specifier warnings on 32 bit
       via  8ea7956 s3-selftest: make ntlm_auth test more robust to bad input
       via  eca3a14 s3-selftest: Add more tests for ntlm_auth
       via  74c6d2b s3-ntlm_auth fix up gss-spnego-client so as to work with gss-spnego
       via  4dae0e7 s3-ntlm_auth: Wrap kerberos token in GSSAPI
       via  5b700cb s3-ntlm_auth: Add --target-service and --target-hostname options
       via  6090a15 build: look for backtrace_symbols in libexec
       via  b2a6b2f build: link heimdal krb5 against execinfo if found
      from  00a5366 s4-provision: Use "state directory" from lp, as it is always set

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 9c11c0cde04efd0d101a09eb93fed6f432477772
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Thu Mar 1 21:04:19 2012 +1100

    s4-libnet: Remove set but unused variables
    
    Autobuild-User: Andrew Bartlett <abartlet at samba.org>
    Autobuild-Date: Thu Mar  1 13:40:12 CET 2012 on sn-devel-104

commit 1a5eafba13fa54dd44626625886d1e7a4adf5a2c
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Thu Mar 1 21:02:24 2012 +1100

    s4-libnet: Move to talloc_get_type_abort()
    
    The NULL pointer dereference from talloc_get_type() might be free, but the
    information on the actual and expected types from talloc_get_type_abort()
    is priceless! :-)
    
    Andrew Bartlett

commit 31bf81a03c222f8c42996aebb127a31d23dc799e
Author: Matthias Dieter Wallnöfer <mdw at samba.org>
Date:   Sat Feb 25 18:24:37 2012 +0100

    s4:torture/smb2/ioctl.c - quiet format specifier warnings on 32 bit
    
    Achieve this by using platform independent casts.

commit 8ea795672d8063db2f474a4ac11a1b94f386096d
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Thu Mar 1 17:44:48 2012 +1100

    s3-selftest: make ntlm_auth test more robust to bad input
    
    If we do not know the helper protocol, make sure to error.
    
    Andrew Bartlett

commit eca3a14870f6632957a0ffeba1309d5da67cb9a1
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Thu Mar 1 16:57:46 2012 +1100

    s3-selftest: Add more tests for ntlm_auth

commit 74c6d2bcf44acfe3d275be0f96bd0026cdeeab8c
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Thu Mar 1 16:57:04 2012 +1100

    s3-ntlm_auth fix up gss-spnego-client so as to work with gss-spnego
    
    The SPNEGO code changed since this was last tested.
    
    Andrew Bartlett

commit 4dae0e7ec5add0c2000484a7dc6ca6f147e6ecb9
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Sat Feb 25 14:17:23 2012 +1100

    s3-ntlm_auth: Wrap kerberos token in GSSAPI
    
    While windows will accept this ticket without the wrapping, it is
    nicer to follow the standard and wrap it up in GSSAPI.
    
    This should allow the ntlm_auth gss-spnego-client to talk to
    the ntlm_auth gss-spengo server.
    
    Reported by Christof Schmitt <christof.schmitt at us.ibm.com>
    
    Andrew Bartlett

commit 5b700cb0e3bab1f9b0452db108d9150d5067c55d
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Sat Feb 25 14:15:17 2012 +1100

    s3-ntlm_auth: Add --target-service and --target-hostname options
    
    This will allow the gss-spnego-client protocol to work with modern
    SPNEGO servers that do not send the principal in the mechListMIC.
    
    Andrew Bartlett

commit 6090a155f0d11effad565ffa37af9a26fff5e715
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Thu Mar 1 12:57:12 2012 +1100

    build: look for backtrace_symbols in libexec

commit b2a6b2f750afaf5ea326b39fd4223cb4ab7d7732
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Thu Mar 1 18:13:28 2012 +1100

    build: link heimdal krb5 against execinfo if found
    
    This is for FreeBSD, where backtrace symbols are in execinfo

-----------------------------------------------------------------------

Summary of changes:
 lib/util/wscript_configure                |    2 +-
 source3/script/tests/test_ntlm_auth_s3.sh |    3 +
 source3/torture/test_ntlm_auth.py         |   98 +++++++++++++++++++++++------
 source3/utils/ntlm_auth.c                 |   58 ++++++++++++-----
 source3/wscript                           |    2 +-
 source4/heimdal_build/wscript_build       |    2 +-
 source4/libnet/libnet_domain.c            |   38 ++++++------
 source4/libnet/libnet_group.c             |   38 +++++------
 source4/libnet/libnet_user.c              |   60 +++++++++---------
 source4/libnet/userinfo.c                 |   10 ++--
 source4/torture/smb2/ioctl.c              |   11 ++--
 11 files changed, 203 insertions(+), 119 deletions(-)


Changeset truncated at 500 lines:

diff --git a/lib/util/wscript_configure b/lib/util/wscript_configure
index fea8ddf..fdaf67a 100644
--- a/lib/util/wscript_configure
+++ b/lib/util/wscript_configure
@@ -2,7 +2,7 @@
 
 
 # backtrace could be in libexecinfo or in libc
-conf.CHECK_FUNCS_IN('backtrace', 'execinfo', checklibc=True, headers='execinfo.h')
+conf.CHECK_FUNCS_IN('backtrace backtrace_symbols', 'execinfo', checklibc=True, headers='execinfo.h')
 
 conf.CHECK_FUNCS('sigprocmask sigblock sigaction')
 
diff --git a/source3/script/tests/test_ntlm_auth_s3.sh b/source3/script/tests/test_ntlm_auth_s3.sh
index 1655d75..ca7a952 100755
--- a/source3/script/tests/test_ntlm_auth_s3.sh
+++ b/source3/script/tests/test_ntlm_auth_s3.sh
@@ -25,6 +25,9 @@ testit "ntlm_auth" $PYTHON $SRC3DIR/torture/test_ntlm_auth.py $NTLM_AUTH $ADDARG
 # This should work even with NTLMv2
 testit "ntlm_auth with specified domain" $PYTHON $SRC3DIR/torture/test_ntlm_auth.py $NTLM_AUTH $ADDARGS --client-domain=fOo --server-domain=fOo || failed=`expr $failed + 1`
 testit "ntlm_auth against winbindd" $PYTHON $SRC3DIR/torture/test_ntlm_auth.py $NTLM_AUTH --client-username=$USERNAME --client-domain=$DOMAIN --client-password=$PASSWORD --server-use-winbindd $ADDARGS || failed=`expr $failed + 1`
+testit "ntlm_auth with NTLMSSP client and gss-spnego server" $PYTHON $SRC3DIR/torture/test_ntlm_auth.py $NTLM_AUTH $ADDARGS --client-domain=fOo --server-domain=fOo --client-helper=ntlmssp-client-1 --server-helper=gss-spnego || failed=`expr $failed + 1`
+testit "ntlm_auth with NTLMSSP gss-spnego-client and gss-spnego server" $PYTHON $SRC3DIR/torture/test_ntlm_auth.py $NTLM_AUTH $ADDARGS --client-domain=fOo --server-domain=fOo --client-helper=gss-spnego-client --server-helper=gss-spnego || failed=`expr $failed + 1`
+testit "ntlm_auth with NTLMSSP gss-spnego-client and gss-spnego server against winbind" $PYTHON $SRC3DIR/torture/test_ntlm_auth.py $NTLM_AUTH --client-username=$USERNAME --client-domain=$DOMAIN --client-password=$PASSWORD --server-use-winbindd --client-helper=gss-spnego-client --server-helper=gss-spnego $ADDARGS || failed=`expr $failed + 1`
 
 
 testok $0 $failed
diff --git a/source3/torture/test_ntlm_auth.py b/source3/torture/test_ntlm_auth.py
index be72548..1ee5b83 100755
--- a/source3/torture/test_ntlm_auth.py
+++ b/source3/torture/test_ntlm_auth.py
@@ -181,33 +181,93 @@ def main():
 	server_out = server_out_w
 	os.close(server_out_r)
 
-	# We're in the parent
-	writeLine(client_out, "YR")
-	buf = readLine(client_in)
+	if opts.client_helper == "ntlmssp-client-1" and opts.server_helper == "squid-2.5-ntlmssp":
 
-	if buf.count("YR ", 0, 3) != 1:
-		sys.exit(1)
+		# We're in the parent
+		writeLine(client_out, "YR")
+		buf = readLine(client_in)
+		
+		if buf.count("YR ", 0, 3) != 1:
+			sys.exit(1)
+
+		writeLine(server_out, buf)
+		buf = readLine(server_in)
+
+		if buf.count("TT ", 0, 3) != 1:
+			sys.exit(2)
+
+		writeLine(client_out, buf)
+		buf = readLine(client_in)
+
+		if buf.count("AF ", 0, 3) != 1:
+			sys.exit(3)
+
+		# Client sends 'AF <base64 blob>' but server expects 'KK <abse64 blob>'
+		buf = buf.replace("AF", "KK", 1)
+		
+		writeLine(server_out, buf)
+		buf = readLine(server_in)
+		
+		if buf.count("AF ", 0, 3) != 1:
+			sys.exit(4)
+
+	
+	elif opts.client_helper == "ntlmssp-client-1" and opts.server_helper == "gss-spnego":
+		# We're in the parent
+		writeLine(client_out, "YR")
+		buf = readLine(client_in)
+		
+		if buf.count("YR ", 0, 3) != 1:
+			sys.exit(1)
+
+		writeLine(server_out, buf)
+		buf = readLine(server_in)
+
+		if buf.count("TT ", 0, 3) != 1:
+			sys.exit(2)
+
+		writeLine(client_out, buf)
+		buf = readLine(client_in)
 
-	writeLine(server_out, buf)
-	buf = readLine(server_in)
+		if buf.count("AF ", 0, 3) != 1:
+			sys.exit(3)
 
-	if buf.count("TT ", 0, 3) != 1:
-		sys.exit(2)
+		# Client sends 'AF <base64 blob>' but server expects 'KK <abse64 blob>'
+		buf = buf.replace("AF", "KK", 1)
+		
+		writeLine(server_out, buf)
+		buf = readLine(server_in)
+		
+		if buf.count("AF * ", 0, 5) != 1:
+			sys.exit(4)
+
+
+	elif opts.client_helper == "gss-spnego-client" and opts.server_helper == "gss-spnego":
+		# We're in the parent
+		writeLine(server_out, "YR")
+		buf = readLine(server_in)
+		
+		while True:
+			if buf.count("AF ", 0, 3) != 1 and buf.count("TT ", 0, 3) != 1:
+				sys.exit(1)
 
-	writeLine(client_out, buf)
-	buf = readLine(client_in)
+			writeLine(client_out, buf)
+			buf = readLine(client_in)
+		
+			if buf.count("AF", 0, 2) == 1:
+				break
 
-	if buf.count("AF ", 0, 3) != 1:
-		sys.exit(3)
+			if buf.count("AF ", 0, 5) != 1 and buf.count("KK ", 0, 3) != 1 and buf.count("TT ", 0, 3) != 1:
+				sys.exit(2)
 
-	# Client sends 'AF <base64 blob>' but server expects 'KK <abse64 blob>'
-	buf = buf.replace("AF", "KK", 1)
+			writeLine(server_out, buf)
+			buf = readLine(server_in)
 
-	writeLine(server_out, buf)
-	buf = readLine(server_in)
+			if buf.count("AF * ", 0, 5) == 1:
+				break
 
-	if buf.count("AF ", 0, 3) != 1:
-		sys.exit(4)
+	else:
+		sys.exit(5)
 
 	if opts.client_helper == "ntlmssp-client-1":
 		writeLine(client_out, "GK")
diff --git a/source3/utils/ntlm_auth.c b/source3/utils/ntlm_auth.c
index b389957..2216816 100644
--- a/source3/utils/ntlm_auth.c
+++ b/source3/utils/ntlm_auth.c
@@ -151,6 +151,9 @@ static const char *require_membership_of;
 static const char *require_membership_of_sid;
 static const char *opt_pam_winbind_conf;
 
+const char *opt_target_service;
+const char *opt_target_hostname;
+
 /**
  * A limited set of features are defined with text strings as needed
  * by ntlm_auth
@@ -1905,8 +1908,8 @@ static void manage_client_ntlmssp_targ(struct spnego_data spnego)
 				       spnego.negTokenTarg.responseToken,
 				       &request);
 
-	if (!NT_STATUS_EQUAL(status, NT_STATUS_MORE_PROCESSING_REQUIRED)) {
-		DEBUG(1, ("Expected MORE_PROCESSING_REQUIRED from "
+	if (!NT_STATUS_EQUAL(status, NT_STATUS_MORE_PROCESSING_REQUIRED) && !NT_STATUS_IS_OK(status)) {
+		DEBUG(1, ("Expected MORE_PROCESSING_REQUIRED or OK from "
 			  "ntlmssp_client_update, got: %s\n",
 			  nt_errstr(status)));
 		x_fprintf(x_stdout, "BH Expected MORE_PROCESSING_REQUIRED from "
@@ -1937,7 +1940,7 @@ static void manage_client_ntlmssp_targ(struct spnego_data spnego)
 static bool manage_client_krb5_init(struct spnego_data spnego)
 {
 	char *principal;
-	DATA_BLOB tkt, to_server;
+	DATA_BLOB tkt, tkt_wrapped, to_server;
 	DATA_BLOB session_key_krb5 = data_blob_null;
 	struct spnego_data reply;
 	char *reply_base64;
@@ -1947,24 +1950,37 @@ static bool manage_client_krb5_init(struct spnego_data spnego)
 	ssize_t len;
 	TALLOC_CTX *ctx = talloc_tos();
 
-	if ( (spnego.negTokenInit.mechListMIC.data == NULL) ||
-	     (spnego.negTokenInit.mechListMIC.length == 0) ) {
-		DEBUG(1, ("Did not get a principal for krb5\n"));
-		return False;
+	principal = spnego.negTokenInit.targetPrincipal;
+
+	/* We may not be allowed to use the server-supplied SPNEGO principal, or it may not have been supplied to us
+	 */
+	if (!lp_client_use_spnego_principal() || strequal(principal, ADS_IGNORE_PRINCIPAL)) {
+		principal = NULL;
 	}
+	
+	if (principal == NULL &&
+	    opt_target_service && opt_target_hostname && !is_ipaddress(opt_target_hostname)) {
+		DEBUG(3,("manage_client_krb5_init: using target "
+			 "hostname not SPNEGO principal\n"));
 
-	principal = (char *)SMB_MALLOC(
-		spnego.negTokenInit.mechListMIC.length+1);
+		principal = kerberos_get_principal_from_service_hostname(talloc_tos(),
+									 opt_target_service,
+									 opt_target_hostname);
 
+		if (!principal) {
+			return false;
+		}
+		
+		DEBUG(3,("manage_client_krb5_init: guessed "
+			 "server principal=%s\n",
+			 principal ? principal : "<null>"));
+	}
+	
 	if (principal == NULL) {
-		DEBUG(1, ("Could not malloc principal\n"));
-		return False;
+		DEBUG(3,("manage_client_krb5_init: could not guess server principal\n"));
+		return false;
 	}
 
-	memcpy(principal, spnego.negTokenInit.mechListMIC.data,
-	       spnego.negTokenInit.mechListMIC.length);
-	principal[spnego.negTokenInit.mechListMIC.length] = '\0';
-
 	retval = cli_krb5_get_ticket(ctx, principal, 0,
 					  &tkt, &session_key_krb5,
 					  0, NULL, NULL, NULL);
@@ -1997,8 +2013,12 @@ static bool manage_client_krb5_init(struct spnego_data spnego)
 			DEBUG(10, ("Kinit suceeded, but getting a ticket failed: %s\n", error_message(retval)));
 			return False;
 		}
+
 	}
 
+	/* wrap that up in a nice GSS-API wrapping */
+	tkt_wrapped = spnego_gen_krb5_wrap(ctx, tkt, TOK_ID_KRB_AP_REQ);
+
 	data_blob_free(&session_key_krb5);
 
 	ZERO_STRUCT(reply);
@@ -2007,7 +2027,7 @@ static bool manage_client_krb5_init(struct spnego_data spnego)
 	reply.negTokenInit.mechTypes = my_mechs;
 	reply.negTokenInit.reqFlags = data_blob_null;
 	reply.negTokenInit.reqFlagsPadding = 0;
-	reply.negTokenInit.mechToken = tkt;
+	reply.negTokenInit.mechToken = tkt_wrapped;
 	reply.negTokenInit.mechListMIC = data_blob_null;
 
 	len = spnego_write_data(ctx, &to_server, &reply);
@@ -2766,7 +2786,9 @@ enum {
 	OPT_DIAGNOSTICS,
 	OPT_REQUIRE_MEMBERSHIP,
 	OPT_USE_CACHED_CREDS,
-	OPT_PAM_WINBIND_CONF
+	OPT_PAM_WINBIND_CONF,
+	OPT_TARGET_SERVICE,
+	OPT_TARGET_HOSTNAME
 };
 
  int main(int argc, const char **argv)
@@ -2808,6 +2830,8 @@ enum {
 		  "Perform diagnostics on the authentication chain"},
 		{ "require-membership-of", 0, POPT_ARG_STRING, &require_membership_of, OPT_REQUIRE_MEMBERSHIP, "Require that a user be a member of this group (either name or SID) for authentication to succeed" },
 		{ "pam-winbind-conf", 0, POPT_ARG_STRING, &opt_pam_winbind_conf, OPT_PAM_WINBIND_CONF, "Require that request must set WBFLAG_PAM_CONTACT_TRUSTDOM when krb5 auth is required" },
+		{ "target-service", 0, POPT_ARG_STRING, &opt_target_service, OPT_TARGET_SERVICE, "Target service (eg http)" },
+		{ "target-hostname", 0, POPT_ARG_STRING, &opt_target_hostname, OPT_TARGET_HOSTNAME, "Target hostname" },
 		POPT_COMMON_CONFIGFILE
 		POPT_COMMON_VERSION
 		POPT_TABLEEND
diff --git a/source3/wscript b/source3/wscript
index 4fe0535..829a7e3 100644
--- a/source3/wscript
+++ b/source3/wscript
@@ -226,7 +226,7 @@ if (0) {
 
     conf.CHECK_FUNCS('''
 _acl __acl add_proplist_entry atexit attr_getf attr_list attr_listf
-attropen attr_remove attr_removef attr_set attr_setf backtrace_symbols
+attropen attr_remove attr_removef attr_set attr_setf
 bindtextdomain _chdir __chdir chflags chmod _close __close _closedir
 __closedir closedir64 creat64 crypt16 delproplist devnm dgettext dirfd
 DNSServiceRegister _dup __dup _dup2 __dup2 endmntent execl
diff --git a/source4/heimdal_build/wscript_build b/source4/heimdal_build/wscript_build
index 948191f..3dfeb2b 100644
--- a/source4/heimdal_build/wscript_build
+++ b/source4/heimdal_build/wscript_build
@@ -670,7 +670,7 @@ if not bld.CONFIG_SET("USING_SYSTEM_KRB5"):
     HEIMDAL_LIBRARY('krb5', KRB5_SOURCE,
         version_script='lib/krb5/version-script.map',
                         includes='../heimdal/lib/krb5 ../heimdal/lib/asn1 ../heimdal/include',
-                deps='roken wind asn1 hx509 hcrypto intl com_err HEIMDAL_CONFIG heimbase',
+                deps='roken wind asn1 hx509 hcrypto intl com_err HEIMDAL_CONFIG heimbase execinfo',
                 vnum='26.0.0',
                         )
     KRB5_PROTO_SOURCE = KRB5_SOURCE + ['lib/krb5/expand_path.c', 'lib/krb5/plugin.c', 'lib/krb5/context.c']
diff --git a/source4/libnet/libnet_domain.c b/source4/libnet/libnet_domain.c
index 0fafe71..b2a8882 100644
--- a/source4/libnet/libnet_domain.c
+++ b/source4/libnet/libnet_domain.c
@@ -62,8 +62,8 @@ static void continue_domain_open_rpc_connect(struct composite_context *ctx)
 	struct domain_open_samr_state *s;
 	struct tevent_req *subreq;
 
-	c = talloc_get_type(ctx->async.private_data, struct composite_context);
-	s = talloc_get_type(c->private_data, struct domain_open_samr_state);
+	c = talloc_get_type_abort(ctx->async.private_data, struct composite_context);
+	s = talloc_get_type_abort(c->private_data, struct domain_open_samr_state);
 
 	c->status = libnet_RpcConnect_recv(ctx, s->ctx, c, &s->rpcconn);
 	if (!composite_is_ok(c)) return;
@@ -96,7 +96,7 @@ static void continue_domain_open_close(struct tevent_req *subreq)
 	struct domain_open_samr_state *s;
 
 	c = tevent_req_callback_data(subreq, struct composite_context);
-	s = talloc_get_type(c->private_data, struct domain_open_samr_state);
+	s = talloc_get_type_abort(c->private_data, struct domain_open_samr_state);
 
 	/* receive samr_Close reply */
 	c->status = dcerpc_samr_Close_r_recv(subreq, s);
@@ -143,7 +143,7 @@ static void continue_domain_open_connect(struct tevent_req *subreq)
 	struct samr_LookupDomain *r;
 	
 	c = tevent_req_callback_data(subreq, struct composite_context);
-	s = talloc_get_type(c->private_data, struct domain_open_samr_state);
+	s = talloc_get_type_abort(c->private_data, struct domain_open_samr_state);
 
 	/* receive samr_Connect reply */
 	c->status = dcerpc_samr_Connect_r_recv(subreq, s);
@@ -186,7 +186,7 @@ static void continue_domain_open_lookup(struct tevent_req *subreq)
 	struct samr_OpenDomain *r;
 
 	c = tevent_req_callback_data(subreq, struct composite_context);
-	s = talloc_get_type(c->private_data, struct domain_open_samr_state);
+	s = talloc_get_type_abort(c->private_data, struct domain_open_samr_state);
 	
 	/* receive samr_LookupDomain reply */
 	c->status = dcerpc_samr_LookupDomain_r_recv(subreq, s);
@@ -239,7 +239,7 @@ static void continue_domain_open_open(struct tevent_req *subreq)
 	struct domain_open_samr_state *s;
 
 	c = tevent_req_callback_data(subreq, struct composite_context);
-	s = talloc_get_type(c->private_data, struct domain_open_samr_state);
+	s = talloc_get_type_abort(c->private_data, struct domain_open_samr_state);
 
 	/* receive samr_OpenDomain reply */
 	c->status = dcerpc_samr_OpenDomain_r_recv(subreq, s);
@@ -370,7 +370,7 @@ NTSTATUS libnet_DomainOpenSamr_recv(struct composite_context *c, struct libnet_c
 	status = composite_wait(c);
 	
 	if (NT_STATUS_IS_OK(status) && io) {
-		s = talloc_get_type(c->private_data, struct domain_open_samr_state);
+		s = talloc_get_type_abort(c->private_data, struct domain_open_samr_state);
 		io->out.domain_handle = s->domain_handle;
 
 		/* store the resulting handle and related data for use by other
@@ -492,8 +492,8 @@ static void continue_rpc_connect_lsa(struct composite_context *ctx)
 	struct lsa_QosInfo *qos;
 	struct tevent_req *subreq;
 
-	c = talloc_get_type(ctx->async.private_data, struct composite_context);
-	s = talloc_get_type(c->private_data, struct domain_open_lsa_state);
+	c = talloc_get_type_abort(ctx->async.private_data, struct composite_context);
+	s = talloc_get_type_abort(c->private_data, struct domain_open_lsa_state);
 
 	/* receive rpc connection */
 	c->status = libnet_RpcConnect_recv(ctx, s->ctx, c, &s->rpcconn);
@@ -536,7 +536,7 @@ static void continue_lsa_policy_open(struct tevent_req *subreq)
 	struct domain_open_lsa_state *s;
 
 	c = tevent_req_callback_data(subreq, struct composite_context);
-	s = talloc_get_type(c->private_data, struct domain_open_lsa_state);
+	s = talloc_get_type_abort(c->private_data, struct domain_open_lsa_state);
 
 	c->status = dcerpc_lsa_OpenPolicy2_r_recv(subreq, s);
 	TALLOC_FREE(subreq);
@@ -576,7 +576,7 @@ NTSTATUS libnet_DomainOpenLsa_recv(struct composite_context *c, struct libnet_co
 	if (NT_STATUS_IS_OK(status) && io) {
 		/* everything went fine - get the results and
 		   return the error string */
-		s = talloc_get_type(c->private_data, struct domain_open_lsa_state);
+		s = talloc_get_type_abort(c->private_data, struct domain_open_lsa_state);
 		io->out.domain_handle = s->handle;
 
 		ctx->lsa.handle      = s->handle;
@@ -739,7 +739,7 @@ static void continue_lsa_close(struct tevent_req *subreq)
 	struct domain_close_lsa_state *s;
 	
 	c = tevent_req_callback_data(subreq, struct composite_context);
-	s = talloc_get_type(c->private_data, struct domain_close_lsa_state);
+	s = talloc_get_type_abort(c->private_data, struct domain_close_lsa_state);
 
 	c->status = dcerpc_lsa_Close_r_recv(subreq, s);
 	TALLOC_FREE(subreq);
@@ -844,7 +844,7 @@ static void continue_samr_close(struct tevent_req *subreq)
 	struct domain_close_samr_state *s;
 
 	c = tevent_req_callback_data(subreq, struct composite_context);
-	s = talloc_get_type(c->private_data, struct domain_close_samr_state);
+	s = talloc_get_type_abort(c->private_data, struct domain_close_samr_state);
 	
 	c->status = dcerpc_samr_Close_r_recv(subreq, s);
 	TALLOC_FREE(subreq);
@@ -981,8 +981,8 @@ static void continue_rpc_connect(struct composite_context *ctx)
 	struct domain_list_state *s;
 	struct tevent_req *subreq;
 
-	c = talloc_get_type(ctx->async.private_data, struct composite_context);
-	s = talloc_get_type(c->private_data, struct domain_list_state);
+	c = talloc_get_type_abort(ctx->async.private_data, struct composite_context);
+	s = talloc_get_type_abort(c->private_data, struct domain_list_state);
 	
 	c->status = libnet_RpcConnect_recv(ctx, s->ctx, c, &s->rpcconn);
 	if (!composite_is_ok(c)) return;
@@ -1010,7 +1010,7 @@ static void continue_samr_connect(struct tevent_req *subreq)
 	struct domain_list_state *s;
 
 	c = tevent_req_callback_data(subreq, struct composite_context);
-	s = talloc_get_type(c->private_data, struct domain_list_state);
+	s = talloc_get_type_abort(c->private_data, struct domain_list_state);
 	
 	c->status = dcerpc_samr_Connect_r_recv(subreq, s);
 	TALLOC_FREE(subreq);
@@ -1054,7 +1054,7 @@ static void continue_samr_enum_domains(struct tevent_req *subreq)
 	struct domain_list_state *s;
 
 	c = tevent_req_callback_data(subreq, struct composite_context);
-	s = talloc_get_type(c->private_data, struct domain_list_state);
+	s = talloc_get_type_abort(c->private_data, struct domain_list_state);
 	
 	c->status = dcerpc_samr_EnumDomains_r_recv(subreq, s);
 	TALLOC_FREE(subreq);
@@ -1119,7 +1119,7 @@ static void continue_samr_close_handle(struct tevent_req *subreq)
 	struct domain_list_state *s;
 
 	c = tevent_req_callback_data(subreq, struct composite_context);
-	s = talloc_get_type(c->private_data, struct domain_list_state);
+	s = talloc_get_type_abort(c->private_data, struct domain_list_state);
 
 	c->status = dcerpc_samr_Close_r_recv(subreq, s);
 	TALLOC_FREE(subreq);
@@ -1260,7 +1260,7 @@ NTSTATUS libnet_DomainList_recv(struct composite_context *c, struct libnet_conte
 
 	status = composite_wait(c);
 
-	s = talloc_get_type(c->private_data, struct domain_list_state);
+	s = talloc_get_type_abort(c->private_data, struct domain_list_state);
 
 	if (NT_STATUS_IS_OK(status) && ctx && mem_ctx && io) {
 		/* fetch the results to be returned by io structure */
diff --git a/source4/libnet/libnet_group.c b/source4/libnet/libnet_group.c
index e3d51f3..5d8f9e2 100644
--- a/source4/libnet/libnet_group.c
+++ b/source4/libnet/libnet_group.c
@@ -90,8 +90,8 @@ static void continue_domain_opened(struct composite_context *ctx)
 	struct create_group_state *s;
 	struct composite_context *create_req;
 	
-	c = talloc_get_type(ctx->async.private_data, struct composite_context);
-	s = talloc_get_type(c->private_data, struct create_group_state);
+	c = talloc_get_type_abort(ctx->async.private_data, struct composite_context);
+	s = talloc_get_type_abort(c->private_data, struct create_group_state);
 
 	c->status = libnet_DomainOpen_recv(ctx, s->ctx, c, &s->domain_open);
 	if (!composite_is_ok(c)) return;
@@ -114,8 +114,8 @@ static void continue_rpc_group_added(struct composite_context *ctx)
 	struct composite_context *c;
 	struct create_group_state *s;
 
-	c = talloc_get_type(ctx->async.private_data, struct composite_context);
-	s = talloc_get_type(c->private_data, struct create_group_state);
+	c = talloc_get_type_abort(ctx->async.private_data, struct composite_context);
+	s = talloc_get_type_abort(c->private_data, struct create_group_state);
 
 	/* receive result of group add call */
 	c->status = libnet_rpc_groupadd_recv(ctx, c, &s->group_add);
@@ -139,11 +139,9 @@ NTSTATUS libnet_CreateGroup_recv(struct composite_context *c,
 				 struct libnet_CreateGroup *r)
 {
 	NTSTATUS status;
-	struct create_group_state *s;
 
 	status = composite_wait(c);
 	if (!NT_STATUS_IS_OK(status)) {
-		s = talloc_get_type(c->private_data, struct create_group_state);
 		r->out.error_string = talloc_strdup(mem_ctx, nt_errstr(status));
 	}
 
@@ -280,8 +278,8 @@ static void continue_domain_open_info(struct composite_context *ctx)
 	struct group_info_state *s;
 	struct composite_context *lookup_req, *info_req;
 	
-	c = talloc_get_type(ctx->async.private_data, struct composite_context);
-	s = talloc_get_type(c->private_data, struct group_info_state);
+	c = talloc_get_type_abort(ctx->async.private_data, struct composite_context);
+	s = talloc_get_type_abort(c->private_data, struct group_info_state);
 	
 	/* receive domain handle */
 	c->status = libnet_DomainOpen_recv(ctx, s->ctx, c, &s->domopen);
@@ -328,8 +326,8 @@ static void continue_name_found(struct composite_context *ctx)


-- 
Samba Shared Repository


More information about the samba-cvs mailing list