diff options
-rw-r--r-- | .build.yml | 110 | ||||
-rw-r--r-- | .travis.yml | 43 | ||||
-rw-r--r-- | README.md | 4 | ||||
-rw-r--r-- | configure.ac | 53 | ||||
-rw-r--r-- | debian/changelog | 7 | ||||
-rw-r--r-- | debian/compat | 1 | ||||
-rw-r--r-- | debian/control | 32 | ||||
-rw-r--r-- | debian/copyright | 24 | ||||
-rw-r--r-- | debian/libpam-freerdp-dev.install (renamed from debian/libpam-freerdp2-dev.install) | 0 | ||||
-rw-r--r-- | debian/libpam-freerdp-dev.lintian-overrides (renamed from debian/libpam-freerdp2-dev.lintian-overrides) | 0 | ||||
-rw-r--r-- | debian/libpam-freerdp.install | 2 | ||||
-rw-r--r-- | debian/libpam-freerdp2.install | 2 | ||||
-rwxr-xr-x | debian/rules | 31 | ||||
-rw-r--r-- | include/pam-freerdp.h (renamed from include/pam-freerdp2.h) | 16 | ||||
-rw-r--r-- | src/Makefile.am | 57 | ||||
-rw-r--r-- | src/freerdp-auth-check.c (renamed from src/freerdp2-auth-check.c) | 33 | ||||
-rw-r--r-- | src/pam-freerdp-children.c (renamed from src/pam-freerdp2-children.c) | 4 | ||||
-rw-r--r-- | src/pam-freerdp-children.h (renamed from src/pam-freerdp2-children.h) | 6 | ||||
-rw-r--r-- | src/pam-freerdp-private.h (renamed from src/pam-freerdp2-private.h) | 6 | ||||
-rw-r--r-- | src/pam-freerdp.c (renamed from src/pam-freerdp2.c) | 24 | ||||
-rw-r--r-- | tests/Makefile.am | 36 | ||||
-rw-r--r-- | tests/mock_guest.c | 25 | ||||
-rw-r--r-- | tests/mock_pam.c | 64 | ||||
-rw-r--r-- | tests/mock_pam.h | 1 | ||||
-rw-r--r-- | tests/test-freerdp-auth.c (renamed from tests/test-freerdp2-auth.c) | 0 | ||||
-rw-r--r-- | tests/test-freerdp-wrapper.cc (renamed from tests/test-freerdp2-wrapper.cc) | 6 |
26 files changed, 416 insertions, 171 deletions
diff --git a/.build.yml b/.build.yml new file mode 100644 index 0000000..e1dd492 --- /dev/null +++ b/.build.yml @@ -0,0 +1,110 @@ +######################################################### +# THE FOLLOWING LINES IS USED BY docker-build +########################################################## +requires: + archlinux: + # Useful URL: https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=libpam-freerdp + - clang + - gcc + - git + - make + - startup-notification + - which + # FIXME: add missing build-dependencies + + debian: + # Useful URL: https://salsa.debian.org/debian-remote-team/libpam-freerdp + - autopoint + - clang + - clang-tools + - g++ + - cppcheck + - git + - make + - libtool + - libgtest-dev + - libpam0g-dev + - pkg-config + testing: + - freerdp3-dev + stable: + - freerdp2-dev + + ubuntu: + - autopoint + - clang + - clang-tools + - g++ + - git + - make + - libtool + - freerdp3-dev + - libgtest-dev + - libpam0g-dev + - pkg-config + +variables: + - 'CHECKERS=" + -enable-checker deadcode.DeadStores + -enable-checker alpha.deadcode.UnreachableCode + -enable-checker alpha.core.CastSize + -enable-checker alpha.core.CastToStruct + -enable-checker alpha.core.IdenticalExpr + -enable-checker alpha.core.SizeofPtr + -enable-checker alpha.security.ArrayBoundV2 + -enable-checker alpha.security.MallocOverflow + -enable-checker alpha.security.ReturnPtrRange + -enable-checker alpha.unix.SimpleStream + -enable-checker alpha.unix.cstring.BufferOverlap + -enable-checker alpha.unix.cstring.NotNullTerminated + -enable-checker alpha.unix.cstring.OutOfBounds + -enable-checker alpha.core.FixedAddr + -enable-checker security.insecureAPI.strcpy"' + +build_scripts: + - if [ ${DISTRO_NAME} == "debian" ];then + - export CFLAGS+=" -Wsign-compare -Wunused-parameter" + - cppcheck --enable=warning,style,performance,portability,information,missingInclude . + - fi + - + - if [ -e ./autogen.sh ]; then + - NOCONFIGURE=1 ./autogen.sh + - scan-build $CHECKERS ./configure --prefix=/usr --enable-gtk-doc --enable-compile-warnings=maximum + - elif [ -e ./CMakeLists.txt ]; then + - if [ ${DISTRO_NAME} == "debian" ];then + - scan-build $CHECKERS cmake . -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_VERBOSE_MAKEFILE=ON -DENABLE_TESTS=ON + - else + - scan-build $CHECKERS cmake . -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_VERBOSE_MAKEFILE=ON + - fi + - elif [ -e ./configure.ac ]; then + - autoreconf -vfi + - scan-build $CHECKERS ./configure --prefix=/usr --enable-gtk-doc --enable-compile-warnings=maximum + - else + - exit 1 + - fi + - + - if [ $CPU_COUNT -gt 1 ]; then + - if [ ${DISTRO_NAME} == "debian" ];then + - scan-build $CHECKERS --keep-cc --use-cc=clang --use-c++=clang++ -o html-report make -j $CPU_COUNT + - make clean + - fi + - scan-build $CHECKERS --keep-cc -o html-report make -j $CPU_COUNT + - else + - if [ ${DISTRO_NAME} == "debian" ];then + - scan-build $CHECKERS --keep-cc --use-cc=clang --use-c++=clang++ -o html-report make + - make clean + - fi + - scan-build $CHECKERS --keep-cc -o html-report make + - fi + +after_scripts: + - if [ ${BUILD_TYPE} == "scripts" ];then + - XVFB_RUN="$(which xvfb-run || true)" + - if [ ${DISTRO_NAME} == "debian" ];then + - if [ -e ./autogen.sh ] || [ -e ./configure.ac ]; then + - ${XVFB_RUN} make check + - elif [ -e ./CMakeLists.txt ]; then + - ${XVFB_RUN} env CTEST_OUTPUT_ON_FAILURE=1 make test + - fi + - fi + - fi diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..6ebac89 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,43 @@ +# vim: set ts=2 sts=2 sw=2 expandtab : +dist: bionic +language: shell +os: linux + +arch: + - amd64 + - ppc64le + +services: + - docker + +addons: + apt: + packages: + - python3-pip + - python3-setuptools + +before_install: + # let's use the Ayatana Indicators project's docker build script... + - curl -Ls -o docker-build https://github.com/AyatanaIndicators/ayatana-dev-scripts/raw/master/travis/docker-build + - chmod +x docker-build + +install: + - pip3 install wheel + - pip3 install PyGithub + - ./docker-build --name ${DISTRO} --config .build.yml --install + +script: + - ./docker-build --name ${DISTRO} --verbose --config .build.yml --build scripts + +env: +# temp disable of archlinux builds, see https://gitlab.archlinux.org/archlinux/archlinux-docker/-/issues/56 +# - DISTRO="archlinux:latest" + - DISTRO="debian:testing" + - DISTRO="debian:stable" +# - DISTRO="ubuntu:rolling" + - DISTRO="ubuntu:focal" + +jobs: + exclude: + - env: DISTRO="archlinux:latest" + arch: ppc64le @@ -1,5 +1,5 @@ -# PAM FreeRDP2 +# PAM FreeRDP -A small PAM module to check an RDP Server (using FreeRDP2) for credentials. +A small PAM module to check an RDP Server (using FreeRDPv2/FreeRDPv3) for credentials. This PAM module is needed for Arctica Greeter's Remote Logon feature. diff --git a/configure.ac b/configure.ac index 68a6cec..5a2a567 100644 --- a/configure.ac +++ b/configure.ac @@ -1,4 +1,4 @@ -AC_INIT([libpam-freerdp2], [2.0.0]) +AC_INIT([libpam-freerdp], [2.0.0]) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_MACRO_DIRS([m4]) @@ -26,8 +26,55 @@ fi # FreeRDP ########################### -PKG_CHECK_MODULES(FREERDP2, freerdp2) -PKG_CHECK_MODULES(WINPR2, winpr2) +# FreeRDPv3 +PKG_CHECK_MODULES([FREERDP3], + [freerdp3], + [freerdp3_modules=yes], + [freerdp3_modules=no]) +AC_SUBST([FREERDP3_CFLAGS]) +AC_SUBST([FREERDP3_LIBS]) +AC_SUBST([FREERDP3_LDFLAGS]) +PKG_CHECK_MODULES([WINPR3], + [winpr3], + [], + []) +AC_SUBST([WINPR3_CFLAGS]) +AC_SUBST([WINPR3_LIBS]) +AC_SUBST([WINPR3_LDFLAGS]) +AC_MSG_CHECKING([for FreeRDPv3 libraries]) +AC_MSG_RESULT([$freerdp3_modules]) + +# FreeRDPv2 +PKG_CHECK_MODULES([FREERDP2], + [freerdp2], + [freerdp2_modules=yes], + [freerdp2_modules=no]) +AC_SUBST([FREERDP2_CFLAGS]) +AC_SUBST([FREERDP2_LIBS]) +AC_SUBST([FREERDP2_LDFLAGS]) +PKG_CHECK_MODULES([WINPR2], + [winpr2], + [], + []) +AC_SUBST([WINPR2_CFLAGS]) +AC_SUBST([WINPR2_LIBS]) +AC_SUBST([WINPR2_LDFLAGS]) +AC_MSG_CHECKING([for FreeRDPv2 libraries]) +AC_MSG_RESULT([$freerdp2_modules]) + +dnl FreeRDP detection version selection. +AC_MSG_CHECKING([Whether to build against old FreeRDPv2]) +AC_ARG_WITH([freerdp2], + [AS_HELP_STRING([--with-freerdp2], + [Build against old FreeRDPv2])]) + +AS_IF([test "x$with_freerdp2" = 'xyes'], + [AC_MSG_RESULT(yes) + AS_IF([test "x$freerdp2_modules" = 'xno'], + [AC_MSG_ERROR([requested FreeRDPv2, but not found])])], + [AC_MSG_RESULT([not requested explicitly])]) + +AM_CONDITIONAL([HAVE_FREERDP3], [test "x$freerdp3_modules" = 'xyes' && test "x$with_freerdp2" != 'xyes']) ########################### # PAM Module dir diff --git a/debian/changelog b/debian/changelog index 0b4fbd5..9653459 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +libpam-freerdp (3.0.0-0) UNRELEASED; urgency=medium + + * Rename libpam-freerdp2 back to libpam-freerdp and make things + work and build against freerdp3-dev. + + -- Mike Gabriel <mike.gabriel@das-netzwerkteam.de> Thu, 07 Dec 2017 10:41:09 +0100 + libpam-freerdp2 (2.0.0-0) unstable; urgency=medium * Continue libpam-freerdp under a slightly new name and make things diff --git a/debian/compat b/debian/compat deleted file mode 100644 index ec63514..0000000 --- a/debian/compat +++ /dev/null @@ -1 +0,0 @@ -9 diff --git a/debian/control b/debian/control index a54ed40..acdd996 100644 --- a/debian/control +++ b/debian/control @@ -1,45 +1,43 @@ -Source: libpam-freerdp2 +Source: libpam-freerdp Section: admin Priority: optional Maintainer: Artica Project <devs@lists.arctica-project.org> Uploaders: Mike Gabriel <mike.gabriel@das-netzwerkteam.de> -Build-Depends: cdbs (>= 0.4.93~), - debhelper (>= 9), - dh-autoreconf, +Build-Depends: debhelper-compat (= 12), dpkg-dev (>= 1.16.1.1~), mate-common, - freerdp2-dev (>= 2~), + freerdp3-dev (>= 3~) | freerdp2-dev (>= 2~), libgtest-dev, libpam0g-dev, pkg-config, -Standards-Version: 4.1.4 -Homepage: https://github.com/ArcticaProject/libpam-freerdp2 -Vcs-Git: https://github.com/ArcticaProject/libpam-freerdp2/ -Vcs-Browser: https://github.com/ArcticaProject/libpam-freerdp2/ +Standards-Version: 4.7.0 +Homepage: https://github.com/ArcticaProject/libpam-freerdp +Vcs-Git: https://github.com/ArcticaProject/libpam-freerdp/ +Vcs-Browser: https://github.com/ArcticaProject/libpam-freerdp/ -Package: libpam-freerdp2 +Package: libpam-freerdp Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, - freerdp2-x11, -Description: PAM Module to auth against an RDP server using FreeRDPv2 - Auth and session PAM module that uses FreeRDPv2 to authenticate against + freerdp3-x11 | freerdp2-x11, +Description: PAM Module to auth against an RDP server using FreeRDP + Auth and session PAM module that uses FreeRDP to authenticate against an RDP server as the remote host and user. Local account required. . This PAM module is intended for facilitating Remote Logon into RDP servers using LightDM's Arctica Greeter. -Package: libpam-freerdp2-dev +Package: libpam-freerdp-dev Section: libdevel Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, -Description: PAM Module to auth against an RDP server using FreeRDPv2 (development files) - Auth and session PAM module that uses FreeRDPv2 to authenticate against +Description: PAM Module to auth against an RDP server using FreeRDP (development files) + Auth and session PAM module that uses FreeRDP to authenticate against an RDP server as the remote host and user. Local account required. . This PAM module is intended for facilitating Remote Logon into RDP servers using LightDM's Arctica Greeter. . - This package contains the pam_freerdp2.so header files. + This package contains the pam_freerdp.so header files. diff --git a/debian/copyright b/debian/copyright index 8eb8d0b..322f28b 100644 --- a/debian/copyright +++ b/debian/copyright @@ -1,7 +1,7 @@ Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ -Upstream-Name: libpam-freerdp2 +Upstream-Name: libpam-freerdp Upstream-Contact: Mike Gabriel <mike.gabriel@das-netzwerkteam.de> -Source: https://github.com/ArcticaProject/libpam-freerdp2/ +Source: https://github.com/ArcticaProject/libpam-freerdp/ Files: ChangeLog Makefile.am @@ -12,8 +12,8 @@ Files: ChangeLog debian/changelog debian/compat debian/control - debian/libpam-freerdp2-dev.install - debian/libpam-freerdp2.install + debian/libpam-freerdp-dev.install + debian/libpam-freerdp.install debian/patches/README debian/rules debian/source/format @@ -34,18 +34,18 @@ Comment: Assuming copyright holdership from the majority of other code files. -Files: src/freerdp2-auth-check.c - src/pam-freerdp2-children.c - src/pam-freerdp2-children.h - src/pam-freerdp2.c - tests/test-freerdp2-auth.c +Files: src/freerdp-auth-check.c + src/pam-freerdp-children.c + src/pam-freerdp-children.h + src/pam-freerdp.c + tests/test-freerdp-auth.c Copyright: 2012, Canonical Ltd. License: GPL-3 Files: tests/mock_guest.c tests/mock_guest.h tests/mock_pam.c - tests/test-freerdp2-wrapper.cc + tests/test-freerdp-wrapper.cc Copyright: 2012, Canonical Ltd. License: GPL-3 Comment: @@ -60,12 +60,12 @@ Comment: Assuming copyright holdership from the majority of other code files. -Files: include/pam-freerdp2.h +Files: include/pam-freerdp.h Copyright: 2012, Canonical Ltd. 2012-2013, Mike Gabriel <mike.gabriel@das-netzwerkteam.de> License: GPL-3 -Files: src/pam-freerdp2-private.h +Files: src/pam-freerdp-private.h Copyright: 2018, Mike Gabriel <mike.gabriel@das-netzwerkteam.de> License: GPL-3 diff --git a/debian/libpam-freerdp2-dev.install b/debian/libpam-freerdp-dev.install index 175bba7..175bba7 100644 --- a/debian/libpam-freerdp2-dev.install +++ b/debian/libpam-freerdp-dev.install diff --git a/debian/libpam-freerdp2-dev.lintian-overrides b/debian/libpam-freerdp-dev.lintian-overrides index 4f32408..4f32408 100644 --- a/debian/libpam-freerdp2-dev.lintian-overrides +++ b/debian/libpam-freerdp-dev.lintian-overrides diff --git a/debian/libpam-freerdp.install b/debian/libpam-freerdp.install new file mode 100644 index 0000000..9a36efe --- /dev/null +++ b/debian/libpam-freerdp.install @@ -0,0 +1,2 @@ +lib/ +usr/libexec/ diff --git a/debian/libpam-freerdp2.install b/debian/libpam-freerdp2.install deleted file mode 100644 index 46af1b1..0000000 --- a/debian/libpam-freerdp2.install +++ /dev/null @@ -1,2 +0,0 @@ -lib/ -usr/lib/ diff --git a/debian/rules b/debian/rules index 96d8b0c..bc8f672 100755 --- a/debian/rules +++ b/debian/rules @@ -4,28 +4,19 @@ export DEB_BUILD_MAINT_OPTIONS = hardening=+all DPKG_EXPORT_BUILDFLAGS = 1 include /usr/share/dpkg/buildflags.mk -include /usr/share/cdbs/1/rules/debhelper.mk -include /usr/share/cdbs/1/rules/autoreconf.mk -include /usr/share/cdbs/1/class/autotools.mk -include /usr/share/cdbs/1/rules/utils.mk +%: + dh $@ -DEB_MAKE_CHECK_TARGET = check +# Uncomment for building against freerdp2-dev explicitly if freerdp3-dev _and_ +# freerdp2-dev are installed. +#override_dh_auto_configure: +# dh_auto_configure -- --with-freerdp2 -#pre-build:: -# cp README.md README -# -#cleanbuilddir:: -# rm -f README - -# Remove .a and .la files from /lib/security -remove-cruft:: - find $(DEB_DESTDIR)/lib/security -type f \ - \( -name '*.a' -o -name '*.la' \) \ - -exec rm '{}' + - -common-install-indep:: remove-cruft -common-install-arch:: remove-cruft -common-binary-post-install-arch:: list-missing +override_dh_install: + dh_install + find debian/tmp/lib/security -type f \ + \( -name '*.a' -o -name '*.la' \) \ + -exec rm '{}' + get-orig-source: uscan --noconf --force-download --rename --download-current-version --destdir=.. diff --git a/include/pam-freerdp2.h b/include/pam-freerdp.h index 3635a4f..7d5e277 100644 --- a/include/pam-freerdp2.h +++ b/include/pam-freerdp.h @@ -17,13 +17,13 @@ * Author: Mike Gabriel <mike.gabriel@das-netzwerkteam.de> */ -#ifndef _PAM_FREERDP2_H_ -#define _PAM_FREERDP2_H_ +#ifndef _PAM_FREERDP_H_ +#define _PAM_FREERDP_H_ -#define PAM_FREERDP2_PROMPT_GUESTLOGIN "login:" -#define PAM_FREERDP2_PROMPT_USER "remote login:" -#define PAM_FREERDP2_PROMPT_HOST "remote host:" -#define PAM_FREERDP2_PROMPT_DOMAIN "remote domain:" -#define PAM_FREERDP2_PROMPT_PASSWORD "password:" +#define PAM_FREERDP_PROMPT_GUESTLOGIN "login:" +#define PAM_FREERDP_PROMPT_USER "remote login:" +#define PAM_FREERDP_PROMPT_HOST "remote host:" +#define PAM_FREERDP_PROMPT_DOMAIN "remote domain:" +#define PAM_FREERDP_PROMPT_PASSWORD "password:" -#endif //_PAM_FREERDP2_H_ +#endif //_PAM_FREERDP_H_ diff --git a/src/Makefile.am b/src/Makefile.am index 581b080..32a8184 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,61 +1,80 @@ NULL = pamlibdir = $(PAMMODULEDIR) -pamlib_LTLIBRARIES = pam_freerdp2.la +pamlib_LTLIBRARIES = pam_freerdp.la -pam_freerdp2_la_SOURCES = \ +pam_freerdp_la_SOURCES = \ auth-check-path.c auth-check-path.h \ - pam-freerdp2.c \ - pam-freerdp2-children.c \ + pam-freerdp.c \ + pam-freerdp-children.c \ $(NULL) -pam_freerdp2_la_LDFLAGS = \ +pam_freerdp_la_LDFLAGS = \ -no-undefined \ -module \ -avoid-version \ $(COVERAGE_LDFLAGS) \ $(NULL) -pam_freerdp2_la_CFLAGS = \ +pam_freerdp_la_CFLAGS = \ -Wall -Werror \ - -DAUTH_CHECK="\"$(libexecdir)/freerdp2-auth-check\"" \ + -DAUTH_CHECK="\"$(libexecdir)/freerdp-auth-check\"" \ $(COVERAGE_CFLAGS) \ $(NULL) -pam_freerdp2_la_CPPFLAGS = \ +pam_freerdp_la_CPPFLAGS = \ -I$(top_srcdir)/include \ $(NULL) -pam_freerdp2_la_LIBADD = \ +pam_freerdp_la_LIBADD = \ -lpam \ $(NULL) -pam_freerdp2includedir = $(includedir)/security/ -pam_freerdp2include_HEADERS = \ - $(top_srcdir)/include/pam-freerdp2.h \ +pam_freerdpincludedir = $(includedir)/security/ +pam_freerdpinclude_HEADERS = \ + $(top_srcdir)/include/pam-freerdp.h \ $(NULL) libexec_PROGRAMS = \ - freerdp2-auth-check \ + freerdp-auth-check \ $(NULL) -freerdp2_auth_check_SOURCES = \ - freerdp2-auth-check.c \ +freerdp_auth_check_SOURCES = \ + freerdp-auth-check.c \ $(NULL) -freerdp2_auth_check_CFLAGS = \ +if HAVE_FREERDP3 +freerdp_auth_check_CFLAGS = \ + -Wall -Werror \ + $(FREERDP3_CFLAGS) \ + $(WINPR3_CFLAGS) \ + $(COVERAGE_CFLAGS) \ + $(NULL) +freerdp_auth_check_LDADD = \ + $(FREERDP3_LIBS) \ + $(WINPR3_LIBS) \ + $(NULL) + +freerdp_auth_check_LDFLAGS = \ + $(FREERDP3_LDFLAGS) \ + $(WINPR3_LDFLAGS) \ + $(COVERAGE_LDFLAGS) \ + $(NULL) +else +freerdp_auth_check_CFLAGS = \ + -Wall -Werror \ $(FREERDP2_CFLAGS) \ $(WINPR2_CFLAGS) \ $(COVERAGE_CFLAGS) \ $(NULL) - -freerdp2_auth_check_LDADD = \ +freerdp_auth_check_LDADD = \ $(FREERDP2_LIBS) \ $(WINPR2_LIBS) \ $(NULL) -freerdp2_auth_check_LDFLAGS = \ +freerdp_auth_check_LDFLAGS = \ $(FREERDP2_LDFLAGS) \ $(WINPR2_LDFLAGS) \ $(COVERAGE_LDFLAGS) \ $(NULL) +endif
\ No newline at end of file diff --git a/src/freerdp2-auth-check.c b/src/freerdp-auth-check.c index 04558fb..752f2bf 100644 --- a/src/freerdp2-auth-check.c +++ b/src/freerdp-auth-check.c @@ -18,41 +18,42 @@ #include <freerdp/freerdp.h> #include <freerdp/channels/channels.h> +#include <freerdp/version.h> #include <string.h> #include <sys/mman.h> #include <winpr/wlog.h> BOOL -auth_context_new (freerdp * instance, rdpContext * context) +auth_context_new (freerdp __attribute__((unused)) *instance, rdpContext __attribute__((unused)) *context) { return TRUE; } void -auth_context_free (freerdp * instance, rdpContext * context) +auth_context_free (freerdp __attribute__((unused)) *instance, rdpContext __attribute__((unused)) *context) { return; } BOOL -auth_pre_connect (freerdp * instance) +auth_pre_connect (freerdp __attribute__((unused)) *instance) { return TRUE; } BOOL -auth_post_connect (freerdp * instance) +auth_post_connect (freerdp __attribute__((unused)) *instance) { return TRUE; } int -main (int argc, char * argv[]) +main (int argc, char *argv[]) { char password[512]; if (argc != 4) { - printf("Usage: echo <passwd> | freerdp2-auth-check <host>[:<port>] <user> <domain>\n\n"); + printf("Usage: echo <passwd> | freerdp-auth-check <host>[:<port>] <user> <domain>\n\n"); printf("ERROR: Incorrect number of parameters.\n\n"); return -1; } @@ -91,15 +92,26 @@ main (int argc, char * argv[]) /* We've got a port to deal with */ colonloc[0] = '\0'; colonloc++; - +#if FREERDP_VERSION_MAJOR >= 3 + freerdp_settings_set_uint32(instance->context->settings, FreeRDP_ServerPort, strtoul(colonloc, NULL, 10)); +#else instance->settings->ServerPort = strtoul(colonloc, NULL, 10); +#endif } +#if FREERDP_VERSION_MAJOR >= 3 + freerdp_settings_set_bool(instance->context->settings, FreeRDP_AuthenticationOnly, TRUE); + freerdp_settings_set_string(instance->context->settings, FreeRDP_ServerHostname, argv[1]); + freerdp_settings_set_string(instance->context->settings, FreeRDP_Username, argv[2]); + freerdp_settings_set_string(instance->context->settings, FreeRDP_Domain, argv[3]); + freerdp_settings_set_string(instance->context->settings, FreeRDP_Password, password); +#else instance->settings->AuthenticationOnly = TRUE; instance->settings->ServerHostname = argv[1]; instance->settings->Username = argv[2]; instance->settings->Domain = argv[3]; instance->settings->Password = password; +#endif BOOL connection_successful; connection_successful = freerdp_connect(instance); @@ -107,10 +119,17 @@ main (int argc, char * argv[]) memset(password, 0, sizeof(password)); munlock(password, sizeof(password)); +#if FREERDP_VERSION_MAJOR >= 3 + freerdp_settings_set_string(instance->context->settings, FreeRDP_Password, NULL); + freerdp_settings_set_string(instance->context->settings, FreeRDP_ServerHostname, NULL); + freerdp_settings_set_string(instance->context->settings, FreeRDP_Username, NULL); + freerdp_settings_set_string(instance->context->settings, FreeRDP_Domain, NULL); +#else instance->settings->Password = NULL; instance->settings->ServerHostname = NULL; instance->settings->Username = NULL; instance->settings->Domain = NULL; +#endif int retval = 0; if (!connection_successful) { diff --git a/src/pam-freerdp2-children.c b/src/pam-freerdp-children.c index 91b4a3a..8cd4ef8 100644 --- a/src/pam-freerdp2-children.c +++ b/src/pam-freerdp-children.c @@ -34,7 +34,7 @@ #include <security/pam_modutil.h> #include <security/pam_appl.h> -#include "pam-freerdp2-children.h" +#include "pam-freerdp-children.h" #include "auth-check-path.h" void @@ -172,7 +172,7 @@ session_socket_handler (struct passwd * pwdent, int readypipe, const char * ruse memset(&socket_addr, 0, sizeof(struct sockaddr_un)); socket_addr.sun_family = AF_UNIX; strncpy(socket_addr.sun_path, pwdent->pw_dir, sizeof(socket_addr.sun_path) - 1); - strncpy(socket_addr.sun_path + strlen(pwdent->pw_dir), "/.freerdp2-socket", (sizeof(socket_addr.sun_path) - strlen(pwdent->pw_dir)) - 1); + strncpy(socket_addr.sun_path + strlen(pwdent->pw_dir), "/.freerdp-socket", (sizeof(socket_addr.sun_path) - strlen(pwdent->pw_dir)) - 1); /* We bind the socket before forking so that we ensure that there isn't a race condition to get to it. Things will block diff --git a/src/pam-freerdp2-children.h b/src/pam-freerdp-children.h index dac3b19..1109587 100644 --- a/src/pam-freerdp2-children.h +++ b/src/pam-freerdp-children.h @@ -16,8 +16,8 @@ * Author: Ted Gould <ted@canonical.com> */ -#ifndef _PAM_FREERDP2_CHILDREN_H_ -#define _PAM_FREERDP2_CHILDREN_H_ +#ifndef _PAM_FREERDP_CHILDREN_H_ +#define _PAM_FREERDP_CHILDREN_H_ #define PAM_TYPE_RDP_USER 1234 #define PAM_TYPE_RDP_SERVER 1235 @@ -29,4 +29,4 @@ pam_sm_authenticate_helper (int *stdinpipe, const char* username, const char* rh int session_socket_handler (struct passwd * pwdent, int readypipe, const char * ruser, const char * rhost, const char * rdomain, const char * password); -#endif //_PAM_FREERDP2_CHILDREN_H_ +#endif //_PAM_FREERDP_CHILDREN_H_ diff --git a/src/pam-freerdp2-private.h b/src/pam-freerdp-private.h index 74663ef..0b7520f 100644 --- a/src/pam-freerdp2-private.h +++ b/src/pam-freerdp-private.h @@ -17,8 +17,8 @@ * Author libpam-freerdp (where we forked from): Ted Gould <ted@canonical.com> */ -#ifndef _PAM_FREERDP2_PRIVATE_H_ -#define _PAM_FREERDP2_PRIVATE_H_ +#ifndef _PAM_FREERDP_PRIVATE_H_ +#define _PAM_FREERDP_PRIVATE_H_ PAM_EXTERN int pam_sm_authenticate (pam_handle_t *pamh, int flags, int argc, const char **argv); @@ -29,4 +29,4 @@ pam_sm_close_session (pam_handle_t *pamh, int flags, int argc, const char **argv PAM_EXTERN int pam_sm_setcred (pam_handle_t *pamh, int flags, int argc, const char ** argv); -#endif //_PAM_FREERDP2_PRIVATE_H_ +#endif //_PAM_FREERDP_PRIVATE_H_ diff --git a/src/pam-freerdp2.c b/src/pam-freerdp.c index 18a4c18..8bf505f 100644 --- a/src/pam-freerdp2.c +++ b/src/pam-freerdp.c @@ -36,9 +36,9 @@ #include <security/pam_modutil.h> #include <security/pam_appl.h> -#include "pam-freerdp2.h" +#include "pam-freerdp.h" -#include "pam-freerdp2-children.h" +#include "pam-freerdp-children.h" #include "auth-check-path.h" static int unpriveleged_kill (struct passwd * pwdent); @@ -93,20 +93,20 @@ get_item (pam_handle_t * pamh, int type) switch (type) { case PAM_USER: - message.msg = PAM_FREERDP2_PROMPT_GUESTLOGIN; + message.msg = PAM_FREERDP_PROMPT_GUESTLOGIN; break; case PAM_TYPE_RDP_USER: - message.msg = PAM_FREERDP2_PROMPT_USER; + message.msg = PAM_FREERDP_PROMPT_USER; break; case PAM_TYPE_RDP_SERVER: - message.msg = PAM_FREERDP2_PROMPT_HOST; + message.msg = PAM_FREERDP_PROMPT_HOST; break; case PAM_AUTHTOK: - message.msg = PAM_FREERDP2_PROMPT_PASSWORD; + message.msg = PAM_FREERDP_PROMPT_PASSWORD; message.msg_style = PAM_PROMPT_ECHO_OFF; break; case PAM_TYPE_RDP_DOMAIN: - message.msg = PAM_FREERDP2_PROMPT_DOMAIN; + message.msg = PAM_FREERDP_PROMPT_DOMAIN; break; default: return NULL; @@ -240,7 +240,7 @@ get_item (pam_handle_t * pamh, int type) /* Authenticate. We need to make sure we have a user account, that there are remote accounts and then verify them with FreeRDP */ PAM_EXTERN int -pam_sm_authenticate (pam_handle_t *pamh, int flags, int argc, const char **argv) +pam_sm_authenticate (pam_handle_t *pamh, int __attribute__((unused)) flags, int __attribute__((unused)) argc, const char __attribute__((unused)) **argv) { char * username = NULL; char * password = NULL; @@ -305,7 +305,7 @@ pid_t session_pid = 0; give the credentials to the session itself so that it can startup the xfreerdp viewer for the login */ PAM_EXTERN int -pam_sm_open_session (pam_handle_t *pamh, int flags, int argc, const char ** argv) +pam_sm_open_session (pam_handle_t *pamh, int __attribute__((unused)) flags, int __attribute__((unused)) argc, const char __attribute__((unused)) **argv) { char * username = NULL; char * password = NULL; @@ -372,7 +372,7 @@ done: /* Close Session. Make sure our little guy has died so he doesn't become a zombie and eat things. */ PAM_EXTERN int -pam_sm_close_session (pam_handle_t *pamh, int flags, int argc, const char **argv) +pam_sm_close_session (pam_handle_t *pamh, int __attribute__((unused)) flags, int __attribute__((unused)) argc, const char __attribute__((unused)) **argv) { if (session_pid == 0) { return PAM_IGNORE; @@ -452,7 +452,7 @@ unpriveleged_kill (struct passwd * pwdent) /* LightDM likes to have this function around, but we don't need it as we don't have a token hanging around. */ PAM_EXTERN int -pam_sm_setcred (pam_handle_t *pamh, int flags, int argc, const char ** argv) +pam_sm_setcred (pam_handle_t __attribute__((unused)) *pamh, int __attribute__((unused)) flags, int __attribute__((unused)) argc, const char __attribute__((unused)) **argv) { return PAM_SUCCESS; } @@ -460,7 +460,7 @@ pam_sm_setcred (pam_handle_t *pamh, int flags, int argc, const char ** argv) #ifdef PAM_STATIC struct pam_module _pam_freerdp_modstruct = { - "pam_freerdp2", + "pam_freerdp", pam_sm_authenticate, pam_sm_setcred, NULL, diff --git a/tests/Makefile.am b/tests/Makefile.am index 29b0a98..e945201 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -5,16 +5,16 @@ DISTCLEANFILES = EXTRA_DIST = TESTS = \ - test-freerdp2-wrapper \ + test-freerdp-wrapper \ $(NULL) check_PROGRAMS = \ - test-freerdp2-auth \ + test-freerdp-auth \ $(TESTS) \ $(NULL) CLEANFILES += \ - test-freerdp2-auth \ + test-freerdp-auth \ $(TESTS) \ $(NULL) @@ -76,42 +76,34 @@ libgtest_main_a_CXXFLAGS = \ # Wrapper ########################## -test_freerdp2_wrapper: test-freerdp2-auth +test_freerdp_wrapper: test-freerdp-auth -test_freerdp2_wrapper_SOURCES = \ +test_freerdp_wrapper_SOURCES = \ mock_pam.c mock_pam.h \ mock_guest.c mock_guest.h \ - test-freerdp2-wrapper.cc \ + test-freerdp-wrapper.cc \ $(NULL) -test_freerdp2_wrapper_LDADD = \ +test_freerdp_wrapper_LDADD = \ libgtest.a libgtest_main.a \ - ${top_srcdir}/src/pam_freerdp2.la \ - $(FREERDP2_LIBS) \ - $(WINPR2_LIBS) \ + ${top_srcdir}/src/pam_freerdp.la \ $(NULL) -test_freerdp2_wrapper_CPPFLAGS = \ +test_freerdp_wrapper_CPPFLAGS = \ $(AM_CPPFLAGS) \ -I${top_srcdir}/include \ -I${top_srcdir}/src \ $(GTEST_CPPFLAGS) \ - $(FREERDP2_CPPFLAGS) \ - $(WINPR2_CPPFLAGS) \ $(NULL) -test_freerdp2_wrapper_CXXFLAGS = \ +test_freerdp_wrapper_CXXFLAGS = \ $(AM_CXXFLAGS) \ - -DAUTH_CHECK="\"$(abs_builddir)/test-freerdp2-auth\"" \ + -DAUTH_CHECK="\"$(abs_builddir)/test-freerdp-auth\"" \ $(GTEST_CXXFLAGS) \ - $(FREERDP2_CXXFLAGS) \ - $(WINPR2_CXXFLAGS) \ $(NULL) -test_freerdp2_wrapper_LDFLAGS = \ +test_freerdp_wrapper_LDFLAGS = \ $(GTEST_LDFLAGS) \ - $(FREERDP2_LDFLAGS) \ - $(WINPR2_LDFLAGS) \ -pthread \ $(NULL) @@ -119,6 +111,6 @@ test_freerdp2_wrapper_LDFLAGS = \ # Auth tool ########################## -test_freerdp2_auth_SOURCES = \ - test-freerdp2-auth.c \ +test_freerdp_auth_SOURCES = \ + test-freerdp-auth.c \ $(NULL) diff --git a/tests/mock_guest.c b/tests/mock_guest.c index 7673995..dad9d5d 100644 --- a/tests/mock_guest.c +++ b/tests/mock_guest.c @@ -22,39 +22,44 @@ static struct passwd guest = { "guest", "/tmp", "/bin/true" }; struct passwd * -getpwnam (const char *username) +getpwnam (const char __attribute__((unused)) *username) { return &guest; } int -setgroups(size_t size, const gid_t *list) +setgroups(size_t __attribute__((unused)) size, + const gid_t __attribute__((unused)) *list) { errno = EPERM; return -1; } int -setgid(gid_t gid) +setgid(gid_t __attribute__((unused)) gid) { return 0; } int -setuid(uid_t uid) +setuid(uid_t __attribute__((unused)) uid) { return 0; } int -setegid(gid_t gid) +setegid(gid_t __attribute__((unused)) gid) { return 0; } int -seteuid(uid_t uid) +seteuid(uid_t __attribute__((unused)) uid) { return 0; } -int chmod(const char *path, mode_t mode) +int chmod(const char __attribute__((unused)) *path, + mode_t __attribute__((unused)) mode) { return 0; } -int chown(const char *path, uid_t owner, gid_t group) +int chown(const char __attribute__((unused)) *path, + uid_t __attribute__((unused)) owner, + gid_t __attribute__((unused)) group) { return 0; } -int execvp(const char *file, char *const argv[]) +int execvp(const char __attribute__((unused)) *file, + char __attribute__((unused)) *const argv[]) { return 0; } @@ -84,7 +89,7 @@ socket_sucker () serv_addr.sun_family = AF_UNIX; - int printsize = snprintf(serv_addr.sun_path, sizeof(serv_addr.sun_path) - 1, "%s/%s", home, ".freerdp2-socket"); + unsigned long int printsize = (unsigned long int)snprintf(serv_addr.sun_path, sizeof(serv_addr.sun_path) - 1, "%s/%s", home, ".freerdp-socket"); if (printsize > sizeof(serv_addr.sun_path) - 1 || printsize < 0) { return -1; } diff --git a/tests/mock_pam.c b/tests/mock_pam.c index ce57973..ca222ba 100644 --- a/tests/mock_pam.c +++ b/tests/mock_pam.c @@ -9,7 +9,7 @@ #include <string.h> #include "mock_pam.h" -#include "pam-freerdp2.h" +#include "pam-freerdp.h" struct pam_handle { void *item[PAM_NUM_ITEMS]; @@ -19,37 +19,44 @@ struct pam_handle { /* note: the other fields have been omitted */ }; -int fake_conv (int num_msg, const struct pam_message **msg, - struct pam_response **resp, void *appdata_ptr) +int fake_conv (int __attribute__((unused)) num_msg, + const struct pam_message **msg, + struct pam_response **resp, + void __attribute__((unused)) *appdata_ptr) { struct pam_response *response = NULL; response = malloc (sizeof (struct pam_response)); - if (response == NULL) + if (response == NULL) { return PAM_BUF_ERR; + } response->resp_retcode = 0; - if (strcmp((*msg)->msg, PAM_FREERDP2_PROMPT_GUESTLOGIN) == 0) + if (strcmp((*msg)->msg, PAM_FREERDP_PROMPT_GUESTLOGIN) == 0) { response->resp = strdup ("guest"); /* IMPORTANT: this needs to be in /etc/passwd */ - else if (strcmp((*msg)->msg, PAM_FREERDP2_PROMPT_USER) == 0) + } else if (strcmp((*msg)->msg, PAM_FREERDP_PROMPT_USER) == 0) { response->resp = strdup ("ruser"); - else if (strcmp((*msg)->msg, PAM_FREERDP2_PROMPT_HOST) == 0) + } else if (strcmp((*msg)->msg, PAM_FREERDP_PROMPT_HOST) == 0) { response->resp = strdup ("protocol://rhost/dummy"); - else if (strcmp((*msg)->msg, PAM_FREERDP2_PROMPT_PASSWORD) == 0) + } else if (strcmp((*msg)->msg, PAM_FREERDP_PROMPT_PASSWORD) == 0) { response->resp = strdup ("password"); - else if (strcmp((*msg)->msg, PAM_FREERDP2_PROMPT_DOMAIN) == 0) + } else if (strcmp((*msg)->msg, PAM_FREERDP_PROMPT_DOMAIN) == 0) { response->resp = strdup ("domain"); - else + } else { + free(response); return PAM_SYMBOL_ERR; /* leaks... */ + } *resp = response; return PAM_SUCCESS; } -int fake_conv_empty_password (int num_msg, const struct pam_message **msg, - struct pam_response **resp, void *appdata_ptr) +int fake_conv_empty_password (int __attribute__((unused)) num_msg, + const struct pam_message **msg, + struct pam_response **resp, + void __attribute__((unused)) *appdata_ptr) { struct pam_response *response = NULL; response = malloc (sizeof (struct pam_response)); @@ -59,18 +66,20 @@ int fake_conv_empty_password (int num_msg, const struct pam_message **msg, response->resp_retcode = 0; - if (strcmp((*msg)->msg, PAM_FREERDP2_PROMPT_GUESTLOGIN) == 0) + if (strcmp((*msg)->msg, PAM_FREERDP_PROMPT_GUESTLOGIN) == 0) { response->resp = strdup ("guest"); /* IMPORTANT: this needs to be in /etc/passwd */ - else if (strcmp((*msg)->msg, PAM_FREERDP2_PROMPT_USER) == 0) + } else if (strcmp((*msg)->msg, PAM_FREERDP_PROMPT_USER) == 0) { response->resp = strdup ("ruser"); - else if (strcmp((*msg)->msg, PAM_FREERDP2_PROMPT_HOST) == 0) + } else if (strcmp((*msg)->msg, PAM_FREERDP_PROMPT_HOST) == 0) { response->resp = strdup ("protocol://rhost/dummy"); - else if (strcmp((*msg)->msg, PAM_FREERDP2_PROMPT_PASSWORD) == 0) + } else if (strcmp((*msg)->msg, PAM_FREERDP_PROMPT_PASSWORD) == 0) { response->resp = strdup (""); - else if (strcmp((*msg)->msg, PAM_FREERDP2_PROMPT_DOMAIN) == 0) + } else if (strcmp((*msg)->msg, PAM_FREERDP_PROMPT_DOMAIN) == 0) { response->resp = strdup ("domain"); - else + } else { + free(response); return PAM_SYMBOL_ERR; /* leaks... */ + } *resp = response; @@ -109,20 +118,22 @@ int PAM_NONNULL((1)) pam_get_item (const pam_handle_t *pamh, int type, const voi if (pamh == NULL) return PAM_SYSTEM_ERR; - if (type == PAM_CONV) + if (type == PAM_CONV) { *value = pamh->conv; - else if (pamh->item[type] != NULL) + } else if (pamh->item[type] != NULL) { *value = pamh->item[type]; - else + } else { *value = NULL; /* will result in a prompt conversation */ + } return PAM_SUCCESS; } int PAM_NONNULL((1)) pam_set_item (pam_handle_t *pamh, int type, const void *value) { - if (pamh == NULL) + if (pamh == NULL) { return PAM_SYSTEM_ERR; + } void **slot, *tmp; size_t nsize, osize; @@ -130,10 +141,12 @@ int PAM_NONNULL((1)) pam_set_item (pam_handle_t *pamh, int type, const void *val slot = &pamh->item[type]; osize = nsize = 0; - if (*slot != NULL) + if (*slot != NULL) { osize = strlen((const char *)*slot) + 1; - if (value != NULL) + } + if (value != NULL) { nsize = strlen((const char *)value) + 1; + } if (*slot != NULL) { memset(*slot, 0xd0, osize); @@ -141,8 +154,9 @@ int PAM_NONNULL((1)) pam_set_item (pam_handle_t *pamh, int type, const void *val } if (value != NULL) { - if ((tmp = malloc(nsize)) == NULL) + if ((tmp = malloc(nsize)) == NULL) { return PAM_BUF_ERR; + } memcpy(tmp, value, nsize); } else { tmp = NULL; diff --git a/tests/mock_pam.h b/tests/mock_pam.h index 7fe0467..df837df 100644 --- a/tests/mock_pam.h +++ b/tests/mock_pam.h @@ -11,6 +11,7 @@ #define __MOCK_PAM_H__ #define LIBPAM_COMPILE +#include <security/_pam_types.h> #include <security/pam_modules.h> #include <security/pam_modutil.h> #include <security/pam_appl.h> diff --git a/tests/test-freerdp2-auth.c b/tests/test-freerdp-auth.c index a83885e..a83885e 100644 --- a/tests/test-freerdp2-auth.c +++ b/tests/test-freerdp-auth.c diff --git a/tests/test-freerdp2-wrapper.cc b/tests/test-freerdp-wrapper.cc index 33b4168..7555cb1 100644 --- a/tests/test-freerdp2-wrapper.cc +++ b/tests/test-freerdp-wrapper.cc @@ -12,7 +12,7 @@ extern "C" { #include "mock_pam.h" #include "mock_guest.h" -#include "pam-freerdp2-private.h" +#include "pam-freerdp-private.h" int freerdpclient_wrapper (int argc, char * argv[]); @@ -43,13 +43,13 @@ namespace { virtual void SetUp() { // Code here will be called immediately after the constructor (right // before each test). - unlink("/tmp/.freerdp2-socket"); + unlink("/tmp/.freerdp-socket"); } virtual void TearDown() { // Code here will be called immediately after each test (right // before the destructor). - unlink("/tmp/.freerdp2-socket"); + unlink("/tmp/.freerdp-socket"); } // Objects declared here can be used by all tests in the test case for Foo. |