7150536 ftp (proftpd) service times out and goes to maintenance on T5220 and DEBUG kernel
--- a/components/proftpd/Makefile Wed Jul 11 15:59:30 2012 -0700
+++ b/components/proftpd/Makefile Fri Jul 13 15:21:02 2012 -0700
@@ -20,7 +20,7 @@
#
#
-# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
#
include ../../make-rules/shared-macros.mk
@@ -29,9 +29,11 @@
COMPONENT_VERSION= 1.3.3
COMPONENT_SUBVERSION= g
HUMAN_VERSION= $(COMPONENT_VERSION)$(COMPONENT_SUBVERSION)
+COMPONENT_PROJECT_URL= http://www.proftpd.org/
COMPONENT_SRC= $(COMPONENT_NAME)-$(HUMAN_VERSION)
COMPONENT_ARCHIVE= $(COMPONENT_SRC).tar.gz
-COMPONENT_ARCHIVE_HASH= sha1:11c2951526476d9f52307aa714851463aa76aa61
+COMPONENT_ARCHIVE_HASH= \
+ sha256:1705192f8053978fdfc02d89ff500b385d7703555ac311d31c0d1c3accaaec76
COMPONENT_ARCHIVE_URL= ftp://ftp.proftpd.org/distrib/source/$(COMPONENT_ARCHIVE)
# mod_gss subcomponent
@@ -39,7 +41,8 @@
COMPONENT_VERSION_1= $(COMPONENT_VERSION)
COMPONENT_SRC_1= $(COMPONENT_NAME_1)-$(COMPONENT_VERSION_1)
COMPONENT_ARCHIVE_1= $(COMPONENT_SRC_1).tar.gz
-COMPONENT_ARCHIVE_HASH_1= sha1:b17015a49e41ee643f1891940f9f3f8a7d77e522
+COMPONENT_ARCHIVE_HASH_1= \
+ sha256:24702cf0333720730cc269eb30529061365b1384fdce274bc3d46ccfc300934e
COMPONENT_ARCHIVE_URL_1= http://downloads.sourceforge.net/gssmod/$(COMPONENT_ARCHIVE_1)
include ../../make-rules/prep.mk
@@ -52,7 +55,7 @@
# instead of 'e'.
IPS_COMPONENT_VERSION= $(COMPONENT_VERSION).0.7
-CONFIGURE_OPTIONS += CFLAGS="$(CFLAGS) -I/usr/include/kerberosv5 -DHAVE_KRB5_H=1 -DKRB5_DLLIMP="
+CONFIGURE_OPTIONS += CFLAGS="$(CFLAGS) -I/usr/include/kerberosv5 -DHAVE_KRB5_H=1 -DKRB5_DLLIMP= -DHAVE__GETGRPSBYMEMBER"
# Force immediate binding because of chroot().
CONFIGURE_OPTIONS += LDFLAGS="-z guidance=nolazyload -z nolazyload -lbsm"
CONFIGURE_OPTIONS += install_user=$(LOGNAME)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/components/proftpd/patches/mod_auth_unix_getgrp.patch Fri Jul 13 15:21:02 2012 -0700
@@ -0,0 +1,66 @@
+--- old/modules/mod_auth_unix.c Fri May 25 08:31:35 2012
++++ new/modules/mod_auth_unix.c Fri May 25 08:31:35 2012
[email protected]@ -896,6 +896,13 @@
+
+ return gr ? mod_create_data(cmd, (void *) &gr->gr_gid) : PR_DECLINED(cmd);
+ }
++#ifdef HAVE__GETGRPSBYMEMBER
++ extern int _getgroupsbymember
++ (
++ const char* username, gid_t gid_array[],
++ int maxgids, int numgids
++ );
++#endif /* HAVE__GETGRPSBYMEMBER */
+
+ /* cmd->argv[0] = name
+ * cmd->argv[1] = (array_header **) group_ids
[email protected]@ -1065,7 +1072,40 @@
+ }
+
+ free(ptr);
+-#else
++#else /* !HAVE_GETGRSET */
++#ifdef HAVE__GETGRPSBYMEMBER
++ gid_t group_ids[NGROUPS_MAX];
++ int ngroups = NGROUPS_MAX;
++ register unsigned int i;
++
++ pr_trace_msg("auth", 4,
++ "using _getgroupsbymember() to look up group membership");
++
++ memset(group_ids, 0, sizeof(group_ids));
++
++ group_ids[0]=pw->pw_gid;
++ ngroups=
++ _getgroupsbymember(pw->pw_name, group_ids, NGROUPS_MAX, 1);
++
++ if (ngroups < 0) {
++ pr_log_pri(PR_LOG_ERR,
++ "_getgroupsbymember error: %s", strerror(errno));
++ return PR_DECLINED(cmd);
++ }
++
++ for (i = 0; i < ngroups; i++) {
++ gr = my_getgrgid(group_ids[i]);
++ if (gr) {
++ if (gids && pw->pw_gid != gr->gr_gid)
++ *((gid_t *) push_array(gids)) = gr->gr_gid;
++
++ if (groups && pw->pw_gid != gr->gr_gid) {
++ *((char **) push_array(groups)) = pstrdup(session.pool,
++ gr->gr_name);
++ }
++ }
++ }
++#else /* !HAVE__GETGRPSBYMEMBER */
+ char **gr_member = NULL;
+
+ /* This is where things get slow, expensive, and ugly. Loop through
[email protected]@ -1091,6 +1131,7 @@
+ }
+ }
+ }
++#endif /* !HAVE__GETGROUPSBYMEMBER */
+ #endif /* !HAVE_GETGRSET */
+ }
+