DOLDA_AC_GROUP([Checking required libraries])
-AC_CHECK_LIB(pam, pam_start, , AC_MSG_ERROR([*** must have PAM]))
AC_CHECK_LIB(z, deflate, , AC_MSG_ERROR([*** must have zlib]))
AC_CHECK_LIB(bz2, BZ2_bzWriteOpen, , AC_MSG_ERROR([*** must have bzlib]))
AC_CHECK_LIB(gdbm, gdbm_open, , AC_MSG_ERROR([*** must have gdbm]))
DOLDA_AC_GROUP([Checking optional libraries])
+# PAM check
+pam_msg=no
+AH_TEMPLATE(HAVE_PAM, [define to compile support for PAM authentication])
+AC_ARG_WITH(pam, [ --with-pam Enable PAM support])
+DOLDA_PKG([HAS_PAM], [test "$with_pam" = no && HAS_PAM=no],
+ [AC_CHECK_LIB(pam, pam_start, , [HAS_PAM=no])])
+if test "$with_pam" = yes -a "$HAS_PAM" = no; then
+ AC_MSG_ERROR([*** cannot find PAM on this system])
+fi
+if test "$with_pam" != no -a "$HAS_PAM" = yes; then
+ AC_DEFINE(HAVE_PAM)
+ pam_msg=yes
+fi
+
# Gtk 2.0 check
AC_ARG_WITH(gtk2, [ --with-gtk2 Enable GTK2 support])
DOLDA_PKG([HAS_GTK2], [test "$with_gtk2" = no && HAS_GTK2=no],
echo
echo "Dolda Connect has been configured with the following settings:"
echo
+echo " PAM support: $pam_msg"
echo " Kerberos 5 support: $krb_msg"
echo " GTK2 user interface: $enable_gtk2ui"
echo " GTK2 progress bars: $enable_gtk2pbar"
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
-#include <ucontext.h>
-#include <security/pam_appl.h>
#include <errno.h>
#ifdef HAVE_CONFIG_H
#include "utils.h"
#include "conf.h"
#include "log.h"
+#include "module.h"
+
+#ifdef HAVE_PAM
+#include <ucontext.h>
+#include <security/pam_appl.h>
struct pamdata
{
return(rc);
}
-struct authmech authmech_pam =
+static struct authmech authmech_pam =
{
.inithandle = inithandle,
.release = release,
.name = L"pam",
.enabled = 1
};
+
+static int init(int hup)
+{
+ if(!hup)
+ regmech(&authmech_pam);
+ return(0);
+}
+
+static struct configvar myvars[] =
+{
+ /** The name of the PAM service file to use. */
+ {CONF_VAR_STRING, "pamserv", {.str = L"doldacond"}},
+ {CONF_VAR_END}
+};
+
+static struct module me =
+{
+ .conf =
+ {
+ .vars = myvars
+ },
+ .init = init,
+ .name = "auth-pam"
+};
+
+MODULE(me);
+
+#endif /* HAVE_PAM */
static void preinit(int hup)
{
- extern struct authmech authmech_pam;
-
if(hup)
return;
regmech(&authless);
- regmech(&authmech_pam);
}
static int init(int hup)
static struct configvar myvars[] =
{
- /** The name of the PAM service file to use. */
- {CONF_VAR_STRING, "pamserv", {.str = L"doldacond"}},
/** Specifies whether insecure authentication is to be allowed. If
* you are not completely sure what you are doing, never turn this
* on without also turning on net.onlylocal. */