172445Sassar/*
278527Sassar * Copyright (c) 2000 - 2001 Kungliga Tekniska H�gskolan
372445Sassar * (Royal Institute of Technology, Stockholm, Sweden).
472445Sassar * All rights reserved.
572445Sassar *
672445Sassar * Redistribution and use in source and binary forms, with or without
772445Sassar * modification, are permitted provided that the following conditions
872445Sassar * are met:
972445Sassar *
1072445Sassar * 1. Redistributions of source code must retain the above copyright
1172445Sassar *    notice, this list of conditions and the following disclaimer.
1272445Sassar *
1372445Sassar * 2. Redistributions in binary form must reproduce the above copyright
1472445Sassar *    notice, this list of conditions and the following disclaimer in the
1572445Sassar *    documentation and/or other materials provided with the distribution.
1672445Sassar *
1772445Sassar * 3. Neither the name of the Institute nor the names of its contributors
1872445Sassar *    may be used to endorse or promote products derived from this software
1972445Sassar *    without specific prior written permission.
2072445Sassar *
2172445Sassar * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
2272445Sassar * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2372445Sassar * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2472445Sassar * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
2572445Sassar * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2672445Sassar * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2772445Sassar * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2872445Sassar * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2972445Sassar * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
3072445Sassar * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
3172445Sassar * SUCH DAMAGE.
3272445Sassar */
3372445Sassar
3472445Sassar#include <krb5_locl.h>
3572445Sassar
36178825SdfrRCSID("$Id: eai_to_heim_errno.c 22065 2007-11-11 16:41:06Z lha $");
3772445Sassar
38178825Sdfr/**
39178825Sdfr * Convert the getaddrinfo() error code to a Kerberos et error code.
40178825Sdfr *
41178825Sdfr * @param eai_errno contains the error code from getaddrinfo().
42178825Sdfr * @param system_error should have the value of errno after the failed getaddrinfo().
43178825Sdfr *
44178825Sdfr * @return Kerberos error code representing the EAI errors.
45178825Sdfr *
46178825Sdfr * @ingroup krb5_error
4778527Sassar */
4878527Sassar
49178825Sdfrkrb5_error_code KRB5_LIB_FUNCTION
5078527Sassarkrb5_eai_to_heim_errno(int eai_errno, int system_error)
5172445Sassar{
5272445Sassar    switch(eai_errno) {
5372445Sassar    case EAI_NOERROR:
5472445Sassar	return 0;
55127808Snectar#ifdef EAI_ADDRFAMILY
5672445Sassar    case EAI_ADDRFAMILY:
5772445Sassar	return HEIM_EAI_ADDRFAMILY;
58127808Snectar#endif
5972445Sassar    case EAI_AGAIN:
6072445Sassar	return HEIM_EAI_AGAIN;
6172445Sassar    case EAI_BADFLAGS:
6272445Sassar	return HEIM_EAI_BADFLAGS;
6372445Sassar    case EAI_FAIL:
6472445Sassar	return HEIM_EAI_FAIL;
6572445Sassar    case EAI_FAMILY:
6672445Sassar	return HEIM_EAI_FAMILY;
6772445Sassar    case EAI_MEMORY:
6872445Sassar	return HEIM_EAI_MEMORY;
69127808Snectar#if defined(EAI_NODATA) && EAI_NODATA != EAI_NONAME
7072445Sassar    case EAI_NODATA:
7172445Sassar	return HEIM_EAI_NODATA;
72127808Snectar#endif
7372445Sassar    case EAI_NONAME:
7472445Sassar	return HEIM_EAI_NONAME;
7572445Sassar    case EAI_SERVICE:
7672445Sassar	return HEIM_EAI_SERVICE;
7772445Sassar    case EAI_SOCKTYPE:
7872445Sassar	return HEIM_EAI_SOCKTYPE;
7972445Sassar    case EAI_SYSTEM:
8078527Sassar	return system_error;
8172445Sassar    default:
8272445Sassar	return HEIM_EAI_UNKNOWN; /* XXX */
8372445Sassar    }
8472445Sassar}
8578527Sassar
86178825Sdfr/**
87178825Sdfr * Convert the gethostname() error code (h_error) to a Kerberos et
88178825Sdfr * error code.
89178825Sdfr *
90178825Sdfr * @param eai_errno contains the error code from gethostname().
91178825Sdfr *
92178825Sdfr * @return Kerberos error code representing the gethostname errors.
93178825Sdfr *
94178825Sdfr * @ingroup krb5_error
95178825Sdfr */
96178825Sdfr
97178825Sdfrkrb5_error_code KRB5_LIB_FUNCTION
9878527Sassarkrb5_h_errno_to_heim_errno(int eai_errno)
9978527Sassar{
10078527Sassar    switch(eai_errno) {
10178527Sassar    case 0:
10278527Sassar	return 0;
10378527Sassar    case HOST_NOT_FOUND:
10478527Sassar	return HEIM_EAI_NONAME;
10578527Sassar    case TRY_AGAIN:
10678527Sassar	return HEIM_EAI_AGAIN;
10778527Sassar    case NO_RECOVERY:
10878527Sassar	return HEIM_EAI_FAIL;
10978527Sassar    case NO_DATA:
11078527Sassar	return HEIM_EAI_NONAME;
11178527Sassar    default:
11278527Sassar	return HEIM_EAI_UNKNOWN; /* XXX */
11378527Sassar    }
11478527Sassar}
115