compiling libtirpc and rpcbind against uclibc-0.9.30.2
Natanael Copa
natanael.copa at gmail.com
Tue Feb 2 10:10:16 UTC 2010
Hi,
I think the idea was to drop the rpc stuff from uclibc and rely on
libtirpc and rpcbind.
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.
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.
Any ideas how to move forward?
--
Natanael Copa
More information about the uClibc
mailing list