costin      02/05/23 16:45:08

  Modified:    jk/native2/jni jk_jni_aprImpl.c
  Log:
  Add support for setuid() - to change the user if run as root.
  
  Revision  Changes    Path
  1.22      +46 -2     jakarta-tomcat-connectors/jk/native2/jni/jk_jni_aprImpl.c
  
  Index: jk_jni_aprImpl.c
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/jni/jk_jni_aprImpl.c,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- jk_jni_aprImpl.c  15 May 2002 19:46:46 -0000      1.21
  +++ jk_jni_aprImpl.c  23 May 2002 23:45:07 -0000      1.22
  @@ -78,6 +78,10 @@
   #include "jk_map.h"
   #include "jk_pool.h"
   
  +#ifndef WIN32
  +#include <unistd.h>
  +#include <pwd.h>
  +#endif
   
   #if APR_HAVE_SYS_TYPES_H
   #include <sys/types.h>
  @@ -107,7 +111,6 @@
   
       if( jk_env_globalEnv == NULL ) {
           jk_pool_t *globalPool;
  -        jk_bean_t *jkb;
   
           if( jniAprPool==NULL ) {
               return 0;
  @@ -212,10 +215,51 @@
   /* -------------------- User related functions -------------------- */
   
   JNIEXPORT jlong JNICALL 
  -Java_org_apache_jk_apr_AprImpl_userId(JNIEnv *jniEnv, jobject _jthis, jlong pool)
  +Java_org_apache_jk_apr_AprImpl_userId(JNIEnv *jniEnv, jobject _jthis)
   {
       
       return 0;
  +}
  +
  +JNIEXPORT jlong JNICALL 
  +Java_org_apache_jk_apr_AprImpl_getPid(JNIEnv *jniEnv, jobject _jthis)
  +{
  +  return (jlong) getpid();
  +}
  +
  +
  +JNIEXPORT jlong JNICALL 
  +Java_org_apache_jk_apr_AprImpl_setUser(JNIEnv *jniEnv, jobject _jthis,
  +                                       jstring userJ, jstring groupJ)
  +{
  +    int rc=0;
  +#ifndef WIN32
  +    const char *user;
  +    char *group;
  +    struct passwd *passwd;
  +    int uid;
  +    int gid;
  +
  +    user = (*jniEnv)->GetStringUTFChars(jniEnv, userJ, 0);
  +    
  +    passwd = getpwnam(user);
  +
  +    (*jniEnv)->ReleaseStringUTFChars(jniEnv, userJ, user);
  +
  +    if (passwd == NULL ) {
  +        return -1;
  +    }
  +    uid = passwd->pw_uid;
  +    gid = passwd->pw_gid;
  +
  +    if (uid < 0 || gid < 0 ) 
  +        return -2;
  +
  +    rc = setuid(uid);
  +
  +#endif
  +
  +    return rc;
   }
   
   /* -------------------- interprocess mutexes -------------------- */
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to