initial commit

This commit is contained in:
Stefan Bühler 2013-10-02 18:43:47 +02:00
commit c91f0380ae
11 changed files with 1544 additions and 0 deletions

10
.gitignore vendored Normal file
View File

@ -0,0 +1,10 @@
Makefile.in
aclocal.m4
autom4te.cache
compile
config.h.in
configure
depcomp
install-sh
ltmain.sh
missing

55
CMakeLists.txt Normal file
View File

@ -0,0 +1,55 @@
CMAKE_MINIMUM_REQUIRED(VERSION 2.6.0 FATAL_ERROR)
cmake_policy(VERSION 2.6.0)
SET(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
INCLUDE(CheckIncludeFiles)
INCLUDE(CheckLibraryExists)
INCLUDE(FindPkgConfig)
INCLUDE(AddTargetProperties)
PROJECT(scgi-cgi C)
SET(PACKAGE_VERSION 0.1.0)
IF("${CMAKE_BUILD_TYPE}" STREQUAL "")
SET(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Choose the type of build, options are: None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel." FORCE)
ENDIF("${CMAKE_BUILD_TYPE}" STREQUAL "")
OPTION(GCC_LIBEVENT_STATIC "link libevent static")
# libevent
pkg_check_modules (LIBEVENT REQUIRED libevent>=2.0)
IF(GCC_LIBEVENT_STATIC)
SET(MYLIBEVENT_LDFLAGS -Wl,-Bstatic ${LIBEVENT_LDFLAGS} -Wl,-Bdynamic)
ELSE(GCC_LIBEVENT_STATIC)
SET(MYLIBEVENT_LDFLAGS ${LIBEVENT_LDFLAGS})
ENDIF(GCC_LIBEVENT_STATIC)
SET(MAIN_SOURCE scgi-cgi.c)
SET(PACKAGE_NAME ${CMAKE_PROJECT_NAME})
SET(PACKAGE_VERSION ${PACKAGE_VERSION})
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake ${CMAKE_BINARY_DIR}/config.h ESCAPE_QUOTES)
ADD_DEFINITIONS(-DHAVE_CONFIG_H)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR})
add_executable(scgi-cgi ${MAIN_SOURCE})
ADD_TARGET_PROPERTIES(scgi-cgi COMPILE_FLAGS "-std=gnu99 -Wall -g -Wshadow -W -pedantic -fPIC")
# libev
TARGET_LINK_LIBRARIES(scgi-cgi ${MYLIBEVENT_LDFLAGS})
ADD_TARGET_PROPERTIES(scgi-cgi COMPILE_FLAGS ${LIBEVENT_CFLAGS})
INSTALL(TARGETS scgi-cgi DESTINATION bin)
# man page
SET(CMAKE_MAN_DIR "share/man" CACHE STRING
"Install location for man pages (relative to prefix).")
MARK_AS_ADVANCED(CMAKE_MAN_DIR)
INSTALL(FILES scgi-cgi.1 DESTINATION ${CMAKE_MAN_DIR}/man1)

22
COPYING Normal file
View File

@ -0,0 +1,22 @@
The MIT License
Copyright (c) 2013 Stefan Bühler
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

8
Makefile.am Normal file
View File

@ -0,0 +1,8 @@
EXTRA_DIST=autogen.sh CMakeLists.txt config.h.cmake scgi-cgi.1 README.rst
man1_MANS=scgi-cgi.1
AM_CFLAGS=$(LIBEVENT_CFLAGS)
scgi_cgi_LDADD=$(LIBEVENT_LIBS)
bin_PROGRAMS=scgi-cgi
scgi_cgi_SOURCES=scgi-cgi.c

50
README.rst Normal file
View File

