172445Sassar/*
2233294Sstas * Copyright (c) 2000 - 2001 Kungliga Tekniska H��gskolan
3233294Sstas * (Royal Institute of Technology, Stockholm, Sweden).
4233294Sstas * All rights reserved.
572445Sassar *
6233294Sstas * Redistribution and use in source and binary forms, with or without
7233294Sstas * modification, are permitted provided that the following conditions
8233294Sstas * are met:
972445Sassar *
10233294Sstas * 1. Redistributions of source code must retain the above copyright
11233294Sstas *    notice, this list of conditions and the following disclaimer.
1272445Sassar *
13233294Sstas * 2. Redistributions in binary form must reproduce the above copyright
14233294Sstas *    notice, this list of conditions and the following disclaimer in the
15233294Sstas *    documentation and/or other materials provided with the distribution.
1672445Sassar *
17233294Sstas * 3. Neither the name of the Institute nor the names of its contributors
18233294Sstas *    may be used to endorse or promote products derived from this software
19233294Sstas *    without specific prior written permission.
2072445Sassar *
21233294Sstas * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
22233294Sstas * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23233294Sstas * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24233294Sstas * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
25233294Sstas * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26233294Sstas * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27233294Sstas * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28233294Sstas * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29233294Sstas * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30233294Sstas * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31233294Sstas * SUCH DAMAGE.
3272445Sassar */
3372445Sassar
34233294Sstas#include "krb5_locl.h"
3572445Sassar
36178825Sdfr/**
37178825Sdfr * Convert the getaddrinfo() error code to a Kerberos et error code.
38178825Sdfr *
39178825Sdfr * @param eai_errno contains the error code from getaddrinfo().
40178825Sdfr * @param system_error should have the value of errno after the failed getaddrinfo().
41178825Sdfr *
42178825Sdfr * @return Kerberos error code representing the EAI errors.
43178825Sdfr *
44178825Sdfr * @ingroup krb5_error
4578527Sassar */
4678527Sassar
47233294SstasKRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
4878527Sassarkrb5_eai_to_heim_errno(int eai_errno, int system_error)
4972445Sassar{
5072445Sassar    switch(eai_errno) {
5172445Sassar    case EAI_NOERROR:
5272445Sassar	return 0;
53127808Snectar#ifdef EAI_ADDRFAMILY
5472445Sassar    case EAI_ADDRFAMILY:
5572445Sassar	return HEIM_EAI_ADDRFAMILY;
56127808Snectar#endif
5772445Sassar    case EAI_AGAIN:
5872445Sassar	return HEIM_EAI_AGAIN;
5972445Sassar    case EAI_BADFLAGS:
6072445Sassar	return HEIM_EAI_BADFLAGS;
6172445Sassar    case EAI_FAIL:
6272445Sassar	return HEIM_EAI_FAIL;
6372445Sassar    case EAI_FAMILY:
6472445Sassar	return HEIM_EAI_FAMILY;
6572445Sassar    case EAI_MEMORY:
6672445Sassar	return HEIM_EAI_MEMORY;
67127808Snectar#if defined(EAI_NODATA) && EAI_NODATA != EAI_NONAME
6872445Sassar    case EAI_NODATA:
6972445Sassar	return HEIM_EAI_NODATA;
70127808Snectar#endif
71234027Sstas#ifdef WSANO_DATA
72234027Sstas    case WSANO_DATA:
73234027Sstas	return HEIM_EAI_NODATA;
74234027Sstas#endif
7572445Sassar    case EAI_NONAME:
7672445Sassar	return HEIM_EAI_NONAME;
7772445Sassar    case EAI_SERVICE:
7872445Sassar	return HEIM_EAI_SERVICE;
7972445Sassar    case EAI_SOCKTYPE:
8072445Sassar	return HEIM_EAI_SOCKTYPE;
81233294Sstas#ifdef EAI_SYSTEM
8272445Sassar    case EAI_SYSTEM:
8378527Sassar	return system_error;
84233294Sstas#endif
8572445Sassar    default:
8672445Sassar	return HEIM_EAI_UNKNOWN; /* XXX */
8772445Sassar    }
8872445Sassar}
8978527Sassar
90178825Sdfr/**
91178825Sdfr * Convert the gethostname() error code (h_error) to a Kerberos et
92178825Sdfr * error code.
93178825Sdfr *
94178825Sdfr * @param eai_errno contains the error code from gethostname().
95178825Sdfr *
96178825Sdfr * @return Kerberos error code representing the gethostname errors.
97178825Sdfr *
98178825Sdfr * @ingroup krb5_error
99178825Sdfr */
100178825Sdfr
101233294SstasKRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
10278527Sassarkrb5_h_errno_to_heim_errno(int eai_errno)
10378527Sassar{
10478527Sassar    switch(eai_errno) {
10578527Sassar    case 0:
10678527Sassar	return 0;
10778527Sassar    case HOST_NOT_FOUND:
10878527Sassar	return HEIM_EAI_NONAME;
10978527Sassar    case TRY_AGAIN:
11078527Sassar	return HEIM_EAI_AGAIN;
11178527Sassar    case NO_RECOVERY:
11278527Sassar	return HEIM_EAI_FAIL;
11378527Sassar    case NO_DATA:
11478527Sassar	return HEIM_EAI_NONAME;
11578527Sassar    default:
11678527Sassar	return HEIM_EAI_UNKNOWN; /* XXX */
11778527Sassar    }
11878527Sassar}
119