minfo_14.c revision 5d51e67c3b4f35c1be742574aacc1d88fe6ed444
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews/*
dafcb997e390efa4423883dafd100c975c4095d6Mark Andrews * Copyright (C) 1998 Internet Software Consortium.
dafcb997e390efa4423883dafd100c975c4095d6Mark Andrews *
40f53fa8d9c6a4fc38c0014495e7a42b08f52481David Lawrence * Permission to use, copy, modify, and distribute this software for any
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews * purpose with or without fee is hereby granted, provided that the above
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews * copyright notice and this permission notice appear in all copies.
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews *
40f53fa8d9c6a4fc38c0014495e7a42b08f52481David Lawrence * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
dafcb997e390efa4423883dafd100c975c4095d6Mark Andrews * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
dafcb997e390efa4423883dafd100c975c4095d6Mark Andrews * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
dafcb997e390efa4423883dafd100c975c4095d6Mark Andrews * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
dafcb997e390efa4423883dafd100c975c4095d6Mark Andrews * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
dafcb997e390efa4423883dafd100c975c4095d6Mark Andrews * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
dafcb997e390efa4423883dafd100c975c4095d6Mark Andrews * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
dafcb997e390efa4423883dafd100c975c4095d6Mark Andrews * SOFTWARE.
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews */
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews
ab023a65562e62b85a824509d829b6fad87e00b1Rob Austein#ifndef RDATA_TYPE_14_MINFO_H
ecd3b66f8c4544a55dd44fddda7c7134b936cd3bJames Brister#define RDATA_TYPE_14_MINFO_H
ecd3b66f8c4544a55dd44fddda7c7134b936cd3bJames Brister
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrewsstatic dns_result_t
ab023a65562e62b85a824509d829b6fad87e00b1Rob Austeinfromtext_minfo(dns_rdataclass_t class, dns_rdatatype_t type,
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews isc_lex_t *lexer, dns_name_t *origin,
854d0238dbc2908490197984b3b9d558008a53dfMark Andrews isc_boolean_t downcase, isc_buffer_t *target) {
854d0238dbc2908490197984b3b9d558008a53dfMark Andrews isc_token_t token;
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews dns_result_t result;
59a6d9effd893036e39e14e775e1c98b0cd22388Andreas Gustafsson dns_name_t name;
59a6d9effd893036e39e14e775e1c98b0cd22388Andreas Gustafsson isc_buffer_t buffer;
59a6d9effd893036e39e14e775e1c98b0cd22388Andreas Gustafsson
59a6d9effd893036e39e14e775e1c98b0cd22388Andreas Gustafsson class = class; /*unused*/
93d6dfaf66258337985427c86181f01fc51f0bb4Mark Andrews
6324997211a5e2d82528dcde98e8981190a35faeMichael Graff if (isc_lex_gettoken(lexer, 0, &token) != ISC_R_SUCCESS)
3ddd814a97de1d152ba0913c592d6e6dc83d38a6Michael Graff return (DNS_R_UNKNOWN);
6d12fdf96621801e80f3f4c2a8a569fe48766a20David Lawrence if (token.type != isc_tokentype_string)
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews return (DNS_R_UNKNOWN);
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews dns_name_init(&name, NULL);
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews buffer_fromregion(&buffer, &token.value.as_region,
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews ISC_BUFFERTYPE_TEXT);
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews origin = (origin != NULL) ? origin : dns_rootname;
96594ea32eecb2b75dd0e588f5491079328ce339Andreas Gustafsson result = dns_name_fromtext(&name, &buffer, origin, downcase, target);
8d3e74b1683f714a484bbcf73249e8ee470e36d7Mark Andrews if (result != DNS_R_SUCCESS)
6e482e595d2b04e65f17851626a61a82efc4bd12David Lawrence return (result);
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews if (isc_lex_gettoken(lexer, 0, &token) != ISC_R_SUCCESS)
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews return (DNS_R_UNKNOWN);
ae114ded82e773a4d9058f833f964a17514712a8Brian Wellington if (token.type != isc_tokentype_string)
ecd3b66f8c4544a55dd44fddda7c7134b936cd3bJames Brister return (DNS_R_UNKNOWN);
bddfe77128b0f16af263ff149db40f0d885f43d0Mark Andrews
40f53fa8d9c6a4fc38c0014495e7a42b08f52481David Lawrence dns_name_init(&name, NULL);
34b394b43e2207e8f8f3703f0402422121455638David Lawrence buffer_fromregion(&buffer, &token.value.as_region,
34b394b43e2207e8f8f3703f0402422121455638David Lawrence ISC_BUFFERTYPE_TEXT);
34b394b43e2207e8f8f3703f0402422121455638David Lawrence origin = (origin != NULL) ? origin : dns_rootname;
add4043305ca411202ed9cf1929a4179016515ceBrian Wellington return (dns_name_fromtext(&name, &buffer, origin, downcase, target));
add4043305ca411202ed9cf1929a4179016515ceBrian Wellington}
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews
6e49e91bd08778d7eae45a2229dcf41ed97cc636David Lawrencestatic dns_result_t
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrewstotext_minfo(dns_rdata_t *rdata, dns_name_t *origin, isc_buffer_t *target) {
2047977ce2dfcfe3a0fa2d638c3242841310fad3Mark Andrews isc_region_t region;
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews dns_name_t rmail;
91cd0f93ad34d23e8b09dca337120f64fbe8f0a1Andreas Gustafsson dns_name_t email;
19c5c23ef6e38965949c996592bd92478da0612cMark Andrews dns_name_t prefix;
add4043305ca411202ed9cf1929a4179016515ceBrian Wellington dns_result_t result;
add4043305ca411202ed9cf1929a4179016515ceBrian Wellington isc_boolean_t sub;
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews INSIST(rdata->type == 14);
c46f10e4a1702191b003cf8f8fc5059c15d29c48Mark Andrews
c46f10e4a1702191b003cf8f8fc5059c15d29c48Mark Andrews dns_name_init(&rmail, NULL);
19c5c23ef6e38965949c996592bd92478da0612cMark Andrews dns_name_init(&email, NULL);
40f53fa8d9c6a4fc38c0014495e7a42b08f52481David Lawrence dns_name_init(&prefix, NULL);
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews
9ac7076ebad044afb15e9e2687e3696868778538Mark Andrews dns_rdata_toregion(rdata, &region);
19c5c23ef6e38965949c996592bd92478da0612cMark Andrews
19c5c23ef6e38965949c996592bd92478da0612cMark Andrews dns_name_fromregion(&rmail, &region);
19c5c23ef6e38965949c996592bd92478da0612cMark Andrews isc_region_consume(&region, rmail.length);
19c5c23ef6e38965949c996592bd92478da0612cMark Andrews
34b394b43e2207e8f8f3703f0402422121455638David Lawrence dns_name_fromregion(&email, &region);
8d3e74b1683f714a484bbcf73249e8ee470e36d7Mark Andrews isc_region_consume(&region, email.length);
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews
8d3e74b1683f714a484bbcf73249e8ee470e36d7Mark Andrews sub = name_prefix(&rmail, origin, &prefix);
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews
19c5c23ef6e38965949c996592bd92478da0612cMark Andrews result = dns_name_totext(&prefix, sub, target);
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews if (result != DNS_R_SUCCESS)
40f53fa8d9c6a4fc38c0014495e7a42b08f52481David Lawrence return (result);
419590499823ce15b5d2ad4fe71eaf04bd5a86c0Michael Graff
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews result = str_totext(" ", target);
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews if (result != DNS_R_SUCCESS)
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews return (result);
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews
3ddd814a97de1d152ba0913c592d6e6dc83d38a6Michael Graff sub = name_prefix(&email, origin, &prefix);
6d12fdf96621801e80f3f4c2a8a569fe48766a20David Lawrence result = dns_name_totext(&prefix, sub, target);
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews if (result != DNS_R_SUCCESS)
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews return (result);
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews return (DNS_R_SUCCESS);
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews}
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrewsstatic dns_result_t
b589e90689c6e87bf9608424ca8d99571c18bc61Mark Andrewsfromwire_minfo(dns_rdataclass_t class, dns_rdatatype_t type,
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews isc_buffer_t *source, dns_decompress_t *dctx,
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews isc_boolean_t downcase, isc_buffer_t *target) {
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews dns_name_t rmail;
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews dns_name_t email;
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews dns_result_t result;
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews
5fc7ba3e1ac5d72239e9971e0f469dd5796738f9Andreas Gustafsson INSIST(type == 14);
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews class = class; /*unused*/
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews
f1b68725503ff3e46001eee5a1751e29a43a09d1Andreas Gustafsson dns_name_init(&rmail, NULL);
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews dns_name_init(&email, NULL);
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews
6e482e595d2b04e65f17851626a61a82efc4bd12David Lawrence result = dns_name_fromwire(&rmail, source, dctx, downcase, target);
5436ac555325d888c822f6be8c4fe69d2343d827Andreas Gustafsson if (result != DNS_R_SUCCESS)
9f139761ca06977d1db8051842efc620c15b8199Andreas Gustafsson return (result);
5436ac555325d888c822f6be8c4fe69d2343d827Andreas Gustafsson
a1f16c81a1e54f52745f64555e6affa0add44173David Lawrence return (dns_name_fromwire(&email, source, dctx, downcase, target));
a1f16c81a1e54f52745f64555e6affa0add44173David Lawrence}
5436ac555325d888c822f6be8c4fe69d2343d827Andreas Gustafsson
91cd0f93ad34d23e8b09dca337120f64fbe8f0a1Andreas Gustafssonstatic dns_result_t
5436ac555325d888c822f6be8c4fe69d2343d827Andreas Gustafssontowire_minfo(dns_rdata_t *rdata, dns_compress_t *cctx, isc_buffer_t *target) {
a1f16c81a1e54f52745f64555e6affa0add44173David Lawrence isc_region_t region;
a1f16c81a1e54f52745f64555e6affa0add44173David Lawrence dns_name_t rmail;
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews dns_name_t email;
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews dns_result_t result;
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews
9f139761ca06977d1db8051842efc620c15b8199Andreas Gustafsson INSIST(rdata->type == 14);
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews dns_name_init(&rmail, NULL);
3ddd814a97de1d152ba0913c592d6e6dc83d38a6Michael Graff dns_name_init(&email, NULL);
6d12fdf96621801e80f3f4c2a8a569fe48766a20David Lawrence
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews dns_rdata_toregion(rdata, &region);
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews dns_name_fromregion(&rmail, &region);
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews isc_region_consume(&region, rmail.length);
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews
ae114ded82e773a4d9058f833f964a17514712a8Brian Wellington result = dns_name_towire(&rmail, cctx, target);
ecd3b66f8c4544a55dd44fddda7c7134b936cd3bJames Brister if (result != DNS_R_SUCCESS)
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews return (result);
94a08e09db3dc844b6ee4841c368a2d7074a9c3fAndreas Gustafsson
1ef8965366d91e02a4672c35a187d30aa4a4c72cMark Andrews dns_name_fromregion(&rmail, &region);
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews isc_region_consume(&region, rmail.length);
2047977ce2dfcfe3a0fa2d638c3242841310fad3Mark Andrews
40f53fa8d9c6a4fc38c0014495e7a42b08f52481David Lawrence result = dns_name_towire(&rmail, cctx, target);
6e49e91bd08778d7eae45a2229dcf41ed97cc636David Lawrence
182a34004c7c48e2c1626f3ce7e787f413955126Mark Andrews return (DNS_R_SUCCESS);
182a34004c7c48e2c1626f3ce7e787f413955126Mark Andrews}
182a34004c7c48e2c1626f3ce7e787f413955126Mark Andrews
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrewsstatic int
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrewscompare_minfo(dns_rdata_t *rdata1, dns_rdata_t *rdata2) {
419590499823ce15b5d2ad4fe71eaf04bd5a86c0Michael Graff isc_region_t region1;
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews isc_region_t region2;
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews dns_name_t name1;
3ddd814a97de1d152ba0913c592d6e6dc83d38a6Michael Graff dns_name_t name2;
6d12fdf96621801e80f3f4c2a8a569fe48766a20David Lawrence int result;
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews INSIST(rdata1->type == 14);
cdc50af0bff41accc02c613b9c6d8cd41b171ffeBrian Wellington INSIST(rdata2->type == 14);
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews dns_name_init(&name1, NULL);
b589e90689c6e87bf9608424ca8d99571c18bc61Mark Andrews dns_name_init(&name2, NULL);
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews
94a08e09db3dc844b6ee4841c368a2d7074a9c3fAndreas Gustafsson dns_rdata_toregion(rdata1, &region1);
cdc50af0bff41accc02c613b9c6d8cd41b171ffeBrian Wellington dns_rdata_toregion(rdata2, &region1);
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews dns_name_fromregion(&name1, &region1);
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews dns_name_fromregion(&name2, &region2);
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews result = dns_name_compare(&name1, &name2);
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews if (result != 0)
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews return (result);
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews
4529cdaedaf1a0a5f8ff89aeca510b7a4475446cBob Halley isc_region_consume(&region1, name1.length);
6d12fdf96621801e80f3f4c2a8a569fe48766a20David Lawrence isc_region_consume(&region2, name2.length);
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews dns_name_init(&name1, NULL);
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews dns_name_init(&name2, NULL);
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews
41aad56b6cc458cbf7b8483576d990a77ae9bac2Andreas Gustafsson dns_name_fromregion(&name1, &region1);
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews dns_name_fromregion(&name2, &region2);
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews
d981ca645597116d227a48bf37cc5edc061c854dBob Halley result = dns_name_compare(&name1, &name2);
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews return (result);
b589e90689c6e87bf9608424ca8d99571c18bc61Mark Andrews}
b589e90689c6e87bf9608424ca8d99571c18bc61Mark Andrews
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrewsstatic dns_result_t
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrewsfromstruct_minfo(dns_rdataclass_t class, dns_rdatatype_t type, void *source,
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews isc_buffer_t *target) {
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews class = class;
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews type = type;
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews source = source;
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews target = target;
41aad56b6cc458cbf7b8483576d990a77ae9bac2Andreas Gustafsson
41aad56b6cc458cbf7b8483576d990a77ae9bac2Andreas Gustafsson return (DNS_R_NOTIMPLEMENTED);
41aad56b6cc458cbf7b8483576d990a77ae9bac2Andreas Gustafsson}
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews
90e303b114e56db5809fdd19805243457fa43cd9Olafur Gudmundssonstatic dns_result_t
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrewstostruct_minfo(dns_rdata_t *rdata, void *target) {
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews
3ddd814a97de1d152ba0913c592d6e6dc83d38a6Michael Graff rdata = rdata;
6d12fdf96621801e80f3f4c2a8a569fe48766a20David Lawrence target = target;
373ce67419680a398ba3dc51a14a486caaf0afb0Mark Andrews
e484f9de4f2cdab05d9db4f0bbcdd15d365f0b31Brian Wellington return (DNS_R_NOTIMPLEMENTED);
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews}
2bc0da0cd874b15593d65338ba96e90ceed13072Mark Andrews#endif
373ce67419680a398ba3dc51a14a486caaf0afb0Mark Andrews