@ -0,0 +1,50 @@
Description
-----------
:Homepage:
http://redmine.lighttpd.net/projects/scgi-cgi/wiki
scgi-cgi is a SCGI application to run normal cgi applications. It doesn't
make CGI applications faster, but it allows you to run them on a different
host and with different user permissions (without the need for suexec).
scgi-cgi is released under the `MIT license <http://git.lighttpd.net/scgi-cgi.cgi/tree/COPYING>`_
Usage
-----
Examples for spawning a scgi-cgi instance with daemontools or runit::
#!/bin/sh
# run script
exec spawn-scgi -n -s /var/run/scgi-cgi.sock -u www-default -U www-data -- /usr/bin/scgi-cgi
Build dependencies
------------------
* libevent (http://libevent.org/)
* cmake or autotools (for snapshots/releases the autotool generated files are included)
Build
-----
* snapshot/release with autotools::
./configure
make
* build from git: ``git clone git://git.lighttpd.net/scgi-cgi.git``
* with autotools::
./autogen.sh
./configure
make
* with cmake (should work with snapshots/releases too)::
cmake .
make

38
autogen.sh Executable file
View File

@ -0,0 +1,38 @@
#!/bin/sh
# Run this to generate all the initial makefiles, etc.
if which glibtoolize >/dev/null 2>&1; then
LIBTOOLIZE=${LIBTOOLIZE:-glibtoolize}
else
LIBTOOLIZE=${LIBTOOLIZE:-libtoolize}
fi
LIBTOOLIZE_FLAGS="--copy --force"
ACLOCAL=${ACLOCAL:-aclocal}
AUTOHEADER=${AUTOHEADER:-autoheader}
AUTOMAKE=${AUTOMAKE:-automake}
AUTOMAKE_FLAGS="--add-missing --copy"
AUTOCONF=${AUTOCONF:-autoconf}
ARGV0=$0
set -e
if [ ! -f configure.ac -o ! -f COPYING ]; then
echo "Doesn't look like you're in the source directory" >&2
exit 1
fi
run() {
echo "$ARGV0: running \`$@'"
$@
}
run rm -f aclocal.m4 ar-lib config.guess config.sub configure depcomp instal-sh ltmain.sh missing
run rm -rf m4 autom4te.cache
run $LIBTOOLIZE $LIBTOOLIZE_FLAGS
run $ACLOCAL $ACLOCAL_FLAGS
run $AUTOHEADER
run $AUTOMAKE $AUTOMAKE_FLAGS
run $AUTOCONF
echo "Now type './configure ...' and 'make' to compile."

View File

@ -0,0 +1,13 @@
MACRO(ADD_TARGET_PROPERTIES _target _name)
SET(_properties)
FOREACH(_prop ${ARGN})
SET(_properties "${_properties} ${_prop}")
ENDFOREACH(_prop)
GET_TARGET_PROPERTY(_old_properties ${_target} ${_name})
MESSAGE(STATUS "adding property to ${_target} ${_name}:" ${_properties})
IF(NOT _old_properties)
# in case it's NOTFOUND
SET(_old_properties)
ENDIF(NOT _old_properties)
SET_TARGET_PROPERTIES(${_target} PROPERTIES ${_name} "${_old_properties} ${_properties}")
ENDMACRO(ADD_TARGET_PROPERTIES)

6
config.h.cmake Normal file
View File

@ -0,0 +1,6 @@
/*
CMake autogenerated config.h file. Do not edit!
*/
#define PACKAGE_NAME "${PACKAGE_NAME}"
#define PACKAGE_VERSION "${PACKAGE_VERSION}"

49
configure.ac Normal file
View File

@ -0,0 +1,49 @@
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.63])
AC_INIT([scgi-cgi], [0.1.0], [lighttpd@stbuehler.de])
AC_CONFIG_SRCDIR([scgi-cgi.c])
AC_CONFIG_HEADERS([config.h])
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
# Checks for programs.
AC_PROG_CC
AC_PROG_MAKE_SET
# Checks for libraries.
# libevent
PKG_CHECK_MODULES(LIBEVENT, libevent >= 2.0, [],[AC_MSG_ERROR("libevent >= 2.0 not found")])
# Checks for header files.
AC_CHECK_HEADERS([arpa/inet.h fcntl.h stdlib.h string.h sys/socket.h unistd.h])
# Checks for typedefs, structures, and compiler characteristics.
AC_TYPE_PID_T
AC_TYPE_SIZE_T
# Checks for library functions.
AC_FUNC_FORK
AC_CHECK_FUNCS([dup2])
# check for extra compiler options (warning options)
if test "${GCC}" = "yes"; then
CFLAGS="${CFLAGS} -Wall -W -Wshadow -pedantic -std=gnu99"
fi
AC_ARG_ENABLE(extra-warnings,
AC_HELP_STRING([--enable-extra-warnings],[enable extra warnings (gcc specific)]),
[case "${enableval}" in
yes) extrawarnings=true ;;
no) extrawarnings=false ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-extra-warnings) ;;
esac],[extrawarnings=false])
if test x$extrawarnings = xtrue; then
CFLAGS="${CFLAGS} -g -O2 -g2 -Wall -Wmissing-declarations -Wdeclaration-after-statement -Wno-pointer-sign -Wcast-align -Winline -Wsign-compare -Wnested-externs -Wpointer-arith -Wl,--as-needed -Wformat-security"
fi
AC_CONFIG_FILES([Makefile])
AC_OUTPUT

30
scgi-cgi.1 Normal file
View File

@ -0,0 +1,30 @@
.TH scgi-cgi 1 "Oct 1, 2013"
.
.SH NAME
.
scgi-cgi \- a SCGI application to run cgi applications
.
.SH OPTIONS
.
.TP 8
.B \-b <binary>
Executable to start instead of INTERPRETER or SCRIPT_FILENAME from SCGI environment.
.TP 8
.B \-c <number>
Maximum number of connections (default 16)
.TP 8
.B \-v
Shows version information and exits
.
.SH DESCRIPTION
scgi-cgi is a SCGI application to run normal cgi applications. It doesn't
make CGI applications faster, but it allows you to run them on a different
host and with different user permissions (without the need for suexec).
.P
For running you probably want spawn-fcgi (http://redmine.lighttpd.net/projects/spawn-fcgi)
.SH EXAMPLE
Example usage:
spawn-fcgi -n -s /var/run/scgi-cgi.sock -u www-default -U www-data -- /usr/bin/scgi-cgi
.SH AUTHOR
scgi-cgi was written by Stefan Bühler.

1263
scgi-cgi.c Normal file

File diff suppressed because it is too large Load Diff