util_nw.c revision 8f4a965eb33d3fae938e4ecfc6b1139454750df8
842ae4bd224140319ae7feec1872b93dfd491143fielding/* ====================================================================
842ae4bd224140319ae7feec1872b93dfd491143fielding * The Apache Software License, Version 1.1
842ae4bd224140319ae7feec1872b93dfd491143fielding *
842ae4bd224140319ae7feec1872b93dfd491143fielding * Copyright (c) 2000-2002 The Apache Software Foundation. All rights
842ae4bd224140319ae7feec1872b93dfd491143fielding * reserved.
842ae4bd224140319ae7feec1872b93dfd491143fielding *
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding * Redistribution and use in source and binary forms, with or without
ce9621257ef9e54c1bbe5ad8a5f445a1f211c2dcnd * modification, are permitted provided that the following conditions
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding * are met:
ce9621257ef9e54c1bbe5ad8a5f445a1f211c2dcnd *
ce9621257ef9e54c1bbe5ad8a5f445a1f211c2dcnd * 1. Redistributions of source code must retain the above copyright
ce9621257ef9e54c1bbe5ad8a5f445a1f211c2dcnd * notice, this list of conditions and the following disclaimer.
ce9621257ef9e54c1bbe5ad8a5f445a1f211c2dcnd *
ce9621257ef9e54c1bbe5ad8a5f445a1f211c2dcnd * 2. Redistributions in binary form must reproduce the above copyright
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding * notice, this list of conditions and the following disclaimer in
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding * the documentation and/or other materials provided with the
9d129b55f5a43abf43865c6b0eb6dd19bc22aba8ianh * distribution.
e8f95a682820a599fe41b22977010636be5c2717jim *
9d129b55f5a43abf43865c6b0eb6dd19bc22aba8ianh * 3. The end-user documentation included with the redistribution,
9d129b55f5a43abf43865c6b0eb6dd19bc22aba8ianh * if any, must include the following acknowledgment:
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding * "This product includes software developed by the
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding * Apache Software Foundation (http://www.apache.org/)."
1b21d7b3d97def358b2e923655edeb16613a1c31gstein * Alternately, this acknowledgment may appear in the software itself,
1b21d7b3d97def358b2e923655edeb16613a1c31gstein * if and wherever such third-party acknowledgments normally appear.
1b21d7b3d97def358b2e923655edeb16613a1c31gstein *
1b21d7b3d97def358b2e923655edeb16613a1c31gstein * 4. The names "Apache" and "Apache Software Foundation" must
1b21d7b3d97def358b2e923655edeb16613a1c31gstein * not be used to endorse or promote products derived from this
1b21d7b3d97def358b2e923655edeb16613a1c31gstein * software without prior written permission. For written
1b21d7b3d97def358b2e923655edeb16613a1c31gstein * permission, please contact apache@apache.org.
2d71630471d1c23f0137309e3c3957c633ecbfd6rbb *
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding * 5. Products derived from this software may not be called "Apache",
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding * nor may "Apache" appear in their name, without prior written
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding * permission of the Apache Software Foundation.
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding *
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
51af95bb51b5084e883bad250b2afa2838e9ceebfielding * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
d4f1d9c1ff112a8ab9bee31f196973761329b236rbb * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
7fae9cc4639013f3c04c085547256c68814aee8ftrawick * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
7fae9cc4639013f3c04c085547256c68814aee8ftrawick * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
7fae9cc4639013f3c04c085547256c68814aee8ftrawick * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
7fae9cc4639013f3c04c085547256c68814aee8ftrawick * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
7184de27ec1d62a83c41cdeac0953ca9fd661e8csf * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
7184de27ec1d62a83c41cdeac0953ca9fd661e8csf * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
7184de27ec1d62a83c41cdeac0953ca9fd661e8csf * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
36ef8f77bffe75d1aa327882be1b5bdbe2ff567asf * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding * SUCH DAMAGE.
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding * ====================================================================
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding *
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding * This software consists of voluntary contributions made by many
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding * individuals on behalf of the Apache Software Foundation. For more
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding * information on the Apache Software Foundation, please see
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding * <http://www.apache.org/>.
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding *
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding * Portions of this software are based upon public domain software
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding * originally written at the National Center for Supercomputing Applications,
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding * University of Illinois, Urbana-Champaign.
785be1b6298010956622771c870ab3cd8ca57a2faaron */
785be1b6298010956622771c870ab3cd8ca57a2faaron
785be1b6298010956622771c870ab3cd8ca57a2faaron#include "httpd.h"
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding#include "http_log.h"
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding#include <netware.h>
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding#include <nks\netware.h>
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fieldingint nlmUnloadSignaled(int wait);
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fieldingevent_handle_t eh;
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fieldingWarn_t ref;
785be1b6298010956622771c870ab3cd8ca57a2faaron
785be1b6298010956622771c870ab3cd8ca57a2faaronAP_DECLARE(apr_status_t) ap_os_create_privileged_process(
785be1b6298010956622771c870ab3cd8ca57a2faaron const request_rec *r,
785be1b6298010956622771c870ab3cd8ca57a2faaron apr_proc_t *newproc, const char *progname,
785be1b6298010956622771c870ab3cd8ca57a2faaron const char * const *args,
785be1b6298010956622771c870ab3cd8ca57a2faaron const char * const *env,
7697b1b7376a532163c621e050b70c90dcb15d66covener apr_procattr_t *attr, apr_pool_t *p)
7697b1b7376a532163c621e050b70c90dcb15d66covener{
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding return apr_proc_create(newproc, progname, args, env, attr, p);
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding}
f4b96a996afbc46872f57ad1450e6ee1c8f13707jorton
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fieldingint _NonAppCheckUnload( void )
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding{
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding return nlmUnloadSignaled(1);
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding}
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding// down server event callback
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fieldingvoid ap_down_server_cb(void *, void *)
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding{
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding nlmUnloadSignaled(0);
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding return;
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding}
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding// destroy callback resources
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fieldingvoid ap_cb_destroy(void *)
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding{
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding // cleanup down event notification
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding UnRegisterEventNotification(eh);
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding NX_UNWRAP_INTERFACE(ref);
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding}
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fieldingint _NonAppStart
e08076ca56e6cb68b30846b9e9339061058aae6dpoirier(
e08076ca56e6cb68b30846b9e9339061058aae6dpoirier void *NLMHandle,
e08076ca56e6cb68b30846b9e9339061058aae6dpoirier void *errorScreen,
e08076ca56e6cb68b30846b9e9339061058aae6dpoirier const char *cmdLine,
e08076ca56e6cb68b30846b9e9339061058aae6dpoirier const char *loadDirPath,
e08076ca56e6cb68b30846b9e9339061058aae6dpoirier size_t uninitializedDataLength,
e08076ca56e6cb68b30846b9e9339061058aae6dpoirier void *NLMFileHandle,
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding int (*readRoutineP)( int conn, void *fileHandle, size_t offset,
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding size_t nbytes, size_t *bytesRead, void *buffer ),
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding size_t customDataOffset,
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding size_t customDataSize,
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding int messageCount,
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding const char **messages
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding)
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding{
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding#pragma unused(cmdLine)
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding#pragma unused(loadDirPath)
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding#pragma unused(uninitializedDataLength)
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding#pragma unused(NLMFileHandle)
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding#pragma unused(readRoutineP)
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding#pragma unused(customDataOffset)
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding#pragma unused(customDataSize)
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding#pragma unused(messageCount)
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding#pragma unused(messages)
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding // register for down server event
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding rtag_t rt = AllocateResourceTag(NLMHandle, "Apache2 Down Server Callback",
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding EventSignature);
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding NX_WRAP_INTERFACE((void *)ap_down_server_cb, 2, (void **)&ref);
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding eh = RegisterForEventNotification(rt, EVENT_DOWN_SERVER,
45acd673a68181802b112e97e84fa3813ddd3ec1stoddard EVENT_PRIORITY_APPLICATION,
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding ref, NULL, NULL);
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding // clean-up
e08076ca56e6cb68b30846b9e9339061058aae6dpoirier NXVmRegisterExitHandler(ap_cb_destroy, NULL);
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding}
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding
09fe0b69d3d1e8c8041c9ce99ee77b8b44b5e3b1fielding