compiling libtirpc and rpcbind against uclibc-0.9.30.2

Bernhard Reutner-Fischer rep.dot.nop at gmail.com
Wed Feb 3 21:54:34 UTC 2010


On Tue, Feb 02, 2010 at 11:10:16AM +0100, Natanael Copa wrote:
>Hi,
>
>I think the idea was to drop the rpc stuff from uclibc and rely on
>libtirpc and rpcbind.

indeed.
>
>I have been able to compile libgssglue, heimdal and libtirpc against
>uclibc but i get a linker error when trying to compile rpcbind.
>
>To be able compile libtirpc I had to manually create src/rpcsvc and
>copy the nis.h file in there. It is needed fomr some define.
>
>I was able to compile rpcbind with this:
>
>diff --git a/src/rpcbind.c b/src/rpcbind.c
>index 525ffba..1fe1a60 100644
>--- a/src/rpcbind.c
>+++ b/src/rpcbind.c
>@@ -67,7 +67,11 @@
> #include <pwd.h>
> #include <string.h>
> #include <errno.h>
>+#if defined(__UCLIBC__)
>+#define __nss_configure_lookup(x,y)
>+#else
> #include <nss.h>
>+#endif
> #include "config.h"
> #include "rpcbind.h"
>
>and this:
>
>diff --git a/src/security.c b/src/security.c
>index 0edeac6..e9fed55 100644
>--- a/src/security.c
>+++ b/src/security.c
>@@ -20,6 +20,32 @@
> /*
>  * XXX for special case checks in check_callit.
>  */
>+#if defined(__UCLIBC__)
>+
>+#define MOUNTPROC_MNT 1
>+#define MOUNTPROC_UMNT 3
>+
>+#define NFS_PROGRAM    100003
>+#define YPPROG         100004
>+#define MOUNTPROG      100005
>+#define YPBINDPROG     100007
>+#define YPPASSWDPROG   100009
>+#define RQUOTAPROG     100011
>+
>+#define YPPROC_NULL    0
>+#define YPPROC_DOMAIN  1
>+#define YPPROC_DOMAIN_NONACK 2
>+#define YPPROC_MATCH   3
>+#define YPPROC_FIRST   4
>+#define YPPROC_NEXT    5
>+#define YPPROC_XFR     6
>+#define YPPROC_CLEAR   7
>+#define YPPROC_ALL     8
>+
>+#define YPBINDPROC_SETDOM      2
>+
>+#else
>+
> #include <rpcsvc/mount.h>
> #include <rpcsvc/rquota.h>
> #include <rpcsvc/nfs_prot.h>
>@@ -27,6 +53,8 @@
> #include <rpcsvc/ypclnt.h>
> #include <rpcsvc/yppasswd.h>
>
>+#endif
>+
> #include "rpcbind.h"
>
> #ifdef LIBWRAP
>
>
>However, during linking I get the following error:
>
>ccache gcc -march=i486 -Os -fomit-frame-pointer -pipe -Wl,--as-needed
>-o rpcbind check_bound.o rpcbind.o rpcb_svc_4.o rpcb_svc_com.o util.o
>pmap_svc.o rpcb_stat.o rpcb_svc.o security.o warmstart.o
>/usr/lib/libtirpc.so -lnsl /usr/lib/libgssglue.so
>/usr/lib/libgssapi.so /usr/lib/libheimntlm.so /usr/lib/libkrb5.so
>/usr/lib/libhx509.so /usr/lib/libheimsqlite.so /usr/lib/libwind.so
>/usr/lib/libhcrypto.so /usr/lib/libasn1.so -lcom_err -ldl
>/usr/lib/libroken.so -lcrypt -lpthread
>/usr/lib/libtirpc.so: undefined reference to `key_encryptsession_pk'
>/usr/lib/libtirpc.so: undefined reference to `getnetname'
>/usr/lib/libtirpc.so: undefined reference to `cbc_crypt'
>/usr/lib/libtirpc.so: undefined reference to `ecb_crypt'
>/usr/lib/libtirpc.so: undefined reference to `getpublickey'
>/usr/lib/libtirpc.so: undefined reference to `key_gendes'
>collect2: ld returned 1 exit status
>make[3]: *** [rpcbind] Error 1
>
>
>As I understand those are not implemented in uclibc, and never will
>since we are supposed to rely on libtirpc and rpcbind.

exactly.
>
>I would guess we have the following options:
>
>1. have libtirpc to use openssl for the crypto funcs
>2. have libtirpc to use gnutls for the crypto funcs
>3. implement key_encryptsession_pk, getnetname, cbc_crypt, ecb_crypt,
>getpublickey and key_gendes in uclibc.

I'd go for 1 or 2 (or vice versa).
>
>Any ideas how to move forward?


More information about the uClibc mailing list