⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 expand_hostname.c

📁 samba最新软件
💻 C
字号:
/* * Copyright (c) 1999 - 2001 Kungliga Tekniska H鰃skolan * (Royal Institute of Technology, Stockholm, Sweden).  * 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.  * * 3. Neither the name of the Institute 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 INSTITUTE 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 INSTITUTE 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.  */#include "krb5_locl.h"RCSID("$Id: expand_hostname.c 22229 2007-12-08 21:40:59Z lha $");static krb5_error_codecopy_hostname(krb5_context context,	      const char *orig_hostname,	      char **new_hostname){    *new_hostname = strdup (orig_hostname);    if (*new_hostname == NULL) {	krb5_set_error_string(context, "malloc: out of memory");	return ENOMEM;    }    strlwr (*new_hostname);    return 0;}/* * Try to make `orig_hostname' into a more canonical one in the newly * allocated space returned in `new_hostname'. */krb5_error_code KRB5_LIB_FUNCTIONkrb5_expand_hostname (krb5_context context,		      const char *orig_hostname,		      char **new_hostname){    struct addrinfo *ai, *a, hints;    int error;    if ((context->flags & KRB5_CTX_F_DNS_CANONICALIZE_HOSTNAME) == 0)	return copy_hostname (context, orig_hostname, new_hostname);    memset (&hints, 0, sizeof(hints));    hints.ai_flags = AI_CANONNAME;    error = getaddrinfo (orig_hostname, NULL, &hints, &ai);    if (error)	return copy_hostname (context, orig_hostname, new_hostname);    for (a = ai; a != NULL; a = a->ai_next) {	if (a->ai_canonname != NULL) {	    *new_hostname = strdup (a->ai_canonname);	    freeaddrinfo (ai);	    if (*new_hostname == NULL) {		krb5_set_error_string(context, "malloc: out of memory");		return ENOMEM;	    } else {		return 0;	    }	}    }    freeaddrinfo (ai);    return copy_hostname (context, orig_hostname, new_hostname);}/* * handle the case of the hostname being unresolvable and thus identical */static krb5_error_codevanilla_hostname (krb5_context context,		  const char *orig_hostname,		  char **new_hostname,		  char ***realms){    krb5_error_code ret;    ret = copy_hostname (context, orig_hostname, new_hostname);    if (ret)	return ret;    strlwr (*new_hostname);    ret = krb5_get_host_realm (context, *new_hostname, realms);    if (ret) {	free (*new_hostname);	return ret;    }    return 0;}/* * expand `hostname' to a name we believe to be a hostname in newly * allocated space in `host' and return realms in `realms'. */krb5_error_code KRB5_LIB_FUNCTIONkrb5_expand_hostname_realms (krb5_context context,			     const char *orig_hostname,			     char **new_hostname,			     char ***realms){    struct addrinfo *ai, *a, hints;    int error;    krb5_error_code ret = 0;    if ((context->flags & KRB5_CTX_F_DNS_CANONICALIZE_HOSTNAME) == 0)	return vanilla_hostname (context, orig_hostname, new_hostname,				 realms);    memset (&hints, 0, sizeof(hints));    hints.ai_flags = AI_CANONNAME;    error = getaddrinfo (orig_hostname, NULL, &hints, &ai);    if (error)	return vanilla_hostname (context, orig_hostname, new_hostname,				 realms);    for (a = ai; a != NULL; a = a->ai_next) {	if (a->ai_canonname != NULL) {	    ret = copy_hostname (context, a->ai_canonname, new_hostname);	    if (ret) {		freeaddrinfo (ai);		return ret;	    }	    strlwr (*new_hostname);	    ret = krb5_get_host_realm (context, *new_hostname, realms);	    if (ret == 0) {		freeaddrinfo (ai);		return 0;	    }	    free (*new_hostname);	}    }    freeaddrinfo(ai);    return vanilla_hostname (context, orig_hostname, new_hostname, realms);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -