costin 2002/06/11 15:09:11 Added: jk/native2/common jk_signal.c jk_user.c Log: Moved the signal and user handling to 'normal' jk components. ( to keep the jni simple ) Revision Changes Path 1.1 jakarta-tomcat-connectors/jk/native2/common/jk_signal.c Index: jk_signal.c =================================================================== /* ========================================================================= * * * * The Apache Software License, Version 1.1 * * * * Copyright (c) 1999-2001 The Apache Software Foundation. * * All rights reserved. * * * * ========================================================================= * * * * Redistribution and use in source and binary forms, with or without modi- * * fication, are permitted provided that the following conditions are met: * * * * 1. Redistributions of source code must retain the above copyright notice * * notice, this list of conditions and the following disclaimer. * * * * 2. Redistributions in binary form must reproduce the above copyright * * notice, this list of conditions and the following disclaimer in the * * documentation and/or other materials provided with the distribution. * * * * 3. The end-user documentation included with the redistribution, if any, * * must include the following acknowlegement: * * * * "This product includes software developed by the Apache Software * * Foundation <http://www.apache.org/>." * * * * Alternately, this acknowlegement may appear in the software itself, if * * and wherever such third-party acknowlegements normally appear. * * * * 4. The names "The Jakarta Project", "Jk", and "Apache Software * * Foundation" must not be used to endorse or promote products derived * * from this software without prior written permission. For written * * permission, please contact <[EMAIL PROTECTED]>. * * * * 5. Products derived from this software may not be called "Apache" nor may * * "Apache" appear in their names without prior written permission of the * * Apache Software Foundation. * * * * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES * * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY * * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL * * THE APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY * * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * * POSSIBILITY OF SUCH DAMAGE. * * * * ========================================================================= * * * * This software consists of voluntary contributions made by many indivi- * * duals on behalf of the Apache Software Foundation. For more information * * on the Apache Software Foundation, please see <http://www.apache.org/>. * * * * ========================================================================= */ #include "jk_global.h" #include "jk_map.h" #include "jk_pool.h" #include "jk_channel.h" #ifdef HAVE_SIGNAL #include "signal.h" /** Deal with 'signals'. */ static struct sigaction jkAction; /* We use a jni channel to send the notification to java */ static jk_channel_t *jniChannel; /* XXX we should sync or use multiple endpoints if multiple signals can be concurent */ static jk_endpoint_t *signalEndpoint; static void jk2_SigAction(int sig) { jk_env_t *env; /* Make a callback using the jni channel */ fprintf(stderr, "Signal %d\n", sig ); if( jk_env_globalEnv == NULL ) { return; } env=jk_env_globalEnv->getEnv( jk_env_globalEnv ); if( jniChannel==NULL ) { jniChannel=env->getByName( env, "channel.jni:jni" ); fprintf(stderr, "Got jniChannel %p\n", jniChannel ); } if( jniChannel==NULL ) { return; } if( signalEndpoint == NULL ) { jk_bean_t *component=env->createBean2( env, NULL, "endpoint", NULL ); if( component == NULL ) { fprintf(stderr, "Can't create endpoint\n" ); return; } component->init( env, component ); fprintf(stderr, "Create endpoint %p\n", component->object ); signalEndpoint=component->object; } /* Channel:jni should be initialized by the caller */ /* XXX make the callback */ jk_env_globalEnv->releaseEnv( jk_env_globalEnv, env ); } /* XXX We need to: - preserve the old signal ( or get them ) - either implement "waitSignal" or use invocation in jk2_SigAction Probably waitSignal() is better ( we can have a thread that waits ) */ static int jk2_signal_signal(jk_env_t *env, int signalNr ) { memset(& jkAction, 0, sizeof(jkAction)); jkAction.sa_handler=jk2_SigAction; sigaction(signalNr, &jkAction, (void *) NULL); return 0; } static int jk2_signal_sendSignal(jk_env_t *env, int target , int signo) { return kill( (pid_t)target, signo ); } int JK_METHOD jk2_signal_factory( jk_env_t *env ,jk_pool_t *pool, jk_bean_t *result, const char *type, const char *name) { result->setAttribute=NULL; result->object="signal_struct_placeholder"; result->invoke=NULL; result->init=NULL; result->destroy=NULL; return JK_OK; } #else /* ! HAVE_SIGNALS */ int JK_METHOD jk2_signal_factory( jk_env_t *env ,jk_pool_t *pool, jk_bean_t *result, const char *type, const char *name) { result->disabled=JK_TRUE; } #endif 1.1 jakarta-tomcat-connectors/jk/native2/common/jk_user.c Index: jk_user.c =================================================================== /* ========================================================================= * * * * The Apache Software License, Version 1.1 * * * * Copyright (c) 1999-2001 The Apache Software Foundation. * * All rights reserved. * * * * ========================================================================= * * * * Redistribution and use in source and binary forms, with or without modi- * * fication, are permitted provided that the following conditions are met: * * * * 1. Redistributions of source code must retain the above copyright notice * * notice, this list of conditions and the following disclaimer. * * * * 2. Redistributions in binary form must reproduce the above copyright * * notice, this list of conditions and the following disclaimer in the * * documentation and/or other materials provided with the distribution. * * * * 3. The end-user documentation included with the redistribution, if any, * * must include the following acknowlegement: * * * * "This product includes software developed by the Apache Software * * Foundation <http://www.apache.org/>." * * * * Alternately, this acknowlegement may appear in the software itself, if * * and wherever such third-party acknowlegements normally appear. * * * * 4. The names "The Jakarta Project", "Jk", and "Apache Software * * Foundation" must not be used to endorse or promote products derived * * from this software without prior written permission. For written * * permission, please contact <[EMAIL PROTECTED]>. * * * * 5. Products derived from this software may not be called "Apache" nor may * * "Apache" appear in their names without prior written permission of the * * Apache Software Foundation. * * * * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES * * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY * * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL * * THE APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY * * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * * POSSIBILITY OF SUCH DAMAGE. * * * * ========================================================================= * * * * This software consists of voluntary contributions made by many indivi- * * duals on behalf of the Apache Software Foundation. For more information * * on the Apache Software Foundation, please see <http://www.apache.org/>. * * * * ========================================================================= */ #include "jk_global.h" #include "jk_map.h" #include "jk_pool.h" #ifndef WIN32 #include <unistd.h> #include <pwd.h> typedef struct jk_user { char *user; char *group; } jk_user_t; /* -------------------- User related functions -------------------- */ /* XXX move it to jk_user.c */ static int JK_METHOD jk2_user_setAttribute( jk_env_t *env, jk_bean_t *mbean, char *name, void *valueP ) { char *value=(char *)valueP; jk_user_t *usr=(jk_user_t *)mbean->object; if( strcmp( "user", name ) == 0 ) { usr->user=value; } else if( strcmp( "group", name ) == 0 ) { usr->group=value; } else { return JK_ERR; } return JK_OK; } /** This is ugly, we should use a jk_msg to pass string/int/etc */ static void *JK_METHOD jk2_user_getAttribute( jk_env_t *env, jk_bean_t *mbean, char *name ) { if( strcmp( "pid", name ) == 0 ) { char *buf=env->tmpPool->calloc( env, env->tmpPool, 20 ); sprintf( buf, "%d", getpid()); return buf; } return NULL; } static int JK_METHOD jk2_user_init(jk_env_t *env, jk_bean_t *chB ) { jk_user_t *usr=chB->object; struct passwd *passwd; int uid; int gid; int rc; if( usr->user == NULL ) return JK_OK; passwd = getpwnam(usr->user); if (passwd == NULL ) { return JK_ERR; } uid = passwd->pw_uid; gid = passwd->pw_gid; rc = setuid(uid); return rc; } int JK_METHOD jk2_user_factory( jk_env_t *env ,jk_pool_t *pool, jk_bean_t *result, const char *type, const char *name) { result->setAttribute=jk2_user_setAttribute; result->getAttribute=jk2_user_getAttribute; result->object=pool->calloc( env, pool, sizeof( jk_user_t )); result->invoke=NULL; result->init=jk2_user_init; result->destroy=NULL; return JK_OK; } #else /* ! HAVE_SIGNALS */ int JK_METHOD jk2_user_factory( jk_env_t *env ,jk_pool_t *pool, jk_bean_t *result, const char *type, const char *name) { result->disabled=JK_TRUE; } #endif
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>