X-Git-Url: https://git.saurik.com/apple/libinfo.git/blobdiff_plain/ccd4a120fd72e1cd2071458320f7a1914ef55421..47da0bbe8e69f4b0a44c878d614a89c2e550a7ca:/nis.subproj/yp_first.c diff --git a/nis.subproj/yp_first.c b/nis.subproj/yp_first.c index 6dc84da..446d4b6 100644 --- a/nis.subproj/yp_first.c +++ b/nis.subproj/yp_first.c @@ -3,22 +3,21 @@ * * @APPLE_LICENSE_HEADER_START@ * - * Copyright (c) 1999-2003 Apple Computer, Inc. All Rights Reserved. - * - * This file contains Original Code and/or Modifications of Original Code - * as defined in and that are subject to the Apple Public Source License - * Version 2.0 (the 'License'). You may not use this file except in - * compliance with the License. Please obtain a copy of the License at - * http://www.opensource.apple.com/apsl/ and read it before using this - * file. + * Portions Copyright (c) 1999 Apple Computer, Inc. All Rights + * Reserved. This file contains Original Code and/or Modifications of + * Original Code as defined in and that are subject to the Apple Public + * Source License Version 1.1 (the "License"). You may not use this file + * except in compliance with the License. Please obtain a copy of the + * License at http://www.apple.com/publicsource and read it before using + * this file. * * The Original Code and all software distributed under the License are - * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. - * Please see the License for the specific language governing rights and - * limitations under the License. + * FITNESS FOR A PARTICULAR PURPOSE OR NON- INFRINGEMENT. Please see the + * License for the specific language governing rights and limitations + * under the License. * * @APPLE_LICENSE_HEADER_END@ */ @@ -87,6 +86,7 @@ yp_first(indomain, inmap, outkey, outkeylen, outval, outvallen) struct dom_binding *ysd; struct timeval tv; int tries = 0, r; + static int proto = YP_BIND_UDP; if (indomain == NULL || *indomain == '\0' || strlen(indomain) > YPMAXDOMAIN || inmap == NULL || @@ -107,14 +107,18 @@ again: yprnk.map = (char *)inmap; (void)memset(&yprkv, 0, sizeof yprkv); - r = clnt_call(ysd->dom_client, YPPROC_FIRST, - xdr_ypreq_nokey, &yprnk, xdr_ypresp_key_val, &yprkv, tv); - if (r != RPC_SUCCESS) { - if (tries++) - clnt_perror(ysd->dom_client, "yp_first: clnt_call"); - ysd->dom_vers = -1; + r = clnt_call(ysd->dom_client, YPPROC_FIRST, (xdrproc_t)xdr_ypreq_nokey, &yprnk, (xdrproc_t)xdr_ypresp_key_val, &yprkv, tv); + if (r != RPC_SUCCESS) + { + if (tries++) clnt_perror(ysd->dom_client, "yp_first: clnt_call"); + + if (proto == YP_BIND_UDP) proto = YP_BIND_TCP; + else proto = YP_BIND_UDP; + ysd->dom_vers = proto; + goto again; } + if (!(r = ypprot_err(yprkv.stat))) { *outkeylen = yprkv.key.keydat_len; if ((*outkey = malloc(*outkeylen + 1)) == NULL) @@ -131,7 +135,7 @@ again: (*outval)[*outvallen] = '\0'; } } - xdr_free(xdr_ypresp_key_val, (char *) &yprkv); + xdr_free((xdrproc_t)xdr_ypresp_key_val, (char *) &yprkv); _yp_unbind(ysd); return r; }