diff --git a/cde/configure.ac b/cde/configure.ac index 238fa3557..e11679125 100644 --- a/cde/configure.ac +++ b/cde/configure.ac @@ -192,6 +192,11 @@ AC_SUBST(LIBMMDB, '$(top_builddir)/lib/DtMmdb/libDtMmdb.la') AC_SUBST(LIBHELP, '$(top_builddir)/lib/DtHelp/libDtHelp.la') AC_SUBST(LIBCSA, '$(top_builddir)/lib/csa/libcsa.la') +AC_SUBST(LIBPAMSVC, '$(top_builddir)/lib/DtPamSvc/libDtPamSvc.la') + +dnl we do not inclue the DtPamSvc library here as it is not needed +dnl for everything. + AC_SUBST(DTCLIENTLIBS, '$(LIBPRINT) $(LIBHELP) $(LIBWIDGET) $(LIBSVC) \ $(LIBTT) $(LIBXIN)') @@ -203,6 +208,8 @@ AC_SUBST(XM_INCDIR, '-I$(top_builddir)/include/Xm') AC_SUBST(CSA_INCDIR, '-I$(top_builddir)/include/csa') AC_SUBST(SPC_INCDIR, '-I$(top_builddir)/include/SPC') +dnl language enables + AC_ARG_ENABLE([german], AS_HELP_STRING([--enable-german], [Build German locale (default=no)]), [enable_de="yes"], [enable_de=""] @@ -370,7 +377,7 @@ fi dnl headers AC_HEADER_STDC -AC_CHECK_HEADERS([locale.h]) +AC_CHECK_HEADERS([locale.h security/pam_appl.h]) dnl libraries AC_CHECK_LIB(m, cosf) @@ -437,6 +444,13 @@ else AC_SUBST(FREETYPE_LIBS) fi +dnl figure out pam support + +AC_CHECK_LIB(pam, pam_start, + [SOURCE_CPP_DEFINES="${SOURCE_CPP_DEFINES} -DHAS_PAM_LIBRARY"]) + +AM_CONDITIONAL([HAS_PAM_LIBRARY], [test "x$ac_cv_lib_pam_pam_start" = "xyes"]) + dnl Figure out TCL SC_PATH_TCLCONFIG @@ -494,6 +508,8 @@ lib/tt/bin/ttsession/Makefile lib/DtSvc/Makefile +lib/DtPamSvc/Makefile + lib/DtSearch/Makefile lib/DtSearch/raima/Makefile @@ -571,6 +587,7 @@ programs/dtlogin/Makefile programs/dtlogin/config/Makefile programs/dtsession/Makefile +programs/dtsession/config/Makefile programs/dthello/Makefile diff --git a/cde/lib/DtPamSvc/PamSvc.h b/cde/include/PamSvc.h similarity index 100% rename from cde/lib/DtPamSvc/PamSvc.h rename to cde/include/PamSvc.h diff --git a/cde/lib/DtPamSvc/Makefile.am b/cde/lib/DtPamSvc/Makefile.am new file mode 100644 index 000000000..cdc2b2e75 --- /dev/null +++ b/cde/lib/DtPamSvc/Makefile.am @@ -0,0 +1,10 @@ +MAINTAINERCLEANFILES = Makefile.in + +lib_LTLIBRARIES = libDtPamSvc.la + +libDtPamSvc_la_SOURCES = PamSvc.c ${top_srcdir}/Dt/PamSvc.h + +libDtPamSvc_la_LIBADD = -lpam + +libDtPamSvc_la_LDFLAGS = -version-info 2:1:0 + diff --git a/cde/lib/DtPamSvc/PamSvc.c b/cde/lib/DtPamSvc/PamSvc.c index 1e8c571e9..625656295 100644 --- a/cde/lib/DtPamSvc/PamSvc.c +++ b/cde/lib/DtPamSvc/PamSvc.c @@ -51,6 +51,9 @@ #include #include #include +#if defined(__linux__) +#include +#endif #include "PamSvc.h" /* diff --git a/cde/lib/Makefile.am b/cde/lib/Makefile.am index e0a6ffe8e..acba446fe 100644 --- a/cde/lib/Makefile.am +++ b/cde/lib/Makefile.am @@ -2,3 +2,7 @@ MAINTAINERCLEANFILES = Makefile.in SUBDIRS = DtXinerama tt DtSvc DtSearch DtWidget DtHelp DtPrint DtTerm \ DtMrm csa + +if HAS_PAM_LIBRARY +SUBDIRS += DtPamSvc +endif diff --git a/cde/programs/dtlogin/Makefile.am b/cde/programs/dtlogin/Makefile.am index 9551513dc..a5943591f 100644 --- a/cde/programs/dtlogin/Makefile.am +++ b/cde/programs/dtlogin/Makefile.am @@ -2,6 +2,14 @@ SUBDIRS = config bin_PROGRAMS = dtlogin dtgreet dtchooser +if HAS_PAM_LIBRARY +PAM_LIB = -lpam +DTPAMSVCLIB = @LIBPAMSVC@ +else +PAM_LIB = +DTPAMSVCLIB = +endif + XDMDIR = $(CDE_LOGFILES_TOP) DEF_SERVER = $(XBINDIR)/X @@ -22,7 +30,7 @@ dtlogin_SOURCES = access.c account.c auth.c genauth.c daemon.c dm.c \ dpylist.c error.c file.c mitauth.c protodpy.c policy.c \ reset.c server.c session.c socket.c util.c \ verify.c sysauth.c fontpath.c qualify.c choose.c netaddr.c \ - xdmcp.c + xdmcp.c $(PAM_SRCS) # We play a game here with resources.o (dtlogin). It needs special options. noinst_LIBRARIES = libresource.a @@ -49,7 +57,7 @@ dtchooser_SOURCES = chooser.c dtchooser.c vglogo.c vgutil.c vgcallback.c \ vglang.c dtlogin_LDADD = libresource.a @DTCLIENTLIBS@ -lXau -lXmu -lXext -lXdmcp \ - $(FREETYPE_LIBS) $(XTOOLLIB) $(TIRPCLIB) + $(FREETYPE_LIBS) $(XTOOLLIB) $(TIRPCLIB) $(DTPAMSVCLIB) $(PAM_LIB) dtgreet_LDADD = $(DTCLIENTLIBS) $(FREETYPE_LIBS) $(XTOOLLIB) diff --git a/cde/programs/dtlogin/config/Makefile.am b/cde/programs/dtlogin/config/Makefile.am index faa7fb5c9..4fccbdbf4 100644 --- a/cde/programs/dtlogin/config/Makefile.am +++ b/cde/programs/dtlogin/config/Makefile.am @@ -4,12 +4,24 @@ AM_CPPFLAGS = -DCDE_CONFIGURATION_TOP=$(CDE_CONFIGURATION_TOP) \ -DCDE_LOGFILES_TOP=$(CDE_LOGFILES_TOP) \ -DKORNSHELL=$(KSH) +CPP_TARGETS = 0060.dtsysenv Dtlogin Xaccess Xconfig Xconfig.con \ + Xconfig.nc Xfailsafe Xreset Xresources Xresources.ive \ + Xservers Xservers.con Xservers.nc Xsession Xsession.ive \ + Xsetup Xstartup current.session display.current.session \ + display.home.session dtlslocale dtprofile home.session \ + sys.dtprofile + + + if LINUX AM_CPPFLAGS += -DXPROJECTROOT="/usr" -Dlinux -D__linux__ endif if FREEBSD AM_CPPFLAGS += -DFREEBSD -DXPROJECTROOT="/usr/local" -D__FreeBSD__ +PAM_AUTHENTICATION_MODULE = /usr/local/lib/security/pam_pwauth_suid.so +AM_CPPFLAGS += -DPAM_AUTHENTICATION_MODULE=$(PAM_AUTHENTICATION_MODULE) +CPP_TARGETS += pam.d.dtlogin endif if SOLARIS @@ -22,20 +34,15 @@ endif if NETBSD AM_CPPFLAGS += -DXPROJECTROOT="/usr/X11R7" -D__NetBSD__ +PAM_AUTHENTICATION_MODULE = /usr/pkg/lib/security/pam_pwauth_suid.so +AM_CPPFLAGS += -DPAM_AUTHENTICATION_MODULE=$(PAM_AUTHENTICATION_MODULE) +CPP_TARGETS += pam.d.dtlogin endif if BSD AM_CPPFLAGS += -DCSRG_BASED endif - -CPP_TARGETS = 0060.dtsysenv Dtlogin Xaccess Xconfig Xconfig.con \ - Xconfig.nc Xfailsafe Xreset Xresources Xresources.ive \ - Xservers Xservers.con Xservers.nc Xsession Xsession.ive \ - Xsetup Xstartup current.session display.current.session \ - display.home.session dtlslocale dtprofile home.session \ - sys.dtprofile - BUILT_SOURCES = $(CPP_TARGETS) CLEANFILES = $(CPP_TARGETS) @@ -149,3 +156,7 @@ home.session: home.session.src $(RM) $@ $(GENCPP) -P -DXCOMM=# $(AM_CPPFLAGS) $< > $@ +pam.d.dtlogin: pam.d.dtlogin.src + $(RM) $@ + $(GENCPP) -P -DXCOMM=# $(AM_CPPFLAGS) $< > $@ + diff --git a/cde/programs/dtsession/Makefile.am b/cde/programs/dtsession/Makefile.am index 4336ad173..e8afb0265 100644 --- a/cde/programs/dtsession/Makefile.am +++ b/cde/programs/dtsession/Makefile.am @@ -4,6 +4,12 @@ bin_PROGRAMS = dtsession bin_SCRIPTS = dtsession_res +if HAS_PAM_LIBRARY +DTPAMSVCLIB = @LIBPAMSVC@ +else +DTPAMSVCLIB = +endif + dtsession_CFLAGS = -DCDE_INSTALLATION_TOP=\"$(CDE_INSTALLATION_TOP)\" \ -DCDE_CONFIGURATION_TOP=\"$(CDE_CONFIGURATION_TOP)\" \ -Ddtsession @@ -20,7 +26,7 @@ dtsession_SOURCES = SmMain.c SmHelp.c SmGlobals.c SmCommun.c \ SmMigResources.h SmSave.h SmXrm.h -dtsession_LDADD = $(DTCLIENTLIBS) $(XTOOLLIB) +dtsession_LDADD = $(DTCLIENTLIBS) $(XTOOLLIB) $(DTPAMSVCLIB) if SOLARIS dtsession_SOURCES += OWsync.c @@ -51,12 +57,15 @@ LOCAL_CPP_DEFINES = -DCDE_CONFIGURATION_TOP=$(CDE_CONFIGURATION_TOP) \ -DDTSM_CMD4="\"$(DTSM_CMD4)\"" \ -DDTSM_CMD5="\"$(DTSM_CMD5)\"" +SUBDIRS = + if LINUX LOCAL_CPP_DEFINES += -Dlinux -D__linux__ endif if FREEBSD LOCAL_CPP_DEFINES += -DFREEBSD -D__FreeBSD__ +SUBDIRS += config endif if SOLARIS @@ -69,6 +78,7 @@ endif if NETBSD LOCAL_CPP_DEFINES += -D__NetBSD__ +SUBDIRS += config endif if BSD @@ -118,7 +128,13 @@ sys.session.ive: sys.session.src $(GENCPP) -P -DXCOMM=# $(LOCAL_CPP_DEFINES) -DIVE $< > $@ +# systems without a PAM library need dtsession to be SUID root + install-exec-hook: chown root $(DESTDIR)$(bindir)/dtsession +if HAS_PAM_LIBRARY + chmod 755 $(DESTDIR)$(bindir)/dtsession +else chmod 4755 $(DESTDIR)$(bindir)/dtsession +endif diff --git a/cde/programs/dtsession/config/Makefile.am b/cde/programs/dtsession/config/Makefile.am new file mode 100644 index 000000000..1664fb9f9 --- /dev/null +++ b/cde/programs/dtsession/config/Makefile.am @@ -0,0 +1,23 @@ +MAINTAINERCLEANFILES = Makefile.in + +CPP_TARGET = pam.d.dtsession + +BUILT_SOURCES = $(CPP_TARGET) +CLEANFILES = $(CPP_TARGET) + +cfgdir = $(CDE_INSTALLATION_TOP)/config +dist_cfg_DATA = $(CPP_TARGET) + + +if FREEBSD +PAM_AUTHENTICATION_MODULE = /usr/local/lib/security/pam_pwauth_suid.so +endif + +if NETBSD +PAM_AUTHENTICATION_MODULE = /usr/pkg/lib/security/pam_pwauth_suid.so +endif + +pam.d.dtsession: pam.d.dtsession.src + $(RM) $@ + $(GENCPP) -P -DXCOMM=# -DPAM_AUTHENTICATION_MODULE=$(PAM_AUTHENTICATION_MODULE) $< > $@ +