diff options
author | Florian Weimer <fweimer@redhat.com> | 2021-07-19 07:55:27 +0200 |
---|---|---|
committer | Florian Weimer <fweimer@redhat.com> | 2021-07-19 07:56:21 +0200 |
commit | 2fbe5860d33ca2318b35ea6d31beefa381b4ac8a (patch) | |
tree | bf8baa77f1b3565eaf5a872331d8bd2a01943221 /resolv/res_comp.c | |
parent | 391e02236b931132c0e8b5ba4c3b087c2aaa1044 (diff) | |
download | glibc-2fbe5860d33ca2318b35ea6d31beefa381b4ac8a.tar.gz glibc-2fbe5860d33ca2318b35ea6d31beefa381b4ac8a.tar.xz glibc-2fbe5860d33ca2318b35ea6d31beefa381b4ac8a.zip |
resolv: Rename res_comp.c to res-name-checking.c and move into libc
This reflects what the remaining functions in the file do. The __res_dnok, __res_hnok, __res_mailok, __res_ownok were moved with the script, using --no-new-version, and turned into compat symbols. __libc_res_dnok@@GLIBC_PRIVATE and __libc_res_hnok@@GLIBC_PRIVATE are added for internal use, to avoid accidentally binding to compatibility symbols. The new public symbols res_dnok, res_hnok, res_mailok, res_ownok were added using make update-all-abi. Reviewed-by: Carlos O'Donell <carlos@redhat.com> Tested-by: Carlos O'Donell <carlos@redhat.com>
Diffstat (limited to 'resolv/res_comp.c')
-rw-r--r-- | resolv/res_comp.c | 208 |
1 files changed, 0 insertions, 208 deletions
diff --git a/resolv/res_comp.c b/resolv/res_comp.c deleted file mode 100644 index 16f7e02111..0000000000 --- a/resolv/res_comp.c +++ /dev/null @@ -1,208 +0,0 @@ -/* Domain name processing functions. - Copyright (C) 1995-2021 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <https://www.gnu.org/licenses/>. */ - -/* - * Copyright (c) 1985, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -/* - * Portions Copyright (c) 1993 by Digital Equipment Corporation. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies, and that - * the name of Digital Equipment Corporation not be used in advertising or - * publicity pertaining to distribution of the document or software without - * specific, written prior permission. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL - * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT - * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS - * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS - * SOFTWARE. - */ - -/* - * Portions Copyright (c) 1996-1999 by Internet Software Consortium. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS - * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE - * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS - * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS - * SOFTWARE. - */ - -#include <sys/types.h> -#include <sys/param.h> -#include <netinet/in.h> -#include <arpa/nameser.h> -#include <ctype.h> -#include <resolv.h> -#include <stdio.h> -#include <string.h> -#include <unistd.h> - -/* Return true if the string consists of printable ASCII characters - only. */ -static bool -printable_string (const char *dn) -{ - while (true) - { - char ch = *dn; - if (ch == '\0') - return true; - if (ch <= ' ' || ch > '~') - return false; - ++dn; - } -} - -/* Return true if DN points to a name consisting only of [0-9a-zA-Z_-] - characters. DN must be in DNS wire format, without - compression. */ -static bool -binary_hnok (const unsigned char *dn) -{ - while (true) - { - size_t label_length = *dn; - if (label_length == 0) - break; - ++dn; - const unsigned char *label_end = dn + label_length; - do - { - unsigned char ch = *dn; - if (!(('0' <= ch && ch <= '9') - || ('A' <= ch && ch <= 'Z') - || ('a' <= ch && ch <= 'z') - || ch == '-' || ch == '_')) - return false; - ++dn; - } - while (dn < label_end); - } - return true; -} - -/* Return true if the binary domain name has a first labels which - starts with '-'. */ -static inline bool -binary_leading_dash (const unsigned char *dn) -{ - return dn[0] > 0 && dn[1] == '-'; -} - -/* Return 1 if res_hnok is a valid host name. Labels must only - contain [0-9a-zA-Z_-] characters, and the name must not start with - a '-'. The latter is to avoid confusion with program options. */ -int -res_hnok (const char *dn) -{ - unsigned char buf[NS_MAXCDNAME]; - if (!printable_string (dn) - || ns_name_pton (dn, buf, sizeof (buf)) < 0 - || binary_leading_dash (buf)) - return 0; - return binary_hnok (buf); -} -libresolv_hidden_def (res_hnok) - -/* Hostname-like (A, MX, WKS) owners can have "*" as their first label - but must otherwise be as a host name. */ -int -res_ownok (const char *dn) -{ - unsigned char buf[NS_MAXCDNAME]; - if (!printable_string (dn) - || ns_name_pton (dn, buf, sizeof (buf)) < 0 - || binary_leading_dash (buf)) - return 0; - if (buf[0] == 1 && buf [1] == '*') - /* Skip over the leading "*." part. */ - return binary_hnok (buf + 2); - else - return binary_hnok (buf); -} - -/* SOA RNAMEs and RP RNAMEs can have any byte in their first label, - but the rest of the name has to look like a host name. */ -int -res_mailok (const char *dn) -{ - unsigned char buf[NS_MAXCDNAME]; - if (!printable_string (dn) - || ns_name_pton (dn, buf, sizeof (buf)) < 0) - return 0; - unsigned char label_length = buf[0]; - /* "." is a valid missing representation */ - if (label_length == 0) - return 1; - /* Skip over the first label. */ - unsigned char *tail = buf + 1 + label_length; - if (*tail == 0) - /* More than one label is required (except for "."). */ - return 0; - return binary_hnok (tail); -} - -/* Return 1 if DN is a syntactically valid domain name. Empty names - are accepted. */ -int -res_dnok (const char *dn) -{ - unsigned char buf[NS_MAXCDNAME]; - return printable_string (dn) && ns_name_pton (dn, buf, sizeof (buf)) >= 0; -} -libresolv_hidden_def (res_dnok) |