ports/114105: [PATCH] www/mod_fcgid: Fix works on apache2.0.X

Andrey Slusar anray at FreeBSD.org
Thu Jun 28 18:10:08 UTC 2007


>Number:         114105
>Category:       ports
>Synopsis:       [PATCH] www/mod_fcgid: Fix works on apache2.0.X
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Thu Jun 28 18:10:07 GMT 2007
>Closed-Date:
>Last-Modified:
>Originator:     Andrey Slusar
>Release:        FreeBSD 7.0-CURRENT i386
>Organization:
Santinel
>Environment:
System: FreeBSD santinel.home.ua 7.0-CURRENT FreeBSD 7.0-CURRENT #0: Sun Jun 17 21:16:58 EEST 2007 anray at santinel.home.ua:/usr/obj/usr/src/sys/ANRAY i386
>Description:
	On apache2.0.x apr_shm_remove() is not implemented. mod_fcgid is
	use the apr_shm_remove(), added patch is fixed this.

	This patch obtained from mod-fcgid cvs.
>How-To-Repeat:
	Install www/apache20 and www/fcgid
	/usr/local/etc/rc.d/apache2 restart
	>mod_fcgid.so: undefined symbol: apr_shm_remove
	And not works.
>Fix:

--- mod_fcgid.diff begins here ---
Index: mod_fcgid/Makefile
===================================================================
RCS file: /home/pcvs/ports/www/mod_fcgid/Makefile,v
retrieving revision 1.10
diff -u -r1.10 Makefile
--- mod_fcgid/Makefile	11 Jun 2007 12:07:54 -0000	1.10
+++ mod_fcgid/Makefile	28 Jun 2007 16:57:59 -0000
@@ -7,6 +7,7 @@
 
 PORTNAME=	mod_fcgid
 PORTVERSION=	2.1
+PORTREVISION=	1
 CATEGORIES=	www
 MASTER_SITES=	${MASTER_SITE_SOURCEFORGE_EXTENDED}
 MASTER_SITE_SUBDIR=	${PORTNAME:S/_/-/}
Index: mod_fcgid/files/patch-arch-unix-fcgid_proctbl_unix.c
===================================================================
RCS file: mod_fcgid/files/patch-arch-unix-fcgid_proctbl_unix.c
diff -N mod_fcgid/files/patch-arch-unix-fcgid_proctbl_unix.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ mod_fcgid/files/patch-arch-unix-fcgid_proctbl_unix.c	28 Jun 2007 16:57:59 -0000
@@ -0,0 +1,98 @@
+--- arch/unix/fcgid_proctbl_unix.c.orig	Fri Feb 16 04:34:41 2007
++++ arch/unix/fcgid_proctbl_unix.c	Tue Feb 27 18:33:28 2007
+@@ -1,4 +1,5 @@
+ #include "fcgid_proctbl.h"
++#include "apr_version.h"
+ #include "apr_shm.h"
+ #include "apr_global_mutex.h"
+ #include "fcgid_global.h"
+@@ -17,6 +18,89 @@
+ static fcgid_share *_global_memory = NULL;
+ static fcgid_global_share *g_global_share = NULL;	/* global information */
+ static size_t g_table_size = FCGID_PROC_TABLE_SIZE;
++
++/* apr version 0.x not support apr_shm_remove, I have to copy it from apr version 1.x */
++#if (APR_MAJOR_VERSION < 1)
++#ifdef HAVE_SYS_MMAN_H
++#include <sys/mman.h>
++#endif
++#ifdef HAVE_SYS_IPC_H
++#include <sys/ipc.h>
++#endif
++#ifdef HAVE_SYS_MUTEX_H
++#include <sys/mutex.h>
++#endif
++#ifdef HAVE_SYS_SHM_H
++#include <sys/shm.h>
++#endif
++#if !defined(SHM_R)
++#define SHM_R 0400
++#endif
++#if !defined(SHM_W)
++#define SHM_W 0200
++#endif
++#ifdef HAVE_SYS_FILE_H
++#include <sys/file.h>
++#endif
++
++static apr_status_t apr_shm_remove(const char *filename, apr_pool_t * pool)
++{
++#if APR_USE_SHMEM_SHMGET
++	apr_status_t status;
++	apr_file_t *file;
++	key_t shmkey;
++	int shmid;
++#endif
++
++#if APR_USE_SHMEM_MMAP_TMP
++	return apr_file_remove(filename, pool);
++#endif
++#if APR_USE_SHMEM_MMAP_SHM
++	if (shm_unlink(filename) == -1) {
++		return errno;
++	}
++	return APR_SUCCESS;
++#endif
++#if APR_USE_SHMEM_SHMGET
++	/* Presume that the file already exists; just open for writing */
++	status = apr_file_open(&file, filename, APR_WRITE,
++						   APR_OS_DEFAULT, pool);
++	if (status) {
++		return status;
++	}
++
++	/* ftok() (on solaris at least) requires that the file actually
++	 * exist before calling ftok(). */
++	shmkey = ftok(filename, 1);
++	if (shmkey == (key_t) - 1) {
++		goto shm_remove_failed;
++	}
++
++	apr_file_close(file);
++
++	if ((shmid = shmget(shmkey, 0, SHM_R | SHM_W)) < 0) {
++		goto shm_remove_failed;
++	}
++
++	/* Indicate that the segment is to be destroyed as soon
++	 * as all processes have detached. This also disallows any
++	 * new attachments to the segment. */
++	if (shmctl(shmid, IPC_RMID, NULL) == -1) {
++		goto shm_remove_failed;
++	}
++	return apr_file_remove(filename, pool);
++
++  shm_remove_failed:
++	status = errno;
++	/* ensure the file has been removed anyway. */
++	apr_file_remove(filename, pool);
++	return status;
++#endif
++
++	/* No support for anonymous shm */
++	return APR_ENOTIMPL;
++}
++#endif							/* APR_MAJOR_VERSION<1 */
+ 
+ apr_status_t
+ proctable_post_config(server_rec * main_server, apr_pool_t * configpool)
--- mod_fcgid.diff ends here ---


>Release-Note:
>Audit-Trail:
>Unformatted:



More information about the freebsd-ports-bugs mailing list