aboutsummaryrefslogtreecommitdiffstats
path: root/security/pam_pwdfile
diff options
context:
space:
mode:
authorpgollucci <pgollucci@FreeBSD.org>2010-02-12 10:31:09 +0800
committerpgollucci <pgollucci@FreeBSD.org>2010-02-12 10:31:09 +0800
commitdf76f17b5d40ddab8d5ac97b97d8995b72b1f7a5 (patch)
tree721c642cac908b41788648f0af76bbcc217b43ee /security/pam_pwdfile
parent95e2c63b13df6834af4c3553c0d21cde4c58193b (diff)
downloadfreebsd-ports-gnome-df76f17b5d40ddab8d5ac97b97d8995b72b1f7a5.tar.gz
freebsd-ports-gnome-df76f17b5d40ddab8d5ac97b97d8995b72b1f7a5.tar.zst
freebsd-ports-gnome-df76f17b5d40ddab8d5ac97b97d8995b72b1f7a5.zip
- Fix runtime to actually work
update the custom Makefile add a required header fix bigcrypt PR: ports/138483 Submitted by: Ben Schumacher <me@benschumacher.com> Approved by: Michael Schout <mschout@gkg.net> (maintainer)
Diffstat (limited to 'security/pam_pwdfile')
-rw-r--r--security/pam_pwdfile/Makefile3
-rw-r--r--security/pam_pwdfile/files/Makefile.bsd20
-rw-r--r--security/pam_pwdfile/files/_pam_macros.h196
-rw-r--r--security/pam_pwdfile/files/patch-bigcrypt.c11
4 files changed, 229 insertions, 1 deletions
diff --git a/security/pam_pwdfile/Makefile b/security/pam_pwdfile/Makefile
index 1dfc0cb3a57e..6551181cf8b3 100644
--- a/security/pam_pwdfile/Makefile
+++ b/security/pam_pwdfile/Makefile
@@ -7,6 +7,7 @@
PORTNAME= pam_pwdfile
PORTVERSION= 0.99
+PORTREVISION= 1
CATEGORIES= security
MASTER_SITES= http://cpbotha.net/files/pam_pwdfile/
@@ -17,9 +18,11 @@ MAKEFILE= ${FILESDIR}/Makefile.bsd
PLIST_FILES= lib/pam_pwdfile.so
PORTDOCS= README INSTALL changelog
+CFLAGS+= -I${WRKSRC}
post-patch:
${REINPLACE_CMD} -e 's|#include <features.h>||g' ${WRKSRC}/pam_pwdfile.c
+ ${CP} ${FILESDIR}/_pam_macros.h ${WRKSRC}
post-install:
.if !defined(NOPORTDOCS)
diff --git a/security/pam_pwdfile/files/Makefile.bsd b/security/pam_pwdfile/files/Makefile.bsd
index 0a6f5c818254..8c848c8a9ab1 100644
--- a/security/pam_pwdfile/files/Makefile.bsd
+++ b/security/pam_pwdfile/files/Makefile.bsd
@@ -1,6 +1,12 @@
# inspired from pam-pgsql port :-)
-SRCS= pam_pwdfile.c
+SRCS= pam_pwdfile.c \
+ bigcrypt.c \
+ md5_good.c \
+ md5_crypt_good.c \
+ md5_broken.c \
+ md5_crypt_broken.c
+
SHLIB_NAME= pam_pwdfile.so
LDADD= -lpam -lcrypt
@@ -8,4 +14,16 @@ CFLAGS+= -Wall -D_BSD_SOURCE
LIBDIR= ${LOCALBASE}/lib
+md5_good.c: md5.c
+ $(CPP) $(CPPFLAGS) -DHIGHFIRST -D'MD5Name(x)=Good##x' -o $@ $>
+
+md5_broken.c: md5.c
+ $(CPP) $(CPPFLAGS) -D'MD5Name(x)=Broken##x' -o $@ $>
+
+md5_crypt_good.c: md5_crypt.c
+ $(CPP) $(CPPFLAGS) -D'MD5Name(x)=Good##x' -o $@ $>
+
+md5_crypt_broken.c: md5_crypt.c
+ $(CPP) $(CPPFLAGS) -D'MD5Name(x)=Broken##x' -o $@ $>
+
.include <bsd.lib.mk>
diff --git a/security/pam_pwdfile/files/_pam_macros.h b/security/pam_pwdfile/files/_pam_macros.h
new file mode 100644
index 000000000000..bd107cfb68cb
--- /dev/null
+++ b/security/pam_pwdfile/files/_pam_macros.h
@@ -0,0 +1,196 @@
+#ifndef PAM_MACROS_H
+#define PAM_MACROS_H
+
+/*
+ * All kind of macros used by PAM, but usable in some other
+ * programs too.
+ * Organized by Cristian Gafton <gafton@redhat.com>
+ */
+
+/* a 'safe' version of strdup */
+
+#include <stdlib.h>
+#include <string.h>
+
+#define x_strdup(s) ( (s) ? strdup(s):NULL )
+
+/* Good policy to strike out passwords with some characters not just
+ free the memory */
+
+#define _pam_overwrite(x) \
+do { \
+ register char *__xx__; \
+ if ((__xx__=(x))) \
+ while (*__xx__) \
+ *__xx__++ = '\0'; \
+} while (0)
+
+#define _pam_overwrite_n(x,n) \
+do { \
+ register char *__xx__; \
+ register unsigned int __i__ = 0; \
+ if ((__xx__=(x))) \
+ for (;__i__<n; __i__++) \
+ __xx__[__i__] = 0; \
+} while (0)
+
+/*
+ * Don't just free it, forget it too.
+ */
+
+#define _pam_drop(X) \
+do { \
+ if (X) { \
+ free(X); \
+ X=NULL; \
+ } \
+} while (0)
+
+#define _pam_drop_reply(/* struct pam_response * */ reply, /* int */ replies) \
+do { \
+ int reply_i; \
+ \
+ for (reply_i=0; reply_i<replies; ++reply_i) { \
+ if (reply[reply_i].resp) { \
+ _pam_overwrite(reply[reply_i].resp); \
+ free(reply[reply_i].resp); \
+ } \
+ } \
+ if (reply) \
+ free(reply); \
+} while (0)
+
+/* some debugging code */
+
+#ifdef DEBUG
+
+/*
+ * This provides the necessary function to do debugging in PAM.
+ * Cristian Gafton <gafton@redhat.com>
+ */
+
+#include <stdio.h>
+#include <sys/types.h>
+#include <stdarg.h>
+#include <errno.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+/*
+ * This is for debugging purposes ONLY. DO NOT use on live systems !!!
+ * You have been warned :-) - CG
+ *
+ * to get automated debugging to the log file, it must be created manually.
+ * _PAM_LOGFILE must exist and be writable to the programs you debug.
+ */
+
+#ifndef _PAM_LOGFILE
+#define _PAM_LOGFILE "/var/run/pam-debug.log"
+#endif
+
+static void _pam_output_debug_info(const char *file, const char *fn
+ , const int line)
+{
+ FILE *logfile;
+ int must_close = 1, fd;
+
+#ifdef O_NOFOLLOW
+ if ((fd = open(_PAM_LOGFILE, O_WRONLY|O_NOFOLLOW|O_APPEND)) != -1) {
+#else
+ if ((fd = open(_PAM_LOGFILE, O_WRONLY|O_APPEND)) != -1) {
+#endif
+ if (!(logfile = fdopen(fd,"a"))) {
+ logfile = stderr;
+ must_close = 0;
+ close(fd);
+ }
+ } else {
+ logfile = stderr;
+ must_close = 0;
+ }
+ fprintf(logfile,"[%s:%s(%d)] ",file, fn, line);
+ fflush(logfile);
+ if (must_close)
+ fclose(logfile);
+}
+
+static void _pam_output_debug(const char *format, ...)
+{
+ va_list args;
+ FILE *logfile;
+ int must_close = 1, fd;
+
+ va_start(args, format);
+
+#ifdef O_NOFOLLOW
+ if ((fd = open(_PAM_LOGFILE, O_WRONLY|O_NOFOLLOW|O_APPEND)) != -1) {
+#else
+ if ((fd = open(_PAM_LOGFILE, O_WRONLY|O_APPEND)) != -1) {
+#endif
+ if (!(logfile = fdopen(fd,"a"))) {
+ logfile = stderr;
+ must_close = 0;
+ close(fd);
+ }
+ } else {
+ logfile = stderr;
+ must_close = 0;
+ }
+ vfprintf(logfile, format, args);
+ fprintf(logfile, "\n");
+ fflush(logfile);
+ if (must_close)
+ fclose(logfile);
+
+ va_end(args);
+}
+
+#define D(x) do { \
+ _pam_output_debug_info(__FILE__, __FUNCTION__, __LINE__); \
+ _pam_output_debug x ; \
+} while (0)
+
+#define _pam_show_mem(X,XS) do { \
+ int i; \
+ register unsigned char *x; \
+ x = (unsigned char *)X; \
+ fprintf(stderr, " <start at %p>\n", X); \
+ for (i = 0; i < XS ; ++x, ++i) { \
+ fprintf(stderr, " %02X. <%p:%02X>\n", i, x, *x); \
+ } \
+ fprintf(stderr, " <end for %p after %d bytes>\n", X, XS); \
+} while (0)
+
+#define _pam_show_reply(/* struct pam_response * */reply, /* int */replies) \
+do { \
+ int reply_i; \
+ setbuf(stderr, NULL); \
+ fprintf(stderr, "array at %p of size %d\n",reply,replies); \
+ fflush(stderr); \
+ if (reply) { \
+ for (reply_i = 0; reply_i < replies; reply_i++) { \
+ fprintf(stderr, " elem# %d at %p: resp = %p, retcode = %d\n", \
+ reply_i, reply+reply_i, reply[reply_i].resp, \
+ reply[reply_i].resp, _retcode); \
+ fflush(stderr); \
+ if (reply[reply_i].resp) { \
+ fprintf(stderr, " resp[%d] = '%s'\n", \
+ strlen(reply[reply_i].resp), reply[reply_i].resp); \
+ fflush(stderr); \
+ } \
+ } \
+ } \
+ fprintf(stderr, "done here\n"); \
+ fflush(stderr); \
+} while (0)
+
+#else
+
+#define D(x) do { } while (0)
+#define _pam_show_mem(X,XS) do { } while (0)
+#define _pam_show_reply(reply, replies) do { } while (0)
+
+#endif /* DEBUG */
+
+#endif /* PAM_MACROS_H */
diff --git a/security/pam_pwdfile/files/patch-bigcrypt.c b/security/pam_pwdfile/files/patch-bigcrypt.c
new file mode 100644
index 000000000000..c609f8988173
--- /dev/null
+++ b/security/pam_pwdfile/files/patch-bigcrypt.c
@@ -0,0 +1,11 @@
+--- bigcrypt.c.orig 2009-09-04 18:37:28.000000000 -0500
++++ bigcrypt.c 2009-09-04 18:37:30.000000000 -0500
+@@ -25,7 +25,7 @@
+ */
+
+ #include <string.h>
+-#include <security/_pam_macros.h>
++#include "_pam_macros.h"
+
+ char *crypt(const char *key, const char *salt);
+ char *bigcrypt(const char *key, const char *salt);