svn commit: samba r23036 - in branches/SAMBA_4_0/source:
auth/gensec auth/kerberos ldap_server libcli/cldap
libcli/ldap libcli/util
tridge at samba.org
tridge at samba.org
Mon May 21 12:47:20 GMT 2007
Author: tridge
Date: 2007-05-21 12:47:18 +0000 (Mon, 21 May 2007)
New Revision: 23036
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=23036
Log:
error checking on asn1_init() failure
Modified:
branches/SAMBA_4_0/source/auth/gensec/spnego_parse.c
branches/SAMBA_4_0/source/auth/kerberos/gssapi_parse.c
branches/SAMBA_4_0/source/ldap_server/ldap_server.c
branches/SAMBA_4_0/source/libcli/cldap/cldap.c
branches/SAMBA_4_0/source/libcli/ldap/ldap.c
branches/SAMBA_4_0/source/libcli/ldap/ldap_client.c
branches/SAMBA_4_0/source/libcli/ldap/ldap_controls.c
branches/SAMBA_4_0/source/libcli/util/asn1.c
Changeset:
Modified: branches/SAMBA_4_0/source/auth/gensec/spnego_parse.c
===================================================================
--- branches/SAMBA_4_0/source/auth/gensec/spnego_parse.c 2007-05-21 12:03:15 UTC (rev 23035)
+++ branches/SAMBA_4_0/source/auth/gensec/spnego_parse.c 2007-05-21 12:47:18 UTC (rev 23036)
@@ -265,7 +265,7 @@
ssize_t spnego_read_data(TALLOC_CTX *mem_ctx, DATA_BLOB data, struct spnego_data *token)
{
- struct asn1_data *asn1 = asn1_init(mem_ctx);
+ struct asn1_data *asn1;
ssize_t ret = -1;
uint8_t context;
@@ -275,6 +275,11 @@
return ret;
}
+ asn1 = asn1_init(mem_ctx);
+ if (asn1 == NULL) {
+ return -1;
+ }
+
asn1_load(asn1, data);
if (!asn1_peek_uint8(asn1, &context)) {
@@ -311,6 +316,10 @@
struct asn1_data *asn1 = asn1_init(mem_ctx);
ssize_t ret = -1;
+ if (asn1 == NULL) {
+ return -1;
+ }
+
switch (spnego->type) {
case SPNEGO_NEG_TOKEN_INIT:
asn1_push_tag(asn1, ASN1_APPLICATION(0));
Modified: branches/SAMBA_4_0/source/auth/kerberos/gssapi_parse.c
===================================================================
--- branches/SAMBA_4_0/source/auth/kerberos/gssapi_parse.c 2007-05-21 12:03:15 UTC (rev 23035)
+++ branches/SAMBA_4_0/source/auth/kerberos/gssapi_parse.c 2007-05-21 12:47:18 UTC (rev 23036)
@@ -31,13 +31,18 @@
*/
DATA_BLOB gensec_gssapi_gen_krb5_wrap(TALLOC_CTX *mem_ctx, const DATA_BLOB *ticket, const uint8_t tok_id[2])
{
- struct asn1_data *data = asn1_init(mem_ctx);
+ struct asn1_data *data;
DATA_BLOB ret;
if (!data || !ticket->data) {
return data_blob(NULL,0);
}
+ data = asn1_init(mem_ctx);
+ if (data == NULL) {
+ return data_blob(NULL,0);
+ }
+
asn1_push_tag(data, ASN1_APPLICATION(0));
asn1_write_OID(data, GENSEC_OID_KERBEROS5);
@@ -66,6 +71,10 @@
struct asn1_data *data = asn1_init(mem_ctx);
int data_remaining;
+ if (!data) {
+ return False;
+ }
+
asn1_load(data, *blob);
asn1_start_tag(data, ASN1_APPLICATION(0));
asn1_check_OID(data, GENSEC_OID_KERBEROS5);
@@ -99,6 +108,8 @@
BOOL ret;
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);
Modified: branches/SAMBA_4_0/source/ldap_server/ldap_server.c
===================================================================
--- branches/SAMBA_4_0/source/ldap_server/ldap_server.c 2007-05-21 12:03:15 UTC (rev 23035)
+++ branches/SAMBA_4_0/source/ldap_server/ldap_server.c 2007-05-21 12:47:18 UTC (rev 23036)
@@ -137,11 +137,13 @@
struct asn1_data *asn1 = asn1_init(conn);
struct ldap_message *msg = talloc(conn, struct ldap_message);
- if (msg == NULL) {
+ if (asn1 == NULL || msg == NULL) {
return NT_STATUS_NO_MEMORY;
}
if (!asn1_load(asn1, blob)) {
+ talloc_free(msg);
+ talloc_free(asn1);
return NT_STATUS_NO_MEMORY;
}
Modified: branches/SAMBA_4_0/source/libcli/cldap/cldap.c
===================================================================
--- branches/SAMBA_4_0/source/libcli/cldap/cldap.c 2007-05-21 12:03:15 UTC (rev 23035)
+++ branches/SAMBA_4_0/source/libcli/cldap/cldap.c 2007-05-21 12:47:18 UTC (rev 23036)
@@ -70,6 +70,8 @@
struct ldap_message *ldap_msg;
struct cldap_request *req;
+ if (!asn1) return;
+
status = socket_pending(cldap->sock, &dsize);
if (!NT_STATUS_IS_OK(status)) {
talloc_free(tmp_ctx);
Modified: branches/SAMBA_4_0/source/libcli/ldap/ldap.c
===================================================================
--- branches/SAMBA_4_0/source/libcli/ldap/ldap.c 2007-05-21 12:03:15 UTC (rev 23035)
+++ branches/SAMBA_4_0/source/libcli/ldap/ldap.c 2007-05-21 12:47:18 UTC (rev 23036)
@@ -193,6 +193,8 @@
struct asn1_data *data = asn1_init(mem_ctx);
int i, j;
+ if (!data) return False;
+
asn1_push_tag(data, ASN1_SEQUENCE(0));
asn1_write_Integer(data, msg->messageid);
Modified: branches/SAMBA_4_0/source/libcli/ldap/ldap_client.c
===================================================================
--- branches/SAMBA_4_0/source/libcli/ldap/ldap_client.c 2007-05-21 12:03:15 UTC (rev 23035)
+++ branches/SAMBA_4_0/source/libcli/ldap/ldap_client.c 2007-05-21 12:47:18 UTC (rev 23036)
@@ -175,11 +175,13 @@
struct ldap_message *msg = talloc(conn, struct ldap_message);
struct asn1_data *asn1 = asn1_init(conn);
- if (msg == NULL) {
+ if (asn1 == NULL || msg == NULL) {
return NT_STATUS_LDAP(LDAP_PROTOCOL_ERROR);
}
if (!asn1_load(asn1, blob)) {
+ talloc_free(msg);
+ talloc_free(asn1);
return NT_STATUS_LDAP(LDAP_PROTOCOL_ERROR);
}
Modified: branches/SAMBA_4_0/source/libcli/ldap/ldap_controls.c
===================================================================
--- branches/SAMBA_4_0/source/libcli/ldap/ldap_controls.c 2007-05-21 12:03:15 UTC (rev 23035)
+++ branches/SAMBA_4_0/source/libcli/ldap/ldap_controls.c 2007-05-21 12:47:18 UTC (rev 23036)
@@ -37,6 +37,8 @@
struct asn1_data *data = asn1_init(mem_ctx);
struct ldb_sort_resp_control *lsrc;
+ if (!data) return False;
+
if (!asn1_load(data, in)) {
return False;
}
@@ -82,6 +84,8 @@
struct ldb_server_sort_control **lssc;
int num;
+ if (!data) return False;
+
if (!asn1_load(data, in)) {
return False;
}
@@ -156,6 +160,8 @@
struct asn1_data *data = asn1_init(mem_ctx);
struct ldb_extended_dn_control *ledc;
+ if (!data) return False;
+
if (!asn1_load(data, in)) {
return False;
}
@@ -187,6 +193,8 @@
struct asn1_data *data = asn1_init(mem_ctx);
struct ldb_sd_flags_control *lsdfc;
+ if (!data) return False;
+
if (!asn1_load(data, in)) {
return False;
}
@@ -218,6 +226,8 @@
struct asn1_data *data = asn1_init(mem_ctx);
struct ldb_search_options_control *lsoc;
+ if (!data) return False;
+
if (!asn1_load(data, in)) {
return False;
}
@@ -250,6 +260,8 @@
struct asn1_data *data = asn1_init(mem_ctx);
struct ldb_paged_control *lprc;
+ if (!data) return False;
+
if (!asn1_load(data, in)) {
return False;
}
@@ -296,6 +308,8 @@
struct asn1_data *data = asn1_init(mem_ctx);
struct ldb_dirsync_control *ldc;
+ if (!data) return False;
+
if (!asn1_load(data, in)) {
return False;
}
@@ -349,6 +363,8 @@
struct asn1_data *data = asn1_init(mem_ctx);
struct ldb_asq_control *lac;
+ if (!data) return False;
+
if (!asn1_load(data, in)) {
return False;
}
@@ -452,6 +468,8 @@
struct asn1_data *data = asn1_init(mem_ctx);
struct ldb_vlv_req_control *lvrc;
+ if (!data) return False;
+
if (!asn1_load(data, in)) {
return False;
}
@@ -562,6 +580,8 @@
struct asn1_data *data = asn1_init(mem_ctx);
struct ldb_vlv_resp_control *lvrc;
+ if (!data) return False;
+
if (!asn1_load(data, in)) {
return False;
}
@@ -615,6 +635,8 @@
struct ldb_sort_resp_control *lsrc = talloc_get_type(in, struct ldb_sort_resp_control);
struct asn1_data *data = asn1_init(mem_ctx);
+ if (!data) return False;
+
if (!asn1_push_tag(data, ASN1_SEQUENCE(0))) {
return False;
}
@@ -648,6 +670,8 @@
struct asn1_data *data = asn1_init(mem_ctx);
int num;
+ if (!data) return False;
+
if (!asn1_push_tag(data, ASN1_SEQUENCE(0))) {
return False;
}
@@ -696,6 +720,8 @@
struct ldb_extended_dn_control *ledc = talloc_get_type(in, struct ldb_extended_dn_control);
struct asn1_data *data = asn1_init(mem_ctx);
+ if (!data) return False;
+
if (!asn1_push_tag(data, ASN1_SEQUENCE(0))) {
return False;
}
@@ -722,6 +748,8 @@
struct ldb_sd_flags_control *lsdfc = talloc_get_type(in, struct ldb_sd_flags_control);
struct asn1_data *data = asn1_init(mem_ctx);
+ if (!data) return False;
+
if (!asn1_push_tag(data, ASN1_SEQUENCE(0))) {
return False;
}
@@ -748,6 +776,8 @@
struct ldb_search_options_control *lsoc = talloc_get_type(in, struct ldb_search_options_control);
struct asn1_data *data = asn1_init(mem_ctx);
+ if (!data) return False;
+
if (!asn1_push_tag(data, ASN1_SEQUENCE(0))) {
return False;
}
@@ -774,6 +804,8 @@
struct ldb_paged_control *lprc = talloc_get_type(in, struct ldb_paged_control);
struct asn1_data *data = asn1_init(mem_ctx);
+ if (!data) return False;
+
if (!asn1_push_tag(data, ASN1_SEQUENCE(0))) {
return False;
}
@@ -807,6 +839,8 @@
struct ldb_asq_control *lac = talloc_get_type(in, struct ldb_asq_control);
struct asn1_data *data = asn1_init(mem_ctx);
+ if (!data) return False;
+
if (!asn1_push_tag(data, ASN1_SEQUENCE(0))) {
return False;
}
@@ -840,6 +874,8 @@
struct ldb_dirsync_control *ldc = talloc_get_type(in, struct ldb_dirsync_control);
struct asn1_data *data = asn1_init(mem_ctx);
+ if (!data) return False;
+
if (!asn1_push_tag(data, ASN1_SEQUENCE(0))) {
return False;
}
@@ -924,6 +960,8 @@
struct ldb_vlv_req_control *lvrc = talloc_get_type(in, struct ldb_vlv_req_control);
struct asn1_data *data = asn1_init(mem_ctx);
+ if (!data) return False;
+
if (!asn1_push_tag(data, ASN1_SEQUENCE(0))) {
return False;
}
@@ -998,6 +1036,8 @@
struct ldb_vlv_resp_control *lvrc = talloc_get_type(in, struct ldb_vlv_resp_control);
struct asn1_data *data = asn1_init(mem_ctx);
+ if (!data) return False;
+
if (!asn1_push_tag(data, ASN1_SEQUENCE(0))) {
return False;
}
Modified: branches/SAMBA_4_0/source/libcli/util/asn1.c
===================================================================
--- branches/SAMBA_4_0/source/libcli/util/asn1.c 2007-05-21 12:03:15 UTC (rev 23035)
+++ branches/SAMBA_4_0/source/libcli/util/asn1.c 2007-05-21 12:47:18 UTC (rev 23036)
@@ -24,7 +24,11 @@
/* allocate an asn1 structure */
struct asn1_data *asn1_init(TALLOC_CTX *mem_ctx)
{
- return talloc_zero(NULL, struct asn1_data);
+ struct asn1_data *ret = talloc_zero(NULL, struct asn1_data);
+ if (ret == NULL) {
+ DEBUG(0,("asn1_init failed! out of memory\n"));
+ }
+ return ret;
}
/* free an asn1 structure */
More information about the samba-cvs
mailing list