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

Reply via email to