The Samba-Bugzilla – Attachment 11351 Details for
Bug 11128
ndr_push_error unexpected blob length is too large
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Possible patches for master
tmp.diff.txt (text/plain), 14.87 KB, created by
Stefan Metzmacher
on 2015-08-19 04:01:43 UTC
(
hide
)
Description:
Possible patches for master
Filename:
MIME Type:
Creator:
Stefan Metzmacher
Created:
2015-08-19 04:01:43 UTC
Size:
14.87 KB
patch
obsolete
>From 7fcef1881d14e163fc8d5ebb0d70f7edd0b35e38 Mon Sep 17 00:00:00 2001 >From: Stefan Metzmacher <metze@samba.org> >Date: Fri, 7 Aug 2015 11:36:47 +0200 >Subject: [PATCH 1/5] s4:librpc: python_dns and python_dcerpc_dnsp doesn't > require client bindings > >BUG: https://bugzilla.samba.org/show_bug.cgi?id=11128 > >Signed-off-by: Stefan Metzmacher <metze@samba.org> >--- > librpc/idl/dns.idl | 2 +- > librpc/idl/dnsp.idl | 4 ++-- > source4/librpc/wscript_build | 4 ++-- > 3 files changed, 5 insertions(+), 5 deletions(-) > >diff --git a/librpc/idl/dns.idl b/librpc/idl/dns.idl >index d247e0e..1183bd1 100644 >--- a/librpc/idl/dns.idl >+++ b/librpc/idl/dns.idl >@@ -270,7 +270,7 @@ interface dns > /* > this is a convenience hook for ndrdump > */ >- void decode_dns_name_packet( >+ [nopython] void decode_dns_name_packet( > [in] dns_name_packet packet > ); > } >diff --git a/librpc/idl/dnsp.idl b/librpc/idl/dnsp.idl >index 4c49001..d705cfc 100644 >--- a/librpc/idl/dnsp.idl >+++ b/librpc/idl/dnsp.idl >@@ -263,11 +263,11 @@ interface dnsp > /* > these are convenience hooks for ndrdump > */ >- void decode_DnssrvRpcRecord( >+ [nopython] void decode_DnssrvRpcRecord( > [in] dnsp_DnssrvRpcRecord blob > ); > >- void decode_DnsProperty( >+ [nopython] void decode_DnsProperty( > [in] dnsp_DnsProperty blob > ); > } >diff --git a/source4/librpc/wscript_build b/source4/librpc/wscript_build >index 781611e..4da3eaa 100755 >--- a/source4/librpc/wscript_build >+++ b/source4/librpc/wscript_build >@@ -167,7 +167,7 @@ bld.SAMBA_PYTHON('python_echo', > > bld.SAMBA_PYTHON('python_dns', > source='../../librpc/gen_ndr/py_dns.c', >- deps='RPC_NDR_DNS pytalloc-util pyrpc_util', >+ deps='NDR_DNS pytalloc-util pyrpc_util', > realname='samba/dcerpc/dns.so' > ) > >@@ -324,7 +324,7 @@ bld.SAMBA_PYTHON('python_dcerpc_drsblobs', > > bld.SAMBA_PYTHON('python_dcerpc_dnsp', > source='../../librpc/gen_ndr/py_dnsp.c', >- deps='pytalloc-util pyrpc_util NDR_SECURITY RPC_NDR_DNSP', >+ deps='pytalloc-util pyrpc_util NDR_SECURITY NDR_DNSP', > realname='samba/dcerpc/dnsp.so' > ) > >-- >1.9.1 > > >From a0f34de3e35d98daeea783ad4c668c86c31a3625 Mon Sep 17 00:00:00 2001 >From: Stefan Metzmacher <metze@samba.org> >Date: Fri, 7 Aug 2015 11:36:47 +0200 >Subject: [PATCH 2/5] librpc: add RPC_NDR_DNSSERVER to dcerpc-samba library > >RPC_NDR_DNSSERVER is the client interface NDR_DNSP contains just >marshalling helpers. > >BUG: https://bugzilla.samba.org/show_bug.cgi?id=11128 > >Signed-off-by: Stefan Metzmacher <metze@samba.org> >--- > librpc/wscript_build | 18 ++++-------------- > 1 file changed, 4 insertions(+), 14 deletions(-) > >diff --git a/librpc/wscript_build b/librpc/wscript_build >index 1594e72..244da21 100644 >--- a/librpc/wscript_build >+++ b/librpc/wscript_build >@@ -27,7 +27,7 @@ bld.SAMBA_SUBSYSTEM('NDR_NAMED_PIPE_AUTH', > > bld.SAMBA_SUBSYSTEM('NDR_DNSSERVER', > source='gen_ndr/ndr_dnsserver.c ndr/ndr_dnsserver.c', >- public_deps='ndr' >+ public_deps='ndr NDR_DNSP' > ) > > bld.SAMBA_SUBSYSTEM('NDR_DNS', >@@ -371,7 +371,7 @@ bld.SAMBA_LIBRARY('ndr-standard', > pc_files='ndr_standard.pc', > deps='''NDR_SECURITY NDR_LSA NDR_SAMR NDR_NETLOGON NDR_EVENTLOG NDR_DFS > NDR_NTSVCS NDR_SVCCTL NDR_INITSHUTDOWN NDR_WKSSVC NDR_SRVSVC NDR_WINREG >- NDR_ECHO security NDR_DNS NDR_ATSVC NDR_SPOOLSS NDR_DSSETUP >+ NDR_ECHO security NDR_DNS NDR_DNSP NDR_ATSVC NDR_SPOOLSS NDR_DSSETUP > NDR_SERVER_ID NDR_NOTIFY''', > public_deps='ndr', > public_headers='gen_ndr/samr.h gen_ndr/ndr_samr.h gen_ndr/lsa.h gen_ndr/netlogon.h gen_ndr/atsvc.h gen_ndr/ndr_atsvc.h gen_ndr/ndr_svcctl.h gen_ndr/svcctl.h', >@@ -453,11 +453,6 @@ bld.SAMBA_SUBSYSTEM('RPC_NDR_AUDIOSRV', > public_deps='NDR_AUDIOSRV dcerpc-binding' > ) > >-bld.SAMBA_SUBSYSTEM('RPC_NDR_DNS', >- source='gen_ndr/ndr_dns_c.c', >- public_deps='dcerpc-binding NDR_DNS' >- ) >- > bld.SAMBA_SUBSYSTEM('RPC_NDR_ECHO', > source='gen_ndr/ndr_echo_c.c', > public_deps='dcerpc-binding NDR_ECHO' >@@ -640,11 +635,6 @@ bld.SAMBA_SUBSYSTEM('RPC_NDR_BACKUPKEY', > public_deps='dcerpc-binding NDR_BACKUPKEY' > ) > >-bld.SAMBA_SUBSYSTEM('RPC_NDR_DNSP', >- source='gen_ndr/ndr_dnsp_c.c', >- public_deps='dcerpc-binding NDR_DNSP' >- ) >- > bld.SAMBA_SUBSYSTEM('RPC_NDR_DNSSERVER', > source='gen_ndr/ndr_dnsserver_c.c', > public_deps='dcerpc-binding ndr-standard' >@@ -679,7 +669,7 @@ bld.SAMBA_SUBSYSTEM('RPC_NDR_MDSSVC', > bld.SAMBA_LIBRARY('ndr-samba', > source=[], > deps='''NDR_DRSBLOBS NDR_DRSUAPI NDR_IDMAP NDR_NTLMSSP NDR_SCHANNEL NDR_MGMT >- NDR_DNSP NDR_EPMAPPER NDR_XATTR NDR_UNIXINFO NDR_NAMED_PIPE_AUTH NDR_DCOM >+ NDR_DNSSERVER NDR_EPMAPPER NDR_XATTR NDR_UNIXINFO NDR_NAMED_PIPE_AUTH NDR_DCOM > NDR_NTPRINTING NDR_FSRVP NDR_WITNESS NDR_MDSSVC NDR_OPEN_FILES NDR_SMBXSRV''', > private_library=True, > grouping_library=True >@@ -691,7 +681,7 @@ bld.SAMBA_LIBRARY('dcerpc-samba', > deps='''RPC_NDR_LSA RPC_NDR_SAMR RPC_NDR_NETLOGON RPC_NDR_EVENTLOG > RPC_NDR_DFS RPC_NDR_NTSVCS RPC_NDR_SVCCTL RPC_NDR_INITSHUTDOWN > RPC_NDR_WKSSVC RPC_NDR_SRVSVC RPC_NDR_WINREG RPC_NDR_ECHO RPC_NDR_EPMAPPER >- RPC_NDR_ATSVC RPC_NDR_SPOOLSS RPC_NDR_DNS''', >+ RPC_NDR_ATSVC RPC_NDR_SPOOLSS RPC_NDR_DNSSERVER''', > public_deps='ndr-standard', > private_library=True, > grouping_library=True >-- >1.9.1 > > >From fb48f030823ca23e11fcae714674724d56b38280 Mon Sep 17 00:00:00 2001 >From: Stefan Metzmacher <metze@samba.org> >Date: Fri, 7 Aug 2015 11:36:47 +0200 >Subject: [PATCH 3/5] librpc: add ndr_dnsp_string_list_copy() helper function > >BUG: https://bugzilla.samba.org/show_bug.cgi?id=11128 > >Signed-off-by: Stefan Metzmacher <metze@samba.org> >--- > librpc/ndr/ndr_dnsp.c | 24 ++++++++++++++++++++++++ > librpc/ndr/ndr_dnsp.h | 4 ++++ > 2 files changed, 28 insertions(+) > >diff --git a/librpc/ndr/ndr_dnsp.c b/librpc/ndr/ndr_dnsp.c >index 46141c1..3cb96f9 100644 >--- a/librpc/ndr/ndr_dnsp.c >+++ b/librpc/ndr/ndr_dnsp.c >@@ -222,3 +222,27 @@ enum ndr_err_code ndr_push_dnsp_string_list(struct ndr_push *ndr, int ndr_flags, > } > return NDR_ERR_SUCCESS; > } >+ >+enum ndr_err_code ndr_dnsp_string_list_copy(TALLOC_CTX *mem_ctx, >+ const struct dnsp_string_list *src, >+ struct dnsp_string_list *dst) >+{ >+ size_t i; >+ >+ dst->count = 0; >+ dst->str = talloc_zero_array(mem_ctx, const char *, src->count); >+ if (dst->str == NULL) { >+ return NDR_ERR_ALLOC; >+ } >+ >+ for (i = 0; i < src->count; i++) { >+ dst->str[i] = talloc_strdup(dst->str, src->str[i]); >+ if (dst->str[i] == NULL) { >+ TALLOC_FREE(dst->str); >+ return NDR_ERR_ALLOC; >+ } >+ } >+ >+ dst->count = src->count; >+ return NDR_ERR_SUCCESS; >+} >diff --git a/librpc/ndr/ndr_dnsp.h b/librpc/ndr/ndr_dnsp.h >index 67f952c..0d56633 100644 >--- a/librpc/ndr/ndr_dnsp.h >+++ b/librpc/ndr/ndr_dnsp.h >@@ -27,3 +27,7 @@ void ndr_print_dnsp_string(struct ndr_print *ndr, const char *name, > const char *dns_string); > enum ndr_err_code ndr_pull_dnsp_string(struct ndr_pull *ndr, int ndr_flags, const char **string); > enum ndr_err_code ndr_push_dnsp_string(struct ndr_push *ndr, int ndr_flags, const char *string); >+ >+enum ndr_err_code ndr_dnsp_string_list_copy(TALLOC_CTX *mem_ctx, >+ const struct dnsp_string_list *src, >+ struct dnsp_string_list *dst); >-- >1.9.1 > > >From c7bb38d1ae7583a787bd82ab10c7709d3f2b6c39 Mon Sep 17 00:00:00 2001 >From: Stefan Metzmacher <metze@samba.org> >Date: Fri, 7 Aug 2015 11:36:47 +0200 >Subject: [PATCH 4/5] s4:dns_server: fix idl for dns_txt_record > >From RFC 1035: > > 3.3.14. TXT RDATA format > > +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ > / TXT-DATA / > +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ > > where: > > TXT-DATA One or more <character-string>s. > > TXT RRs are used to hold descriptive text. The semantics of the text > depends on the domain where it is found. > >Each record contains an array of strings instead of just one string. > >BUG: https://bugzilla.samba.org/show_bug.cgi?id=11128 > >Signed-off-by: Stefan Metzmacher <metze@samba.org> >--- > librpc/idl/dns.idl | 7 +++---- > librpc/ndr/ndr_dns.c | 27 +++++++++++++++++++++++++++ > librpc/wscript_build | 2 +- > source4/dns_server/dns_query.c | 15 ++++++--------- > source4/dns_server/dns_update.c | 31 ++++++------------------------- > 5 files changed, 43 insertions(+), 39 deletions(-) > >diff --git a/librpc/idl/dns.idl b/librpc/idl/dns.idl >index 1183bd1..918073c 100644 >--- a/librpc/idl/dns.idl >+++ b/librpc/idl/dns.idl >@@ -8,7 +8,7 @@ > encoding if it doesn't work out > */ > >-import "misc.idl"; >+import "misc.idl", "dnsp.idl"; > [ > helper("librpc/ndr/ndr_dns.h"), > helpstring("DNS records"), >@@ -163,9 +163,8 @@ interface dns > dns_string exchange; > } dns_mx_record; > >- typedef [public] struct { >- [value(strlen(txt))] uint8 length; >- [charset(DOS)] uint8 txt[length]; >+ typedef [public,nopull] struct { >+ dnsp_string_list txt; > } dns_txt_record; > > typedef [public] struct { >diff --git a/librpc/ndr/ndr_dns.c b/librpc/ndr/ndr_dns.c >index 0b9e3b0..065d992 100644 >--- a/librpc/ndr/ndr_dns.c >+++ b/librpc/ndr/ndr_dns.c >@@ -30,6 +30,7 @@ > #include "includes.h" > #include "librpc/gen_ndr/ndr_dns.h" > #include "librpc/gen_ndr/ndr_misc.h" >+#include "librpc/gen_ndr/ndr_dnsp.h" > #include "system/locale.h" > #include "lib/util/util_net.h" > >@@ -230,6 +231,29 @@ _PUBLIC_ enum ndr_err_code ndr_push_dns_string(struct ndr_push *ndr, > return ndr_push_bytes(ndr, (const uint8_t *)"", 1); > } > >+_PUBLIC_ enum ndr_err_code ndr_pull_dns_txt_record(struct ndr_pull *ndr, int ndr_flags, struct dns_txt_record *r) >+{ >+ NDR_PULL_CHECK_FLAGS(ndr, ndr_flags); >+ if (ndr_flags & NDR_SCALARS) { >+ enum ndr_err_code ndr_err; >+ uint32_t data_size = ndr->data_size; >+ uint32_t record_size = 0; >+ ndr_err = ndr_token_retrieve(&ndr->array_size_list, r, >+ &record_size); >+ if (NDR_ERR_CODE_IS_SUCCESS(ndr_err)) { >+ NDR_PULL_NEED_BYTES(ndr, record_size); >+ ndr->data_size = ndr->offset + record_size; >+ } >+ NDR_CHECK(ndr_pull_align(ndr, 1)); >+ NDR_CHECK(ndr_pull_dnsp_string_list(ndr, NDR_SCALARS, &r->txt)); >+ NDR_CHECK(ndr_pull_trailer_align(ndr, 1)); >+ ndr->data_size = data_size; >+ } >+ if (ndr_flags & NDR_BUFFERS) { >+ } >+ return NDR_ERR_SUCCESS; >+} >+ > _PUBLIC_ enum ndr_err_code ndr_push_dns_res_rec(struct ndr_push *ndr, > int ndr_flags, > const struct dns_res_rec *r) >@@ -302,6 +326,9 @@ _PUBLIC_ enum ndr_err_code ndr_pull_dns_res_rec(struct ndr_pull *ndr, > NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->length)); > _saved_offset1 = ndr->offset; > if (r->length > 0) { >+ NDR_CHECK(ndr_token_store(ndr, &ndr->array_size_list, >+ &r->rdata, >+ r->length)); > NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->rdata, > r->rr_type)); > NDR_CHECK(ndr_pull_dns_rdata(ndr, NDR_SCALARS, >diff --git a/librpc/wscript_build b/librpc/wscript_build >index 244da21..d376bec 100644 >--- a/librpc/wscript_build >+++ b/librpc/wscript_build >@@ -32,7 +32,7 @@ bld.SAMBA_SUBSYSTEM('NDR_DNSSERVER', > > bld.SAMBA_SUBSYSTEM('NDR_DNS', > source='gen_ndr/ndr_dns.c ndr/ndr_dns.c', >- public_deps='ndr' >+ public_deps='ndr NDR_DNSP' > ) > > bld.SAMBA_SUBSYSTEM('NDR_DSBACKUP', >diff --git a/source4/dns_server/dns_query.c b/source4/dns_server/dns_query.c >index 89cfd64..9708d07 100644 >--- a/source4/dns_server/dns_query.c >+++ b/source4/dns_server/dns_query.c >@@ -46,8 +46,7 @@ static WERROR create_response_rr(const char *name, > { > struct dns_res_rec *ans = *answers; > uint16_t ai = *ancount; >- char *tmp; >- uint32_t i; >+ enum ndr_err_code ndr_err; > > ZERO_STRUCT(ans[ai]); > >@@ -102,14 +101,12 @@ static WERROR create_response_rr(const char *name, > } > break; > case DNS_QTYPE_TXT: >- tmp = talloc_asprintf(ans, "\"%s\"", rec->data.txt.str[0]); >- W_ERROR_HAVE_NO_MEMORY(tmp); >- for (i=1; i<rec->data.txt.count; i++) { >- tmp = talloc_asprintf_append_buffer( >- tmp, " \"%s\"", rec->data.txt.str[i]); >- W_ERROR_HAVE_NO_MEMORY(tmp); >+ ndr_err = ndr_dnsp_string_list_copy(ans, >+ &rec->data.txt, >+ &ans[ai].rdata.txt_record.txt); >+ if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) { >+ return WERR_NOMEM; > } >- ans[ai].rdata.txt_record.txt = tmp; > break; > default: > DEBUG(0, ("Got unhandled type %u query.\n", rec->wType)); >diff --git a/source4/dns_server/dns_update.c b/source4/dns_server/dns_update.c >index c002b4d..60a4b36 100644 >--- a/source4/dns_server/dns_update.c >+++ b/source4/dns_server/dns_update.c >@@ -299,9 +299,7 @@ static WERROR dns_rr_to_dnsp(TALLOC_CTX *mem_ctx, > const struct dns_res_rec *rrec, > struct dnsp_DnssrvRpcRecord *r) > { >- char *tmp; >- char *txt_record_txt; >- char *saveptr = NULL; >+ enum ndr_err_code ndr_err; > > if (rrec->rr_type == DNS_QTYPE_ALL) { > return DNS_ERR(FORMAT_ERROR); >@@ -354,28 +352,11 @@ static WERROR dns_rr_to_dnsp(TALLOC_CTX *mem_ctx, > W_ERROR_HAVE_NO_MEMORY(r->data.mx.nameTarget); > break; > case DNS_QTYPE_TXT: >- r->data.txt.count = 0; >- r->data.txt.str = talloc_array(mem_ctx, const char *, >- r->data.txt.count); >- W_ERROR_HAVE_NO_MEMORY(r->data.txt.str); >- >- txt_record_txt = talloc_strdup(r->data.txt.str, >- rrec->rdata.txt_record.txt); >- W_ERROR_HAVE_NO_MEMORY(txt_record_txt); >- >- tmp = strtok_r(txt_record_txt, "\"", &saveptr); >- while (tmp) { >- if (strcmp(tmp, " ") == 0) { >- tmp = strtok_r(NULL, "\"", &saveptr); >- continue; >- } >- r->data.txt.str = talloc_realloc(mem_ctx, r->data.txt.str, const char *, >- r->data.txt.count+1); >- r->data.txt.str[r->data.txt.count] = talloc_strdup(r->data.txt.str, tmp); >- W_ERROR_HAVE_NO_MEMORY(r->data.txt.str[r->data.txt.count]); >- >- r->data.txt.count++; >- tmp = strtok_r(NULL, "\"", &saveptr); >+ ndr_err = ndr_dnsp_string_list_copy(mem_ctx, >+ &rrec->rdata.txt_record.txt, >+ &r->data.txt); >+ if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) { >+ return WERR_NOMEM; > } > > break; >-- >1.9.1 > > >From 3648dd87f038a18fb7a67c6721fd8752f8093aab Mon Sep 17 00:00:00 2001 >From: Stefan Metzmacher <metze@samba.org> >Date: Fri, 7 Aug 2015 11:36:47 +0200 >Subject: [PATCH 5/5] dns.idl: make use of dnsp_hinfo > >Signed-off-by: Stefan Metzmacher <metze@samba.org> >--- > librpc/idl/dns.idl | 9 +-------- > 1 file changed, 1 insertion(+), 8 deletions(-) > >diff --git a/librpc/idl/dns.idl b/librpc/idl/dns.idl >index 918073c..5435fcf 100644 >--- a/librpc/idl/dns.idl >+++ b/librpc/idl/dns.idl >@@ -152,13 +152,6 @@ interface dns > } dns_soa_record; > > typedef [public] struct { >- [value(strlen(cpu))] uint8 cpu_length; >- [charset(DOS)] uint8 cpu[cpu_length]; >- [value(strlen(os))] uint8 os_length; >- [charset(DOS)] uint8 os[os_length]; >- } dns_hinfo_record; >- >- typedef [public] struct { > uint16 preference; > dns_string exchange; > } dns_mx_record; >@@ -231,7 +224,7 @@ interface dns > [case(DNS_QTYPE_CNAME)] dns_string cname_record; > [case(DNS_QTYPE_SOA)] dns_soa_record soa_record; > [case(DNS_QTYPE_PTR)] dns_string ptr_record; >- [case(DNS_QTYPE_HINFO)] dns_hinfo_record hinfo_record; >+ [case(DNS_QTYPE_HINFO)] dnsp_hinfo hinfo_record; > [case(DNS_QTYPE_MX)] dns_mx_record mx_record; > [case(DNS_QTYPE_TXT)] dns_txt_record txt_record; > [case(DNS_QTYPE_RP)] dns_rp_record rp_record; >-- >1.9.1 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Flags:
metze
:
review?
(
kai
)
slow
:
review?
(
slow
)
metze
:
review?
(
garming
)
metze
:
review?
(
abartlet
)
Actions:
View
Attachments on
bug 11128
:
10872
| 11351