[SCM] Samba Shared Repository - branch master updated
Jeremy Allison
jra at samba.org
Thu Sep 25 19:15:04 MDT 2014
The branch, master has been updated
via 69a7e3c s4: libcli: ldap message - Ensure all asn1_XX returns are checked.
via b1a1f69 s4: libcli: ldap controls - Ensure all asn1_XX returns are checked.
via ac54f51 s3: tldap_util: Ensure all asn1_XX returns are checked.
via e6cf99c s4: auth: gensec: asn1 fixes - check all returns.
via a2f779f s3: tldap: Ensure all asn1_XX returns are checked.
via a713623 s3: libsmb: Ensure all asn1_XX returns are checked.
via 53f21ff libcli: auth: Ensure all asn1_XX returns are checked.
via 612b742 lib: util: asn1 tests. Check every asn1 return.
via 4dba8fd auth: gensec: asn1 fixes - check all returns.
via f102752 lib: util: asn1 fixes - check all returns.
from b6ec190 vfs_fruit: update rfork size in AppleDouble header
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 69a7e3cfdc8dbba9c8dcfdfae82d2894c7247e15
Author: Jeremy Allison <jra at samba.org>
Date: Mon Sep 22 16:08:26 2014 -0700
s4: libcli: ldap message - Ensure all asn1_XX returns are checked.
Signed-off-by: Jeremy Allison <jra at samba.org>
Reviewed-by: Ronnie Sahlberg <ronniesahlberg at gmail.com>
Autobuild-User(master): Jeremy Allison <jra at samba.org>
Autobuild-Date(master): Fri Sep 26 03:15:00 CEST 2014 on sn-devel-104
commit b1a1f691c8d1b6b1064a5033c81451e5c606b9f4
Author: Jeremy Allison <jra at samba.org>
Date: Mon Sep 22 13:28:18 2014 -0700
s4: libcli: ldap controls - Ensure all asn1_XX returns are checked.
Signed-off-by: Jeremy Allison <jra at samba.org>
Reviewed-by: Ronnie Sahlberg <ronniesahlberg at gmail.com>
commit ac54f519cbb332b5d8aab06c3fa61780d8f3ee0f
Author: Jeremy Allison <jra at samba.org>
Date: Fri Sep 19 15:21:06 2014 -0700
s3: tldap_util: Ensure all asn1_XX returns are checked.
Signed-off-by: Jeremy Allison <jra at samba.org>
Reviewed-by: Ronnie Sahlberg <ronniesahlberg at gmail.com>
commit e6cf99c9d9160ed2f5921b2b3169a374a21242dc
Author: Jeremy Allison <jra at samba.org>
Date: Fri Sep 19 15:16:38 2014 -0700
s4: auth: gensec: asn1 fixes - check all returns.
Signed-off-by: Jeremy Allison <jra at samba.org>
Reviewed-by: Ronnie Sahlberg <ronniesahlberg at gmail.com>
commit a2f779fd5f7209010426472858929fb75ae13564
Author: Jeremy Allison <jra at samba.org>
Date: Fri Sep 19 15:10:46 2014 -0700
s3: tldap: Ensure all asn1_XX returns are checked.
Signed-off-by: Jeremy Allison <jra at samba.org>
Reviewed-by: Ronnie Sahlberg <ronniesahlberg at gmail.com>
commit a713623212e4f440372b3556d26f3dfbbe064940
Author: Jeremy Allison <jra at samba.org>
Date: Fri Sep 19 14:27:58 2014 -0700
s3: libsmb: Ensure all asn1_XX returns are checked.
Signed-off-by: Jeremy Allison <jra at samba.org>
Reviewed-by: Ronnie Sahlberg <ronniesahlberg at gmail.com>
commit 53f21ffb4af085b7de90f3237b957e13acc0c227
Author: Jeremy Allison <jra at samba.org>
Date: Fri Sep 19 13:42:39 2014 -0700
libcli: auth: Ensure all asn1_XX returns are checked.
Signed-off-by: Jeremy Allison <jra at samba.org>
Reviewed-by: Ronnie Sahlberg <ronniesahlberg at gmail.com>
commit 612b74296c23fd2e3cac9b38ab390a18d658e494
Author: Jeremy Allison <jra at samba.org>
Date: Fri Sep 19 12:46:49 2014 -0700
lib: util: asn1 tests. Check every asn1 return.
Signed-off-by: Jeremy Allison <jra at samba.org>
Reviewed-by: Ronnie Sahlberg <ronniesahlberg at gmail.com>
commit 4dba8fd59982e5459c4275aaf434f6d564fcf79d
Author: Jeremy Allison <jra at samba.org>
Date: Fri Sep 19 12:41:22 2014 -0700
auth: gensec: asn1 fixes - check all returns.
Signed-off-by: Jeremy Allison <jra at samba.org>
Reviewed-by: Ronnie Sahlberg <ronniesahlberg at gmail.com>
commit f102752b0ccc39d8fdef6a85485dc0b44d16a860
Author: Jeremy Allison <jra at samba.org>
Date: Fri Sep 19 12:39:19 2014 -0700
lib: util: asn1 fixes - check all returns.
Signed-off-by: Jeremy Allison <jra at samba.org>
Reviewed-by: Ronnie Sahlberg <ronniesahlberg at gmail.com>
-----------------------------------------------------------------------
Summary of changes:
auth/gensec/gensec_util.c | 11 +-
lib/krb5_wrap/krb5_samba.c | 26 +-
lib/util/tests/asn1_tests.c | 14 +-
libcli/auth/spnego_parse.c | 214 +++++-----
libcli/ldap/ldap_message.c | 786 ++++++++++++++++++-----------------
libcli/ldap/ldap_message.h | 2 +-
source3/lib/tldap.c | 315 ++++++++-------
source3/lib/tldap_util.c | 43 +-
source3/libsmb/clispnego.c | 253 ++++++-----
source4/auth/gensec/gensec_krb5.c | 41 +-
source4/libcli/ldap/ldap_controls.c | 28 +-
11 files changed, 912 insertions(+), 821 deletions(-)
Changeset truncated at 500 lines:
diff --git a/auth/gensec/gensec_util.c b/auth/gensec/gensec_util.c
index 568128a..b8e38b7 100644
--- a/auth/gensec/gensec_util.c
+++ b/auth/gensec/gensec_util.c
@@ -188,19 +188,20 @@ NTSTATUS gensec_packet_full_request(struct gensec_security *gensec_security,
*/
static bool gensec_gssapi_check_oid(const DATA_BLOB *blob, const char *oid)
{
- bool ret;
+ bool ret = false;
struct asn1_data *data = asn1_init(NULL);
if (!data) return false;
- asn1_load(data, *blob);
- asn1_start_tag(data, ASN1_APPLICATION(0));
- asn1_check_OID(data, oid);
+ if (!asn1_load(data, *blob)) goto err;
+ if (!asn1_start_tag(data, ASN1_APPLICATION(0))) goto err;
+ if (!asn1_check_OID(data, oid)) goto err;
ret = !data->has_error;
- asn1_free(data);
+ err:
+ asn1_free(data);
return ret;
}
diff --git a/lib/krb5_wrap/krb5_samba.c b/lib/krb5_wrap/krb5_samba.c
index 39926a6..5f0378b 100644
--- a/lib/krb5_wrap/krb5_samba.c
+++ b/lib/krb5_wrap/krb5_samba.c
@@ -296,23 +296,22 @@ bool unwrap_edata_ntstatus(TALLOC_CTX *mem_ctx,
return false;
}
- asn1_load(data, *edata);
- asn1_start_tag(data, ASN1_SEQUENCE(0));
- asn1_start_tag(data, ASN1_CONTEXT(1));
- asn1_read_Integer(data, &edata_type);
+ if (!asn1_load(data, *edata)) goto err;
+ if (!asn1_start_tag(data, ASN1_SEQUENCE(0))) goto err;
+ if (!asn1_start_tag(data, ASN1_CONTEXT(1))) goto err;
+ if (!asn1_read_Integer(data, &edata_type)) goto err;
if (edata_type != KRB5_PADATA_PW_SALT) {
DEBUG(0,("edata is not of required type %d but of type %d\n",
KRB5_PADATA_PW_SALT, edata_type));
- asn1_free(data);
- return false;
+ goto err;
}
- asn1_start_tag(data, ASN1_CONTEXT(2));
- asn1_read_OctetString(data, talloc_tos(), &edata_contents);
- asn1_end_tag(data);
- asn1_end_tag(data);
- asn1_end_tag(data);
+ if (!asn1_start_tag(data, ASN1_CONTEXT(2))) goto err;
+ if (!asn1_read_OctetString(data, talloc_tos(), &edata_contents)) goto err;
+ if (!asn1_end_tag(data)) goto err;
+ if (!asn1_end_tag(data)) goto err;
+ if (!asn1_end_tag(data)) goto err;
asn1_free(data);
*edata_out = data_blob_talloc(mem_ctx, edata_contents.data, edata_contents.length);
@@ -320,6 +319,11 @@ bool unwrap_edata_ntstatus(TALLOC_CTX *mem_ctx,
data_blob_free(&edata_contents);
return true;
+
+ err:
+
+ asn1_free(data);
+ return false;
}
diff --git a/lib/util/tests/asn1_tests.c b/lib/util/tests/asn1_tests.c
index 93ffbad..2c68cb4 100644
--- a/lib/util/tests/asn1_tests.c
+++ b/lib/util/tests/asn1_tests.c
@@ -321,6 +321,7 @@ static bool test_asn1_Integer(struct torture_context *tctx)
{
int i;
TALLOC_CTX *mem_ctx;
+ bool ret = false;
mem_ctx = talloc_new(tctx);
@@ -331,25 +332,28 @@ static bool test_asn1_Integer(struct torture_context *tctx)
data = asn1_init(mem_ctx);
if (!data) {
- return -1;
+ goto err;
}
- asn1_write_Integer(data, integer_tests[i].value);
+ if (!asn1_write_Integer(data, integer_tests[i].value)) goto err;
blob.data = data->data;
blob.length = data->length;
torture_assert_data_blob_equal(tctx, blob, integer_tests[i].blob, "asn1_write_Integer gave incorrect result");
- asn1_load(data, blob);
+ if (!asn1_load(data, blob)) goto err;
torture_assert(tctx, asn1_read_Integer(data, &val), "asn1_write_Integer output could not be read by asn1_read_Integer()");
torture_assert_int_equal(tctx, val, integer_tests[i].value,
"readback of asn1_write_Integer output by asn1_read_Integer() failed");
}
- talloc_free(mem_ctx);
+ ret = true;
- return true;
+ err:
+
+ talloc_free(mem_ctx);
+ return ret;
}
diff --git a/libcli/auth/spnego_parse.c b/libcli/auth/spnego_parse.c
index b1ca07d..d4c5bdc 100644
--- a/libcli/auth/spnego_parse.c
+++ b/libcli/auth/spnego_parse.c
@@ -29,12 +29,13 @@ static bool read_negTokenInit(struct asn1_data *asn1, TALLOC_CTX *mem_ctx,
{
ZERO_STRUCTP(token);
- asn1_start_tag(asn1, ASN1_CONTEXT(0));
- asn1_start_tag(asn1, ASN1_SEQUENCE(0));
+ if (!asn1_start_tag(asn1, ASN1_CONTEXT(0))) return false;
+ if (!asn1_start_tag(asn1, ASN1_SEQUENCE(0))) return false;
while (!asn1->has_error && 0 < asn1_tag_remaining(asn1)) {
int i;
uint8_t context;
+
if (!asn1_peek_uint8(asn1, &context)) {
asn1->has_error = true;
break;
@@ -45,8 +46,8 @@ static bool read_negTokenInit(struct asn1_data *asn1, TALLOC_CTX *mem_ctx,
case ASN1_CONTEXT(0): {
const char **mechTypes;
- asn1_start_tag(asn1, ASN1_CONTEXT(0));
- asn1_start_tag(asn1, ASN1_SEQUENCE(0));
+ if (!asn1_start_tag(asn1, ASN1_CONTEXT(0))) return false;
+ if (!asn1_start_tag(asn1, ASN1_SEQUENCE(0))) return false;
mechTypes = talloc(mem_ctx, const char *);
if (mechTypes == NULL) {
@@ -67,7 +68,7 @@ static bool read_negTokenInit(struct asn1_data *asn1, TALLOC_CTX *mem_ctx,
}
mechTypes = p;
- asn1_read_OID(asn1, mechTypes, &oid);
+ if (!asn1_read_OID(asn1, mechTypes, &oid)) return false;
mechTypes[i] = oid;
}
mechTypes[i] = NULL;
@@ -79,42 +80,42 @@ static bool read_negTokenInit(struct asn1_data *asn1, TALLOC_CTX *mem_ctx,
}
/* Read reqFlags */
case ASN1_CONTEXT(1):
- asn1_start_tag(asn1, ASN1_CONTEXT(1));
- asn1_read_BitString(asn1, mem_ctx, &token->reqFlags,
- &token->reqFlagsPadding);
- asn1_end_tag(asn1);
+ if (!asn1_start_tag(asn1, ASN1_CONTEXT(1))) return false;
+ if (!asn1_read_BitString(asn1, mem_ctx, &token->reqFlags,
+ &token->reqFlagsPadding)) return false;
+ if (!asn1_end_tag(asn1)) return false;
break;
/* Read mechToken */
case ASN1_CONTEXT(2):
- asn1_start_tag(asn1, ASN1_CONTEXT(2));
- asn1_read_OctetString(asn1, mem_ctx, &token->mechToken);
- asn1_end_tag(asn1);
+ if (!asn1_start_tag(asn1, ASN1_CONTEXT(2))) return false;
+ if (!asn1_read_OctetString(asn1, mem_ctx, &token->mechToken)) return false;
+ if (!asn1_end_tag(asn1)) return false;
break;
/* Read mecListMIC */
case ASN1_CONTEXT(3):
{
uint8_t type_peek;
- asn1_start_tag(asn1, ASN1_CONTEXT(3));
+ if (!asn1_start_tag(asn1, ASN1_CONTEXT(3))) return false;
if (!asn1_peek_uint8(asn1, &type_peek)) {
asn1->has_error = true;
break;
}
if (type_peek == ASN1_OCTET_STRING) {
- asn1_read_OctetString(asn1, mem_ctx,
- &token->mechListMIC);
+ if (!asn1_read_OctetString(asn1, mem_ctx,
+ &token->mechListMIC)) return false;
} else {
/* RFC 2478 says we have an Octet String here,
but W2k sends something different... */
char *mechListMIC;
- asn1_start_tag(asn1, ASN1_SEQUENCE(0));
- asn1_start_tag(asn1, ASN1_CONTEXT(0));
- asn1_read_GeneralString(asn1, mem_ctx, &mechListMIC);
- asn1_end_tag(asn1);
- asn1_end_tag(asn1);
+ if (!asn1_start_tag(asn1, ASN1_SEQUENCE(0))) return false;
+ if (!asn1_start_tag(asn1, ASN1_CONTEXT(0))) return false;
+ if (!asn1_read_GeneralString(asn1, mem_ctx, &mechListMIC)) return false;
+ if (!asn1_end_tag(asn1)) return false;
+ if (!asn1_end_tag(asn1)) return false;
token->targetPrincipal = mechListMIC;
}
- asn1_end_tag(asn1);
+ if (!asn1_end_tag(asn1)) return false;
break;
}
default:
@@ -123,50 +124,50 @@ static bool read_negTokenInit(struct asn1_data *asn1, TALLOC_CTX *mem_ctx,
}
}
- asn1_end_tag(asn1);
- asn1_end_tag(asn1);
+ if (!asn1_end_tag(asn1)) return false;
+ if (!asn1_end_tag(asn1)) return false;
return !asn1->has_error;
}
static bool write_negTokenInit(struct asn1_data *asn1, struct spnego_negTokenInit *token)
{
- asn1_push_tag(asn1, ASN1_CONTEXT(0));
- asn1_push_tag(asn1, ASN1_SEQUENCE(0));
+ if (!asn1_push_tag(asn1, ASN1_CONTEXT(0))) return false;
+ if (!asn1_push_tag(asn1, ASN1_SEQUENCE(0))) return false;
/* Write mechTypes */
if (token->mechTypes && *token->mechTypes) {
int i;
- asn1_push_tag(asn1, ASN1_CONTEXT(0));
- asn1_push_tag(asn1, ASN1_SEQUENCE(0));
+ if (!asn1_push_tag(asn1, ASN1_CONTEXT(0))) return false;
+ if (!asn1_push_tag(asn1, ASN1_SEQUENCE(0))) return false;
for (i = 0; token->mechTypes[i]; i++) {
- asn1_write_OID(asn1, token->mechTypes[i]);
+ if (!asn1_write_OID(asn1, token->mechTypes[i])) return false;
}
- asn1_pop_tag(asn1);
- asn1_pop_tag(asn1);
+ if (!asn1_pop_tag(asn1)) return false;
+ if (!asn1_pop_tag(asn1)) return false;
}
/* write reqFlags */
if (token->reqFlags.length > 0) {
- asn1_push_tag(asn1, ASN1_CONTEXT(1));
- asn1_write_BitString(asn1, token->reqFlags.data,
+ if (!asn1_push_tag(asn1, ASN1_CONTEXT(1))) return false;
+ if (!asn1_write_BitString(asn1, token->reqFlags.data,
token->reqFlags.length,
- token->reqFlagsPadding);
- asn1_pop_tag(asn1);
+ token->reqFlagsPadding)) return false;
+ if (!asn1_pop_tag(asn1)) return false;
}
/* write mechToken */
if (token->mechToken.data) {
- asn1_push_tag(asn1, ASN1_CONTEXT(2));
- asn1_write_OctetString(asn1, token->mechToken.data,
- token->mechToken.length);
- asn1_pop_tag(asn1);
+ if (!asn1_push_tag(asn1, ASN1_CONTEXT(2))) return false;
+ if (!asn1_write_OctetString(asn1, token->mechToken.data,
+ token->mechToken.length)) return false;
+ if (!asn1_pop_tag(asn1)) return false;
}
/* write mechListMIC */
if (token->mechListMIC.data) {
- asn1_push_tag(asn1, ASN1_CONTEXT(3));
+ if (!asn1_push_tag(asn1, ASN1_CONTEXT(3))) return false;
#if 0
/* This is what RFC 2478 says ... */
asn1_write_OctetString(asn1, token->mechListMIC.data,
@@ -174,20 +175,20 @@ static bool write_negTokenInit(struct asn1_data *asn1, struct spnego_negTokenIni
#else
/* ... but unfortunately this is what Windows
sends/expects */
- asn1_push_tag(asn1, ASN1_SEQUENCE(0));
- asn1_push_tag(asn1, ASN1_CONTEXT(0));
- asn1_push_tag(asn1, ASN1_GENERAL_STRING);
- asn1_write(asn1, token->mechListMIC.data,
- token->mechListMIC.length);
- asn1_pop_tag(asn1);
- asn1_pop_tag(asn1);
- asn1_pop_tag(asn1);
+ if (!asn1_push_tag(asn1, ASN1_SEQUENCE(0))) return false;
+ if (!asn1_push_tag(asn1, ASN1_CONTEXT(0))) return false;
+ if (!asn1_push_tag(asn1, ASN1_GENERAL_STRING)) return false;
+ if (!asn1_write(asn1, token->mechListMIC.data,
+ token->mechListMIC.length)) return false;
+ if (!asn1_pop_tag(asn1)) return false;
+ if (!asn1_pop_tag(asn1)) return false;
+ if (!asn1_pop_tag(asn1)) return false;
#endif
- asn1_pop_tag(asn1);
+ if (!asn1_pop_tag(asn1)) return false;
}
- asn1_pop_tag(asn1);
- asn1_pop_tag(asn1);
+ if (!asn1_pop_tag(asn1)) return false;
+ if (!asn1_pop_tag(asn1)) return false;
return !asn1->has_error;
}
@@ -197,8 +198,8 @@ static bool read_negTokenTarg(struct asn1_data *asn1, TALLOC_CTX *mem_ctx,
{
ZERO_STRUCTP(token);
- asn1_start_tag(asn1, ASN1_CONTEXT(1));
- asn1_start_tag(asn1, ASN1_SEQUENCE(0));
+ if (!asn1_start_tag(asn1, ASN1_CONTEXT(1))) return false;
+ if (!asn1_start_tag(asn1, ASN1_SEQUENCE(0))) return false;
while (!asn1->has_error && 0 < asn1_tag_remaining(asn1)) {
uint8_t context;
@@ -210,27 +211,27 @@ static bool read_negTokenTarg(struct asn1_data *asn1, TALLOC_CTX *mem_ctx,
switch (context) {
case ASN1_CONTEXT(0):
- asn1_start_tag(asn1, ASN1_CONTEXT(0));
- asn1_start_tag(asn1, ASN1_ENUMERATED);
- asn1_read_uint8(asn1, &token->negResult);
- asn1_end_tag(asn1);
- asn1_end_tag(asn1);
+ if (!asn1_start_tag(asn1, ASN1_CONTEXT(0))) return false;
+ if (!asn1_start_tag(asn1, ASN1_ENUMERATED)) return false;
+ if (!asn1_read_uint8(asn1, &token->negResult)) return false;
+ if (!asn1_end_tag(asn1)) return false;
+ if (!asn1_end_tag(asn1)) return false;
break;
case ASN1_CONTEXT(1):
- asn1_start_tag(asn1, ASN1_CONTEXT(1));
- asn1_read_OID(asn1, mem_ctx, &oid);
+ if (!asn1_start_tag(asn1, ASN1_CONTEXT(1))) return false;
+ if (!asn1_read_OID(asn1, mem_ctx, &oid)) return false;
token->supportedMech = oid;
- asn1_end_tag(asn1);
+ if (!asn1_end_tag(asn1)) return false;
break;
case ASN1_CONTEXT(2):
- asn1_start_tag(asn1, ASN1_CONTEXT(2));
- asn1_read_OctetString(asn1, mem_ctx, &token->responseToken);
- asn1_end_tag(asn1);
+ if (!asn1_start_tag(asn1, ASN1_CONTEXT(2))) return false;
+ if (!asn1_read_OctetString(asn1, mem_ctx, &token->responseToken)) return false;
+ if (!asn1_end_tag(asn1)) return false;
break;
case ASN1_CONTEXT(3):
- asn1_start_tag(asn1, ASN1_CONTEXT(3));
- asn1_read_OctetString(asn1, mem_ctx, &token->mechListMIC);
- asn1_end_tag(asn1);
+ if (!asn1_start_tag(asn1, ASN1_CONTEXT(3))) return false;
+ if (!asn1_read_OctetString(asn1, mem_ctx, &token->mechListMIC)) return false;
+ if (!asn1_end_tag(asn1)) return false;
break;
default:
asn1->has_error = true;
@@ -238,45 +239,45 @@ static bool read_negTokenTarg(struct asn1_data *asn1, TALLOC_CTX *mem_ctx,
}
}
- asn1_end_tag(asn1);
- asn1_end_tag(asn1);
+ if (!asn1_end_tag(asn1)) return false;
+ if (!asn1_end_tag(asn1)) return false;
return !asn1->has_error;
}
static bool write_negTokenTarg(struct asn1_data *asn1, struct spnego_negTokenTarg *token)
{
- asn1_push_tag(asn1, ASN1_CONTEXT(1));
- asn1_push_tag(asn1, ASN1_SEQUENCE(0));
+ if (!asn1_push_tag(asn1, ASN1_CONTEXT(1))) return false;
+ if (!asn1_push_tag(asn1, ASN1_SEQUENCE(0))) return false;
if (token->negResult != SPNEGO_NONE_RESULT) {
- asn1_push_tag(asn1, ASN1_CONTEXT(0));
- asn1_write_enumerated(asn1, token->negResult);
- asn1_pop_tag(asn1);
+ if (!asn1_push_tag(asn1, ASN1_CONTEXT(0))) return false;
+ if (!asn1_write_enumerated(asn1, token->negResult)) return false;
+ if (!asn1_pop_tag(asn1)) return false;
}
if (token->supportedMech) {
- asn1_push_tag(asn1, ASN1_CONTEXT(1));
- asn1_write_OID(asn1, token->supportedMech);
- asn1_pop_tag(asn1);
+ if (!asn1_push_tag(asn1, ASN1_CONTEXT(1))) return false;
+ if (!asn1_write_OID(asn1, token->supportedMech)) return false;
+ if (!asn1_pop_tag(asn1)) return false;
}
if (token->responseToken.data) {
- asn1_push_tag(asn1, ASN1_CONTEXT(2));
- asn1_write_OctetString(asn1, token->responseToken.data,
- token->responseToken.length);
- asn1_pop_tag(asn1);
+ if (!asn1_push_tag(asn1, ASN1_CONTEXT(2))) return false;
+ if (!asn1_write_OctetString(asn1, token->responseToken.data,
+ token->responseToken.length)) return false;
+ if (!asn1_pop_tag(asn1)) return false;
}
if (token->mechListMIC.data) {
- asn1_push_tag(asn1, ASN1_CONTEXT(3));
- asn1_write_OctetString(asn1, token->mechListMIC.data,
- token->mechListMIC.length);
- asn1_pop_tag(asn1);
+ if (!asn1_push_tag(asn1, ASN1_CONTEXT(3))) return false;
+ if (!asn1_write_OctetString(asn1, token->mechListMIC.data,
+ token->mechListMIC.length)) return false;
+ if (!asn1_pop_tag(asn1)) return false;
}
- asn1_pop_tag(asn1);
- asn1_pop_tag(asn1);
+ if (!asn1_pop_tag(asn1)) return false;
+ if (!asn1_pop_tag(asn1)) return false;
return !asn1->has_error;
}
@@ -298,19 +299,19 @@ ssize_t spnego_read_data(TALLOC_CTX *mem_ctx, DATA_BLOB data, struct spnego_data
return -1;
}
- asn1_load(asn1, data);
+ if (!asn1_load(asn1, data)) goto err;
if (!asn1_peek_uint8(asn1, &context)) {
asn1->has_error = true;
} else {
switch (context) {
case ASN1_APPLICATION(0):
- asn1_start_tag(asn1, ASN1_APPLICATION(0));
- asn1_check_OID(asn1, OID_SPNEGO);
+ if (!asn1_start_tag(asn1, ASN1_APPLICATION(0))) goto err;
+ if (!asn1_check_OID(asn1, OID_SPNEGO)) goto err;
if (read_negTokenInit(asn1, mem_ctx, &token->negTokenInit)) {
token->type = SPNEGO_NEG_TOKEN_INIT;
}
- asn1_end_tag(asn1);
+ if (!asn1_end_tag(asn1)) goto err;
break;
case ASN1_CONTEXT(1):
if (read_negTokenTarg(asn1, mem_ctx, &token->negTokenTarg)) {
@@ -324,6 +325,9 @@ ssize_t spnego_read_data(TALLOC_CTX *mem_ctx, DATA_BLOB data, struct spnego_data
}
if (!asn1->has_error) ret = asn1->ofs;
+
+ err:
+
asn1_free(asn1);
return ret;
@@ -340,10 +344,10 @@ ssize_t spnego_write_data(TALLOC_CTX *mem_ctx, DATA_BLOB *blob, struct spnego_da
switch (spnego->type) {
case SPNEGO_NEG_TOKEN_INIT:
- asn1_push_tag(asn1, ASN1_APPLICATION(0));
- asn1_write_OID(asn1, OID_SPNEGO);
- write_negTokenInit(asn1, &spnego->negTokenInit);
- asn1_pop_tag(asn1);
+ if (!asn1_push_tag(asn1, ASN1_APPLICATION(0))) goto err;
+ if (!asn1_write_OID(asn1, OID_SPNEGO)) goto err;
+ if (!write_negTokenInit(asn1, &spnego->negTokenInit)) goto err;
+ if (!asn1_pop_tag(asn1)) goto err;
break;
case SPNEGO_NEG_TOKEN_TARG:
write_negTokenTarg(asn1, &spnego->negTokenTarg);
@@ -357,6 +361,9 @@ ssize_t spnego_write_data(TALLOC_CTX *mem_ctx, DATA_BLOB *blob, struct spnego_da
*blob = data_blob_talloc(mem_ctx, asn1->data, asn1->length);
ret = asn1->ofs;
}
+
+ err:
--
Samba Shared Repository
More information about the samba-cvs
mailing list