andya 2004/04/29 10:05:17 Modified: jk/native2/server/dsapi Makefile.in jk_dsapi_plugin.c jk_logger_domino.c config.h Log: Added code to lookup the real Notes username for authenticated users and pass that as the request username. Revision Changes Path 1.2 +10 -4 jakarta-tomcat-connectors/jk/native2/server/dsapi/Makefile.in Index: Makefile.in =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/server/dsapi/Makefile.in,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- Makefile.in 26 Mar 2004 13:53:06 -0000 1.1 +++ Makefile.in 29 Apr 2004 17:05:17 -0000 1.2 @@ -7,6 +7,7 @@ [EMAIL PROTECTED]@ [EMAIL PROTECTED]@ [EMAIL PROTECTED]@ [EMAIL PROTECTED]@ [EMAIL PROTECTED]@ [EMAIL PROTECTED]@ @@ -20,6 +21,10 @@ JAVA_LIB=-L ${JAVA_HOME}/jre/lib/${ARCH} -L ${JAVA_HOME}/lib/${ARCH}/native_threads endif +NOTES_INCL=-I ${NOTESAPI}/include +NOTES_OBJS=${NOTESAPI}/lib/linux/notes0.o +NOTES_CFLAGS=-DUNIX -DLINUX + JK_DIR := ../.. BUILD_DIR = ${JK_DIR}/../build/jk2/dsapi @@ -30,13 +35,14 @@ INCLUDES= -I${JK_DIR}/include \ ${APR_INCL} \ ${DOMINO_INCL} \ - ${JAVA_INCL} + ${JAVA_INCL} \ + ${NOTES_INCL} JK_CFLAGS=-DCHUNK_SIZE=4096 @APR_CFLAGS@ -DHAVE_MMAP @HAVE_JNI@ @HAS_PCRE@ JK_LDFLAGS=-lcrypt ${APR_LDFLAGS} @PCRE_LIBS@ ###### Based on rules.mk ########################################## -ALL_CFLAGS = $(EXTRA_CFLAGS) $(NOTEST_CFLAGS) $(CFLAGS) +ALL_CFLAGS = $(EXTRA_CFLAGS) $(NOTEST_CFLAGS) $(NOTES_CFLAGS) $(CFLAGS) ALL_CPPFLAGS = $(DEFS) $(EXTRA_CPPFLAGS) $(NOTEST_CPPFLAGS) $(CPPFLAGS) ALL_LDFLAGS = $(EXTRA_LDFLAGS) $(NOTEST_LDFLAGS) $(LDFLAGS) ALL_LIBS = $(EXTRA_LIBS) $(NOTEST_LIBS) $(LIBS) @@ -93,13 +99,13 @@ #all: prepare ${BUILD_DIR}/libtomcat2.so ${BUILD_DIR}/libjkjni.so all: prepare ${BUILD_DIR}/libtomcat2.so -${BUILD_DIR}/libtomcat2.la: ${COMMON_LO_FILES} ${DSAPI_LO_FILES} +${BUILD_DIR}/libtomcat2.la: ${COMMON_LO_FILES} ${DSAPI_LO_FILES} ${NOTES_OBJS} ${MOD_LINK} -o $@ $^ ${JK_LDFLAGS} ${BUILD_DIR}/libtomcat2.so: ${BUILD_DIR}/libtomcat2.la $(MOD_INSTALL) $^ `pwd`/${BUILD_DIR} -#${BUILD_DIR}/libjkjni.la: ${JNI_LO_FILES} ${COMMON_LO_FILES} +#${BUILD_DIR}/libjkjni.la: ${JNI_LO_FILES} ${COMMON_LO_FILES} ${NOTES_OBJS} # $(MOD_LINK) -o $@ $(JK_LDFLAGS) $^ #${BUILD_DIR}/libjkjni.so: ${BUILD_DIR}/libjkjni.la 1.11 +123 -6 jakarta-tomcat-connectors/jk/native2/server/dsapi/jk_dsapi_plugin.c Index: jk_dsapi_plugin.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/server/dsapi/jk_dsapi_plugin.c,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- jk_dsapi_plugin.c 29 Apr 2004 12:22:38 -0000 1.10 +++ jk_dsapi_plugin.c 29 Apr 2004 17:05:17 -0000 1.11 @@ -50,7 +50,11 @@ #include "apr_general.h" /* Domino DSAPI filter definitions */ -#include "dsapifilter.h" +#include <global.h> +#include <addin.h> +#include <dsapi.h> +#include <osmem.h> +#include <lookup.h> int JK_METHOD jk2_logger_domino_factory(jk_env_t *env, jk_pool_t *pool, jk_bean_t *result, const char *type, const char *name); @@ -78,6 +82,7 @@ static int tomcatTimeout = TOMCAT_STARTSTOP_TO; static const char *crlf = "\r\n"; +static const char *filterdesc = FILTERDESC; #define WORKPOOL globalPool @@ -641,6 +646,108 @@ return kFilterHandledRequest; } +/* Get the info from the lookup buffer + */ +static int getLookupInfo(FilterContext *context, char *pMatch, int itemNumber, char **pInfo, int *pInfoLen) { + unsigned int reserved = 0; + unsigned int errID; + char *pValue = NULL; + WORD lValue, type; + STATUS error; + + if (NULL == pMatch || NULL == pInfo || NULL == pInfoLen || (itemNumber < 0)) { + return -1; + } + + /* Initialize output */ + *pInfo = NULL; + *pInfoLen = 0; + + /* Check the type and length of the info */ + pValue = (char *) NAMELocateItem(pMatch, itemNumber, &type, &lValue); + + if (NULL == pValue || lValue == 0) { + return -1; + } + + lValue -= sizeof(WORD); /* remove datatype word included in the list length */ + + /* check the value type */ + if (type != TYPE_TEXT_LIST && type != TYPE_TEXT) { + return -1; + } + + /* Allocate space for the info. This memory will be freed automatically when the thread terminates */ + if (*pInfo = context->AllocMem(context, lValue+1, reserved, &errID), NULL == *pInfo) { + return -1; + } + + /* Get the info */ + if (error = NAMEGetTextItem(pMatch, itemNumber, 0, *pInfo, lValue + 1), !error) { + *pInfoLen = lValue + 1; + return 0; + } + + return -1; +} + +/* Lookup the user and return the user's full name + */ +static int getUserName(FilterContext *context, char *userName, char **pUserName, int *pUserNameLen) { + STATUS error = NOERROR; + HANDLE hLookup = NULLHANDLE; + unsigned short nMatches = 0; + char *pLookup = NULL; + char *pName = NULL; + char *pMatch = NULL; + int rc = -1; + + if (NULL == userName || NULL == pUserName || NULL == pUserNameLen) { + return rc; + } + + /* Initializae output */ + *pUserName = NULL; + *pUserNameLen = 0; + + /* do the name lookup */ + error = NAMELookup(NULL, 0, 1, "$Users", 1, userName, 2, "FullName", &hLookup); + + if (error || (NULLHANDLE == hLookup)) { + goto done; + } + + pLookup = (char *) OSLockObject(hLookup); + + /* Get pointer to our entry. */ + pName = (char *) NAMELocateNextName(pLookup, NULL, &nMatches); + + /* If we didn't find the entry, the quit */ + if (NULL == pName || nMatches <= 0) { + goto done; + } + + if (pMatch = (char *) NAMELocateNextMatch(pLookup, pName, NULL), NULL == pMatch) { + goto done; + } + + /* Get the full name from the info we got back */ + if (getLookupInfo(context, pMatch, 0, pUserName, pUserNameLen)) { + goto done; + } + + rc = 0; + +done: + if(NULLHANDLE != hLookup) { + if (NULL != pLookup) { + OSUnlock(hLookup); + } + OSMemFree(hLookup); + } + return rc; +} + /* Given all the HTTP headers as a single string parse them into individual * name, value pairs. */ @@ -740,6 +847,13 @@ GETVARIABLE("AUTH_TYPE", &s->auth_type, ""); GETVARIABLE("REMOTE_USER", &s->remote_user, ""); + + /* If the REMOTE_USER CGI variable doesn't work try asking Domino */ + if (s->remote_user[0] == '\0' && fr->userName[0] != '\0') { + int len; + getUserName(ws->context, fr->userName, &s->remote_user, &len); + } + GETVARIABLE("SERVER_PROTOCOL", &s->protocol, ""); GETVARIABLE("REMOTE_HOST", &s->remote_host, ""); GETVARIABLE("REMOTE_ADDR", &s->remote_addr, ""); @@ -939,7 +1053,9 @@ s.afterRequest = cbAfterRequest; if (workerEnv->options == JK_OPT_FWDURICOMPATUNPARSED) { - s.req_uri = env->globalPool->pstrdup(env, rPool, uri); + size_t sz = strlen(uri) + 1; + s.req_uri = context->AllocMem(context, sz, 0, &errID); + memcpy(s.req_uri, uri, sz); /* Find the query string again in the original URI */ if (qp = strchr(s.req_uri, '?'), NULL != qp) { *qp++ = '\0'; @@ -968,6 +1084,7 @@ ws.reqSize = context->GetRequestContents(context, &ws.reqBuffer, &errID); rc = processRequest(env, &s, worker, &fr); + if (JK_OK == rc) { rc = worker->service(env, uriEnv->worker, &s); } @@ -1058,7 +1175,7 @@ } #endif - AddInLogMessageText(FILTERDESC " unloaded", NOERROR); + AddInLogMessageText("%s unloaded", NOERROR, filterdesc); apr_pool_destroy(jk_globalPool); @@ -1148,7 +1265,7 @@ filterInitData->appFilterVersion = kInterfaceVersion; filterInitData->eventFlags = kFilterParsedRequest; - strncpy(filterInitData->filterDesc, FILTERDESC, sizeof(filterInitData->filterDesc)); + strncpy(filterInitData->filterDesc, filterdesc, sizeof(filterInitData->filterDesc)); isInited = JK_TRUE; /* Display banner @@ -1158,7 +1275,7 @@ return kFilterHandledEvent; initFailed: - AddInLogMessageText("Error loading %s", NOERROR, FILTERDESC); + AddInLogMessageText("Error loading %s", NOERROR, filterdesc); return kFilterError; } 1.2 +3 -2 jakarta-tomcat-connectors/jk/native2/server/dsapi/jk_logger_domino.c Index: jk_logger_domino.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/server/dsapi/jk_logger_domino.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- jk_logger_domino.c 28 Apr 2004 15:07:14 -0000 1.1 +++ jk_logger_domino.c 29 Apr 2004 17:05:17 -0000 1.2 @@ -26,7 +26,8 @@ #include "jk_map.h" #include "jk_logger.h" -#include "dsapifilter.h" +#include <global.h> +#include <addin.h> static int JK_METHOD jk2_logger_domino_log(jk_env_t *env, jk_logger_t *l, int level, const char *what) { 1.10 +2 -2 jakarta-tomcat-connectors/jk/native2/server/dsapi/config.h Index: config.h =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/server/dsapi/config.h,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- config.h 29 Apr 2004 12:23:08 -0000 1.9 +++ config.h 29 Apr 2004 17:05:17 -0000 1.10 @@ -62,7 +62,7 @@ #define TOMCAT_START_TAG "tomcatStart" #define TOMCAT_STOP_TAG "tomcatStop" #define TOMCAT_TIMEOUT_TAG "tomcatTimeout" -#define VERSION "2.0.4" +#define VERSION "2.0.5" #define VERSION_STRING "Jakarta/DSAPI/" VERSION #define FILTERDESC "Apache Tomcat Interceptor (" VERSION_STRING ")" #define SERVERDFLT "Lotus Domino"
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]