diff --git a/configure.ac b/configure.ac index 99a0d33..efe3f3a 100644 --- a/configure.ac +++ b/configure.ac @@ -45,7 +45,7 @@ AC_HEADER_DIRENT AC_PREFIX_DEFAULT(/usr) AC_CHECK_HEADERS([arpa/inet.h fcntl.h libintl.h limits.h locale.h netdb.h netinet/in.h stddef.h stdint.h stdlib.h string.h sys/ioctl.h sys/param.h sys/socket.h sys/time.h syslog.h unistd.h features.h gssapi/gssapi_ext.h]) AC_CHECK_LIB([pthread], [pthread_create]) -AC_CHECK_FUNCS([getrpcbyname getrpcbynumber setrpcent endrpcent getrpcent]) +AC_CHECK_FUNCS([getrpcbyname getrpcbynumber setrpcent endrpcent getrpcent cbc_crypt ecb_crypt]) AC_CONFIG_FILES([Makefile src/Makefile man/Makefile doc/Makefile]) AC_OUTPUT(libtirpc.pc) diff --git a/src/Makefile.am b/src/Makefile.am index 6cc567a..4ed1a55 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -51,7 +51,7 @@ libtirpc_la_SOURCES = auth_none.c auth_unix.c authunix_prot.c bindresvport.c cln rpc_callmsg.c rpc_generic.c rpc_soc.c rpcb_clnt.c rpcb_prot.c \ rpcb_st_xdr.c svc.c svc_auth.c svc_dg.c svc_auth_unix.c svc_auth_none.c \ svc_generic.c svc_raw.c svc_run.c svc_simple.c svc_vc.c getpeereid.c \ - auth_time.c auth_des.c authdes_prot.c debug.c + auth_time.c auth_des.c authdes_prot.c debug.c des_crypt.c ## XDR libtirpc_la_SOURCES += xdr.c xdr_rec.c xdr_array.c xdr_float.c xdr_mem.c xdr_reference.c xdr_stdio.c @@ -69,7 +69,7 @@ if GSS endif libtirpc_la_SOURCES += key_call.c key_prot_xdr.c getpublickey.c -libtirpc_la_SOURCES += netname.c netnamer.c rtime.c +libtirpc_la_SOURCES += netname.c netnamer.c rtime.c rpcdname.c CLEANFILES = cscope.* *~ DISTCLEANFILES = Makefile.in diff --git a/src/des_crypt.c b/src/des_crypt.c index 1d1badd..0aff4d5 100644 --- a/src/des_crypt.c +++ b/src/des_crypt.c @@ -67,6 +67,7 @@ static int common_crypt( char *, char *, unsigned, unsigned, struct desparams * /* * CBC mode encryption */ +#ifndef HAVE_CBC_CRYPT int cbc_crypt(key, buf, len, mode, ivec) char *key; @@ -89,11 +90,13 @@ cbc_crypt(key, buf, len, mode, ivec) COPY8(dp.des_ivec, ivec); return(err); } +#endif /* * ECB mode encryption */ +#ifndef HAVE_ECB_CRYPT int ecb_crypt(key, buf, len, mode) char *key; @@ -111,12 +114,14 @@ ecb_crypt(key, buf, len, mode) #endif return(common_crypt(key, buf, len, mode, &dp)); } +#endif /* * Common code to cbc_crypt() & ecb_crypt() */ +#if !defined(HAVE_CBC_CRYPT) || !defined(HAVE_ECB_CRYPT) static int common_crypt(key, buf, len, mode, desp) char *key; @@ -144,3 +149,4 @@ common_crypt(key, buf, len, mode, desp) return(desdev == DES_SW ? DESERR_NONE : DESERR_NOHWDEVICE); } +#endif diff --git a/src/getpublickey.c b/src/getpublickey.c index 764a5f9..a09acb7 100644 --- a/src/getpublickey.c +++ b/src/getpublickey.c @@ -38,8 +38,6 @@ #include #include #include -#include -#include #include #include diff --git a/src/rpcdname.c b/src/rpcdname.c new file mode 100644 index 0000000..3e6a988 --- /dev/null +++ b/src/rpcdname.c @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2009, Sun Microsystems, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - 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. + * - Neither the name of Sun Microsystems, Inc. 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 COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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. + */ + +/* + * rpcdname.c + * Gets the default domain name + */ + +#include +#include +#include + +static char *default_domain = 0; + +static char * +get_default_domain() +{ + char temp[256]; + + if (default_domain) + return (default_domain); + if (getdomainname(temp, sizeof(temp)) < 0) + return (0); + if ((int) strlen(temp) > 0) { + default_domain = (char *)malloc((strlen(temp)+(unsigned)1)); + if (default_domain == 0) + return (0); + (void) strcpy(default_domain, temp); + return (default_domain); + } + return (0); +} + +/* + * This is a wrapper for the system call getdomainname which returns a + * ypclnt.h error code in the failure case. It also checks to see that + * the domain name is non-null, knowing that the null string is going to + * get rejected elsewhere in the NIS client package. + */ +int +__rpc_get_default_domain(domain) + char **domain; +{ + if ((*domain = get_default_domain()) != 0) + return (0); + return (-1); +}