From: Art Cancro Date: Thu, 24 Aug 2000 02:48:18 +0000 (+0000) Subject: * Merged in IO ERROR's diffs to make Citadel work with HP/UX X-Git-Tag: v7.86~7136 X-Git-Url: https://code.citadel.org/?a=commitdiff_plain;h=497f75faa24b7d2aceeee0ba92756c7acc2e942c;p=citadel.git * Merged in IO ERROR's diffs to make Citadel work with HP/UX --- diff --git a/citadel/ChangeLog b/citadel/ChangeLog index de4f01b79..6c9640760 100644 --- a/citadel/ChangeLog +++ b/citadel/ChangeLog @@ -1,4 +1,7 @@ $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. @@ -1999,3 +2002,4 @@ Sat Jul 11 00:20:48 EDT 1998 Nathan Bryant Fri Jul 10 1998 Art Cancro * Initial CVS import + diff --git a/citadel/citserver.c b/citadel/citserver.c index b0b046332..d249e345c 100644 --- a/citadel/citserver.c +++ b/citadel/citserver.c @@ -17,7 +17,7 @@ #include #include #include -#include +/* #include */ #include #include #include diff --git a/citadel/configure.in b/citadel/configure.in index 8c641749e..dcdf5db66 100644 --- a/citadel/configure.in +++ b/citadel/configure.in @@ -25,7 +25,7 @@ TARGETS=client 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. @@ -125,6 +125,9 @@ if test "$ac_cv_func_dlopen" = no; then 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) @@ -188,7 +191,7 @@ AC_HEADER_DIRENT 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: diff --git a/citadel/domain.h b/citadel/domain.h index 0d9ac9f66..e7091b5db 100644 --- a/citadel/domain.h +++ b/citadel/domain.h @@ -10,3 +10,16 @@ struct mx { 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 diff --git a/citadel/dynloader.c b/citadel/dynloader.c index b8be4eb34..de01715eb 100644 --- a/citadel/dynloader.c +++ b/citadel/dynloader.c @@ -9,7 +9,13 @@ #include "sysdep.h" #include #include +#ifdef HAVE_DLFCN_H #include +#endif +#ifdef HAVE_DL_H +#include +#include "hpsux.h" +#endif #include #include #include diff --git a/citadel/hpsux.h b/citadel/hpsux.h new file mode 100644 index 000000000..e4ebb5bdd --- /dev/null +++ b/citadel/hpsux.h @@ -0,0 +1,79 @@ +/* $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 +#include +#include + + +/* 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 */