mirror of
https://github.com/samba-team/samba.git
synced 2025-02-23 09:57:40 +03:00
dnsp: Parse TXT records
This commit is contained in:
parent
da21f78099
commit
65d2cfdcf1
@ -40,6 +40,7 @@ interface dnsp
|
||||
DNS_TYPE_HINFO = 0xD,
|
||||
DNS_TYPE_MINFO = 0xE,
|
||||
DNS_TYPE_MX = 0xF,
|
||||
DNS_TYPE_TXT = 0x10,
|
||||
DNS_TYPE_RP = 0x11,
|
||||
DNS_TYPE_AFSDB = 0x12,
|
||||
DNS_TYPE_X25 = 0x13,
|
||||
@ -92,6 +93,7 @@ interface dnsp
|
||||
[case(DNS_TYPE_CNAME)] dnsp_name cname;
|
||||
[case(DNS_TYPE_SOA)] [flag(NDR_BIG_ENDIAN)] dnsp_soa soa;
|
||||
[case(DNS_TYPE_MX)] [flag(NDR_BIG_ENDIAN)] dnsp_mx mx;
|
||||
[case(DNS_TYPE_TXT)] dnsp_string txt;
|
||||
[case(DNS_TYPE_PTR)] dnsp_name ptr;
|
||||
[case(DNS_TYPE_AAAA)] ipv6address ip;
|
||||
[case(DNS_TYPE_SRV)] [flag(NDR_BIG_ENDIAN)] dnsp_srv srv;
|
||||
|
@ -98,3 +98,55 @@ enum ndr_err_code ndr_push_dnsp_name(struct ndr_push *ndr, int ndr_flags, const
|
||||
|
||||
return NDR_ERR_SUCCESS;
|
||||
}
|
||||
|
||||
/*
|
||||
print a dnsp_string
|
||||
*/
|
||||
_PUBLIC_ void ndr_print_dnsp_string(struct ndr_print *ndr, const char *name,
|
||||
const char *dns_string)
|
||||
{
|
||||
ndr->print(ndr, "%-25s: %s", name, dns_string);
|
||||
}
|
||||
|
||||
/*
|
||||
pull a dnsp_string
|
||||
*/
|
||||
_PUBLIC_ enum ndr_err_code ndr_pull_dnsp_string(struct ndr_pull *ndr, int ndr_flags, const char **string)
|
||||
{
|
||||
uint8_t len;
|
||||
uint32_t total_len;
|
||||
char *ret;
|
||||
|
||||
NDR_CHECK(ndr_pull_uint8(ndr, ndr_flags, &len));
|
||||
|
||||
ret = talloc_strdup(ndr->current_mem_ctx, "");
|
||||
if (!ret) {
|
||||
return ndr_pull_error(ndr, NDR_ERR_ALLOC, "Failed to pull dnsp");
|
||||
}
|
||||
total_len = 1;
|
||||
ret = talloc_zero_array(ndr->current_mem_ctx, char, len+1);
|
||||
if (!ret) {
|
||||
return ndr_pull_error(ndr, NDR_ERR_ALLOC, "Failed to pull dnsp");
|
||||
}
|
||||
NDR_CHECK(ndr_pull_bytes(ndr, (uint8_t *)&ret[total_len-1], len));
|
||||
total_len = len;
|
||||
|
||||
(*string) = ret;
|
||||
NDR_PULL_ALIGN(ndr, 1);
|
||||
return NDR_ERR_SUCCESS;
|
||||
}
|
||||
|
||||
enum ndr_err_code ndr_push_dnsp_string(struct ndr_push *ndr, int ndr_flags, const char *string)
|
||||
{
|
||||
int total_len;
|
||||
total_len = strlen(string) + 1;
|
||||
if (total_len > 255) {
|
||||
return ndr_push_error(ndr, NDR_ERR_BUFSIZE,
|
||||
"dns_name of length %d larger than 255", total_len);
|
||||
}
|
||||
NDR_CHECK(ndr_push_uint8(ndr, ndr_flags, (uint8_t)total_len));
|
||||
NDR_CHECK(ndr_push_bytes(ndr, (const uint8_t *)string, total_len - 1));
|
||||
NDR_PUSH_ALIGN(ndr, 1);
|
||||
|
||||
return NDR_ERR_SUCCESS;
|
||||
}
|
||||
|
@ -23,3 +23,7 @@ void ndr_print_dnsp_name(struct ndr_print *ndr, const char *name,
|
||||
const char *dns_name);
|
||||
enum ndr_err_code ndr_pull_dnsp_name(struct ndr_pull *ndr, int ndr_flags, const char **name);
|
||||
enum ndr_err_code ndr_push_dnsp_name(struct ndr_push *ndr, int ndr_flags, const char *name);
|
||||
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);
|
||||
|
@ -76,7 +76,8 @@ my $scalar_alignment = {
|
||||
'wrepl_nbt_name' => 4,
|
||||
'ipv4address' => 4,
|
||||
'ipv6address' => 4, #16?
|
||||
'dnsp_name' => 1
|
||||
'dnsp_name' => 1,
|
||||
'dnsp_string' => 1
|
||||
};
|
||||
|
||||
sub GetElementLevelTable($$)
|
||||
|
@ -931,6 +931,10 @@ sub ConvertObjectFromPythonData($$$$$$;$)
|
||||
return;
|
||||
}
|
||||
|
||||
if ($actual_ctype->{TYPE} eq "SCALAR" and $actual_ctype->{NAME} eq "dnsp_string") {
|
||||
$self->pidl("$target = PyString_AS_STRING($cvar);");
|
||||
return;
|
||||
}
|
||||
|
||||
if ($actual_ctype->{TYPE} eq "SCALAR" and $actual_ctype->{NAME} eq "NTSTATUS") {
|
||||
$self->pidl("$target = NT_STATUS(PyInt_AsLong($cvar));");
|
||||
@ -1095,6 +1099,7 @@ sub ConvertScalarToPython($$$)
|
||||
if ($ctypename eq "ipv4address") { return "PyString_FromString_check_null($cvar)"; }
|
||||
if ($ctypename eq "ipv6address") { return "PyString_FromString_check_null($cvar)"; }
|
||||
if ($ctypename eq "dnsp_name") { return "PyString_FromString_check_null($cvar)"; }
|
||||
if ($ctypename eq "dnsp_string") { return "PyString_FromString_check_null($cvar)"; }
|
||||
if ($ctypename eq "pointer") {
|
||||
return "PyCObject_FromTallocPtr($cvar)";
|
||||
}
|
||||
|
@ -59,6 +59,7 @@ my %scalars = (
|
||||
"ipv4address" => "const char *",
|
||||
"ipv6address" => "const char *",
|
||||
"dnsp_name" => "const char *",
|
||||
"dnsp_string" => "const char *",
|
||||
);
|
||||
|
||||
my %aliases = (
|
||||
|
Loading…
x
Reference in New Issue
Block a user