$Log$
+ Revision 572.28 2000/08/24 02:48:18 ajc
+ * Merged in IO ERROR's diffs to make Citadel work with HP/UX
+
Revision 572.27 2000/08/22 02:31:47 ajc
* nonce (for APOP-style auth) is now generated when a context is created
instead of during protocol greeting functions.
Fri Jul 10 1998 Art Cancro <ajc@uncnsrd.mt-kisco.ny.us>
* Initial CVS import
+
#include <errno.h>
#include <limits.h>
#include <syslog.h>
-#include <dlfcn.h>
+/* #include <dlfcn.h> */
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
AC_CANONICAL_HOST
SO=.so
PTHREAD_DEFS=-D_REENTRANT
-LINK_SHARED='$(CC) -shared'
+LINK_SHARED='$(CC) -shared -fPIC'
case "$host" in
dnl BSDI 3.0 wants relocatable object modules instead of shared libs
dnl for dlopen(), and has a wrapper script to link with shared libs.
test "$with_pam" = yes && chkpwd_LIBS="-ldl $chkpwd_LIBS"])
fi
+dnl Check for HP/UX dyanmic loader. This should only be in -ldld.
+AC_CHECK_LIB(dld, shl_load, LIBS="-ldld $LIBS")
+
dnl Determine the system's authentication capabilities, if autologin is
dnl requested. We currently support PAM, standard getpwnam(), and getspnam()
dnl (Linux shadow passwords)
AC_HEADER_STDC
AC_HEADER_SYS_WAIT
test -f /usr/local/include/gdbm.h && CPPFLAGS="$CPPFLAGS -I/usr/local/include"
-AC_CHECK_HEADERS(curses.h fcntl.h limits.h termios.h strings.h sys/ioctl.h sys/select.h sys/time.h syslog.h unistd.h gdbm.h utmp.h utmpx.h paths.h)
+AC_CHECK_HEADERS(curses.h dl.h dlfcn.h fcntl.h limits.h termios.h strings.h sys/ioctl.h sys/select.h sys/time.h syslog.h unistd.h gdbm.h utmp.h utmpx.h paths.h)
dnl some systems require -pthread, -D_REENTRANT, etc to be passed to cc if we
dnl include pthread.h:
int get_smarthosts(char *mxbuf);
int getmx(char *mxbuf, char *dest);
+
+
+/* HP/UX has old include files...these are from arpa/nameser.h */
+
+#ifndef HFIXEDSZ
+#define HFIXEDSZ 12 /* I hope! */
+#endif
+#ifndef INT16SZ
+#define INT16SZ sizeof(int16)
+#endif
+#ifndef INT32SZ
+#define INT32SZ sizeof(int32)
+#endif
#include "sysdep.h"
#include <stdio.h>
#include <stdlib.h>
+#ifdef HAVE_DLFCN_H
#include <dlfcn.h>
+#endif
+#ifdef HAVE_DL_H
+#include <dl.h>
+#include "hpsux.h"
+#endif
#include <sys/types.h>
#include <dirent.h>
#include <strings.h>
--- /dev/null
+/* $Id$ */
+
+/* This nice file makes Citadel/UX work with HP/UX's dynamic loader. */
+/* It's unusual to put C code in a .h file, but I think it's easier for the
+ moment. */
+
+#ifndef _CITADEL_UX_HPSUX_H
+#define _CITADEL_UX_HPSUX_H
+
+/* includes */
+#include <errno.h>
+#include <dl.h>
+#include <string.h>
+
+
+/* functions */
+void *dlopen(const char *, int);
+int dlclose(void *);
+const char *dlerror(void);
+void *dlsym(void *, char *);
+
+
+/* #defines mapped */
+
+#define RTLD_LAZY BIND_DEFERRED
+#define RTLD_NOW BIND_IMMEDIATE
+#define RTLD_GLOBAL 0 /* This SEEMS to be the default for HP/UX */
+
+
+/* extern variables */
+extern int errno;
+
+
+/* local variables */
+static char *dlerrmsg; /* pointer to last error message */
+
+
+/* functions mapped */
+
+/* dlopen() */
+void *dlopen(const char *filename, int flag)
+{
+ shl_t handle;
+
+ handle = shl_load(filename, flag, 0L);
+ if (handle == NULL)
+ dlerrmsg = strerror(errno);
+ return (void *)handle;
+}
+
+/* dlclose() */
+int dlclose(void *handle)
+{
+ return shl_unload(handle);
+}
+
+/* dlerror() */
+/* I think this is as thread safe as it's going to get */
+const char *dlerror(void)
+{
+ const char *msg;
+
+ msg = dlerrmsg;
+ dlerrmsg = NULL;
+ return msg;
+}
+
+/* dlsym() */
+void *dlsym(void *handle, char *symbol)
+{
+ void *value = NULL; /* Linux man page says 0 is a valid symbol */
+ /* address. I don't understand this, of course, but what do I know? */
+
+ if (shl_findsym(handle, symbol, TYPE_UNDEFINED, value) == -1)
+ dlerrmsg = strerror(errno);
+ return value;
+}
+
+#endif /* _CITADEL_UX_HPSUX_H */