[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