Here's a straightforward patch to switch ruby to use the getpwuid_shadow and getpwnam_shadow functions. Lightly tested on amd64. Will test on i386. OKs?
Thanks, Jeremy Index: 1.8/Makefile =================================================================== RCS file: /cvs/ports/lang/ruby/1.8/Makefile,v retrieving revision 1.39 diff -u -p -r1.39 Makefile --- 1.8/Makefile 27 Apr 2016 12:07:09 -0000 1.39 +++ 1.8/Makefile 12 Jul 2016 18:49:59 -0000 @@ -20,7 +20,7 @@ PKGNAME-ri_docs= ruby-ri_docs-${VERSION} PKG_ARCH-ri_docs= * PKGSPEC-main= ruby->=1.8,<1.9 -REVISION-main= 5 +REVISION-main= 6 REVISION-ri_docs= 1 CONFIGURE_ARGS= --program-suffix=18 \ Index: 1.8/patches/patch-ext_etc_etc_c =================================================================== RCS file: 1.8/patches/patch-ext_etc_etc_c diff -N 1.8/patches/patch-ext_etc_etc_c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ 1.8/patches/patch-ext_etc_etc_c 12 Jul 2016 18:49:31 -0000 @@ -0,0 +1,24 @@ +$OpenBSD$ + +Use shadow versions of password functions. + +--- ext/etc/etc.c.orig Mon Aug 27 03:16:25 2007 ++++ ext/etc/etc.c Tue Jul 12 11:49:26 2016 +@@ -138,7 +138,7 @@ etc_getpwuid(argc, argv, obj) + else { + uid = getuid(); + } +- pwd = getpwuid(uid); ++ pwd = getpwuid_shadow(uid); + if (pwd == 0) rb_raise(rb_eArgError, "can't find user for %d", uid); + return setup_passwd(pwd); + #else +@@ -162,7 +162,7 @@ etc_getpwnam(obj, nam) + struct passwd *pwd; + + SafeStringValue(nam); +- pwd = getpwnam(RSTRING(nam)->ptr); ++ pwd = getpwnam_shadow(RSTRING(nam)->ptr); + if (pwd == 0) rb_raise(rb_eArgError, "can't find user for %s", RSTRING(nam)->ptr); + return setup_passwd(pwd); + #else Index: 2.0/Makefile =================================================================== RCS file: /cvs/ports/lang/ruby/2.0/Makefile,v retrieving revision 1.25 diff -u -p -r1.25 Makefile --- 2.0/Makefile 29 Feb 2016 20:46:53 -0000 1.25 +++ 2.0/Makefile 12 Jul 2016 18:39:23 -0000 @@ -19,6 +19,8 @@ PKGNAME-ri_docs = ruby20-ri_docs-${VERSI PKG_ARCH-ri_docs = * WANTLIB-ri_docs = # empty +REVISION-main = 0 + PKGSPEC-main = ruby->=2.0,<2.1 BUILD_DEPENDS = shells/bash Index: 2.1/Makefile =================================================================== RCS file: /cvs/ports/lang/ruby/2.1/Makefile,v retrieving revision 1.20 diff -u -p -r1.20 Makefile --- 2.1/Makefile 7 Apr 2016 14:24:30 -0000 1.20 +++ 2.1/Makefile 12 Jul 2016 18:32:53 -0000 @@ -18,6 +18,8 @@ PKGNAME-ri_docs = ruby21-ri_docs-${VERSI PKG_ARCH-ri_docs = * WANTLIB-ri_docs = # empty +REVISION-main = 0 + NEXTVER = 2.2 PKGSPEC-main = ruby->=${RUBYLIBREV},<${NEXTVER} Index: 2.2/Makefile =================================================================== RCS file: /cvs/ports/lang/ruby/2.2/Makefile,v retrieving revision 1.12 diff -u -p -r1.12 Makefile --- 2.2/Makefile 30 Apr 2016 14:18:12 -0000 1.12 +++ 2.2/Makefile 12 Jul 2016 18:24:40 -0000 @@ -18,6 +18,8 @@ PKGNAME-ri_docs = ruby22-ri_docs-${VERSI PKG_ARCH-ri_docs = * WANTLIB-ri_docs = # empty +REVISION-main = 0 + NEXTVER = 2.3 PKGSPEC-main = ruby->=${RUBYLIBREV},<${NEXTVER} Index: 2.3/Makefile =================================================================== RCS file: /cvs/ports/lang/ruby/2.3/Makefile,v retrieving revision 1.6 diff -u -p -r1.6 Makefile --- 2.3/Makefile 30 Apr 2016 14:19:00 -0000 1.6 +++ 2.3/Makefile 12 Jul 2016 18:17:04 -0000 @@ -22,6 +22,8 @@ PKGNAME-ri_docs = ruby23-ri_docs-${VERSI PKG_ARCH-ri_docs = * WANTLIB-ri_docs = # empty +REVISION-main = 0 + NEXTVER = 2.4 PKGSPEC-main = ruby->=${RUBYLIBREV},<${NEXTVER} Index: 2.0/patches/patch-ext_etc_etc_c =================================================================== RCS file: 2.0/patches/patch-ext_etc_etc_c diff -N 2.0/patches/patch-ext_etc_etc_c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ 2.0/patches/patch-ext_etc_etc_c 12 Jul 2016 18:39:00 -0000 @@ -0,0 +1,24 @@ +$OpenBSD$ + +Use shadow versions of password functions. + +--- ext/etc/etc.c.orig Thu Nov 27 23:30:21 2014 ++++ ext/etc/etc.c Tue Jul 12 11:39:00 2016 +@@ -161,7 +161,7 @@ etc_getpwuid(int argc, VALUE *argv, VALUE obj) + else { + uid = getuid(); + } +- pwd = getpwuid(uid); ++ pwd = getpwuid_shadow(uid); + if (pwd == 0) rb_raise(rb_eArgError, "can't find user for %d", (int)uid); + return setup_passwd(pwd); + #else +@@ -191,7 +191,7 @@ etc_getpwnam(VALUE obj, VALUE nam) + struct passwd *pwd; + + SafeStringValue(nam); +- pwd = getpwnam(RSTRING_PTR(nam)); ++ pwd = getpwnam_shadow(RSTRING_PTR(nam)); + if (pwd == 0) rb_raise(rb_eArgError, "can't find user for %"PRIsVALUE, nam); + return setup_passwd(pwd); + #else Index: 2.1/patches/patch-ext_etc_etc_c =================================================================== RCS file: 2.1/patches/patch-ext_etc_etc_c diff -N 2.1/patches/patch-ext_etc_etc_c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ 2.1/patches/patch-ext_etc_etc_c 12 Jul 2016 18:32:27 -0000 @@ -0,0 +1,24 @@ +$OpenBSD$ + +Use shadow versions of password functions. + +--- ext/etc/etc.c.orig Mon Feb 2 05:58:21 2015 ++++ ext/etc/etc.c Tue Jul 12 11:32:17 2016 +@@ -173,7 +173,7 @@ etc_getpwuid(int argc, VALUE *argv, VALUE obj) + else { + uid = getuid(); + } +- pwd = getpwuid(uid); ++ pwd = getpwuid_shadow(uid); + if (pwd == 0) rb_raise(rb_eArgError, "can't find user for %d", (int)uid); + return setup_passwd(pwd); + #else +@@ -203,7 +203,7 @@ etc_getpwnam(VALUE obj, VALUE nam) + struct passwd *pwd; + + SafeStringValue(nam); +- pwd = getpwnam(RSTRING_PTR(nam)); ++ pwd = getpwnam_shadow(RSTRING_PTR(nam)); + if (pwd == 0) rb_raise(rb_eArgError, "can't find user for %"PRIsVALUE, nam); + return setup_passwd(pwd); + #else Index: 2.2/patches/patch-ext_etc_etc_c =================================================================== RCS file: 2.2/patches/patch-ext_etc_etc_c diff -N 2.2/patches/patch-ext_etc_etc_c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ 2.2/patches/patch-ext_etc_etc_c 12 Jul 2016 18:24:24 -0000 @@ -0,0 +1,24 @@ +$OpenBSD$ + +Use shadow versions of password functions. + +--- ext/etc/etc.c.orig Tue Jul 12 11:14:25 2016 ++++ ext/etc/etc.c Tue Jul 12 11:15:05 2016 +@@ -187,7 +187,7 @@ etc_getpwuid(int argc, VALUE *argv, VALUE obj) + else { + uid = getuid(); + } +- pwd = getpwuid(uid); ++ pwd = getpwuid_shadow(uid); + if (pwd == 0) rb_raise(rb_eArgError, "can't find user for %d", (int)uid); + return setup_passwd(pwd); + #else +@@ -217,7 +217,7 @@ etc_getpwnam(VALUE obj, VALUE nam) + struct passwd *pwd; + + SafeStringValue(nam); +- pwd = getpwnam(RSTRING_PTR(nam)); ++ pwd = getpwnam_shadow(RSTRING_PTR(nam)); + if (pwd == 0) rb_raise(rb_eArgError, "can't find user for %"PRIsVALUE, nam); + return setup_passwd(pwd); + #else Index: 2.3/patches/patch-ext_etc_etc_c =================================================================== RCS file: 2.3/patches/patch-ext_etc_etc_c diff -N 2.3/patches/patch-ext_etc_etc_c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ 2.3/patches/patch-ext_etc_etc_c 12 Jul 2016 18:16:36 -0000 @@ -0,0 +1,24 @@ +$OpenBSD$ + +Use shadow versions of password functions. + +--- ext/etc/etc.c.orig Tue Jul 12 11:14:25 2016 ++++ ext/etc/etc.c Tue Jul 12 11:15:05 2016 +@@ -187,7 +187,7 @@ etc_getpwuid(int argc, VALUE *argv, VALUE obj) + else { + uid = getuid(); + } +- pwd = getpwuid(uid); ++ pwd = getpwuid_shadow(uid); + if (pwd == 0) rb_raise(rb_eArgError, "can't find user for %d", (int)uid); + return setup_passwd(pwd); + #else +@@ -217,7 +217,7 @@ etc_getpwnam(VALUE obj, VALUE nam) + struct passwd *pwd; + + SafeStringValue(nam); +- pwd = getpwnam(RSTRING_PTR(nam)); ++ pwd = getpwnam_shadow(RSTRING_PTR(nam)); + if (pwd == 0) rb_raise(rb_eArgError, "can't find user for %"PRIsVALUE, nam); + return setup_passwd(pwd); + #else