}
-static edg_wll_Context tmp_ctx;
-static int gss_reader(char *buffer, int max_len)
+static int gss_reader(void *user_data, char *buffer, int max_len)
{
edg_wll_GssStatus gss_code;
+ edg_wll_Context tmp_ctx = (edg_wll_Context)user_data;
int ret, len;
ret = edg_wll_gss_read_full(&tmp_ctx->connPoolNotif[0].gss,
ctx->connPoolNotif[0].bufUse = 0;
ctx->connPoolNotif[0].bufSize = 0;
- tmp_ctx = ctx;
- len = read_il_data(&ctx->connPoolNotif[0].buf, gss_reader);
+ len = read_il_data(ctx, &ctx->connPoolNotif[0].buf, gss_reader);
if(len < 0)
return(len);
}
-static edg_wll_Context tmp_context;
-static edg_wll_PlainConnection *tmp_conn;
+
+struct reader_data {
+ edg_wll_Context ctx;
+ void *conn;
+};
static
int
-plain_reader(char *buffer, int max_len)
+plain_reader(void *user_data, char *buffer, int max_len)
{
+ struct reader_data *data = (struct reader_data *)user_data;
int len;
- len = edg_wll_plain_read_full(tmp_conn, buffer, max_len, &tmp_context->p_tmp_timeout);
+ len = edg_wll_plain_read_full(data->conn, buffer, max_len, &data->ctx->p_tmp_timeout);
if(len < 0)
- edg_wll_SetError(tmp_context, LB_PROTO, "get_reply_plain(): error reading message data");
+ edg_wll_SetError(data->ctx, LB_PROTO, "get_reply_plain(): error reading message data");
return(len);
}
{
char *msg;
int len, code;
+ struct reader_data data;
+ data.ctx = context;
+ data.conn = conn;
code = 0;
- tmp_context = context;
- tmp_conn = conn;
- len = read_il_data(&msg, plain_reader);
+ len = read_il_data(&data, &msg, plain_reader);
if(len < 0)
goto get_reply_plain_end;
}
-static edg_wll_GssConnection *tmp_gss_conn;
-
static
int
-gss_reader(char *buffer, int max_len)
+gss_reader(void *user_data, char *buffer, int max_len)
{
+ struct reader_data *data = (struct reader_data *)user_data;
int ret, len;
edg_wll_GssStatus gss_code;
- ret = edg_wll_gss_read_full(tmp_gss_conn, buffer, max_len, &tmp_context->p_tmp_timeout,
+ ret = edg_wll_gss_read_full(data->conn, buffer, max_len, &data->ctx->p_tmp_timeout,
&len, &gss_code);
if(ret < 0) {
- edg_wll_log_proto_handle_gss_failures(tmp_context, ret, &gss_code, "edg_wll_gss_read_full");
- edg_wll_UpdateError(tmp_context, LB_PROTO, "get_reply_gss(): error reading message");
+ edg_wll_log_proto_handle_gss_failures(data->ctx, ret, &gss_code, "edg_wll_gss_read_full");
+ edg_wll_UpdateError(data->ctx, LB_PROTO, "get_reply_gss(): error reading message");
}
return(ret);
{
char *msg;
int code;
+ struct reader_data data;
- tmp_context = context;
- tmp_gss_conn = conn;
- code = read_il_data(&msg, gss_reader);
+ data.ctx = context;
+ data.conn = conn;
+ code = read_il_data(&data, &msg, gss_reader);
if(code < 0)
goto get_reply_gss_end;
if ((answer = edg_wll_gss_connect(cred,
context->p_destination, context->p_dest_port,
&context->p_tmp_timeout, &con, &gss_stat)) < 0) {
- edg_wll_log_proto_handle_gss_failures(context,answer,&gss_stat,"edg_wll_gss_connect()");
+ answer = edg_wll_log_proto_handle_gss_failures(context,answer,&gss_stat,"edg_wll_gss_connect()");
goto edg_wll_DoLogEvent_end;
}
#endif
if ((answer = edg_wll_gss_connect(cred,host,port,
&context->p_tmp_timeout, &con, &gss_stat)) < 0) {
- edg_wll_log_proto_handle_gss_failures(context,answer,&gss_stat,"edg_wll_gss_connect()");
+ answer = edg_wll_log_proto_handle_gss_failures(context,answer,&gss_stat,"edg_wll_gss_connect()");
goto edg_wll_DoLogEventDirect_end;
}
int encode_il_reply(char **, int, int, const char *);
int decode_il_msg(char **, const char *);
int decode_il_reply(int *, int *, char **, const char *);
-int read_il_data(char **, int (*)(char *, const int));
+int read_il_data(void *user_data,
+ char **buffer,
+ int (*reader)(void *user_data, char *buffer, const int));
#endif
#include <unistd.h>
#include <stdlib.h>
+#define IL_PROTOCOL_MAGIC_WORD "michal"
+
int
encode_il_msg(char **buffer, const char *event)
{
int len;
char *p;
+ char *protocol_magic_word = IL_PROTOCOL_MAGIC_WORD;
/* allocate enough room to hold the message */
- len = 17 + len_string((char*)event);
+ len = 17 + len_string(protocol_magic_word) + len_string((char*)event);
if((*buffer = malloc(len)) == NULL) {
return(-1);
}
p += 17;
/* write rest of the message */
+ p = put_string(p, protocol_magic_word);
p = put_string(p, (char*)event);
return(p - *buffer);
decode_il_msg(char **event, const char *buf)
{
char *p;
+ char *protocol_magic_word=NULL;
+ int magic_word_check_failed = 0;
+
+ /* First check that the protocol 'magic' word is there */
+ p = get_string((char*)buf, &protocol_magic_word);
+ if (protocol_magic_word) {
+ if (strcmp (protocol_magic_word, IL_PROTOCOL_MAGIC_WORD) != 0) {
+ magic_word_check_failed = 1;
+ }
+ free(protocol_magic_word);
+ }
+
+ if (magic_word_check_failed != 0) return (-1);
- p = get_string((char*)buf, event);
+ p = get_string(p, event);
if(p == NULL) {
if(*event) { free(*event); *event = NULL; };
return(-1);
int
-read_il_data(char **buffer,
- int (*reader)(char *, const int))
+read_il_data(void *user_data,
+ char **buffer,
+ int (*reader)(void *, char *, const int))
{
char buf[17];
int ret, len;
/* read 17 byte header */
- len = (*reader)(buf, 17);
+ len = (*reader)(user_data, buf, 17);
if(len < 0) {
goto err;
}
}
/* read body */
- ret = (*reader)(*buffer, len);
+ ret = (*reader)(user_data, *buffer, len);
if(ret < 0) {
free(*buffer);
*buffer = NULL;
}
void testEncodeMsg() {
- CPPUNIT_ASSERT_EQUAL(len_msg, 26);
+ CPPUNIT_ASSERT_EQUAL(len_msg, 35);
CPPUNIT_ASSERT(buffer_msg != NULL);
CPPUNIT_ASSERT(!strncmp(buffer_msg, msg, len_msg));
}
int l;
char *s;
- l = read_il_data(&s, test_reader);
- CPPUNIT_ASSERT_EQUAL(l, 9);
+ l = read_il_data(/*user data*/NULL, &s, test_reader);
+ CPPUNIT_ASSERT_EQUAL(l, 18);
CPPUNIT_ASSERT(s != NULL);
- CPPUNIT_ASSERT(!strcmp(s, "6 zprava\n"));
+ CPPUNIT_ASSERT(!strcmp(s, "6 michal\n6 zprava\n"));
free(s);
}
static const char *msg, *rep;
static int pos;
- static int test_reader(char *buf, int len) {
+ static int test_reader(void *user_data, char *buf, int len) {
strncpy(buf, msg+pos, len);
pos += len;
return(len);
}
};
-const char *IlMsgTest::msg = " 9\n6 zprava\n";
+const char *IlMsgTest::msg = " 18\n6 michal\n6 zprava\n";
const char *IlMsgTest::rep = " 14\n10\n20\n5 chyba\n";
int IlMsgTest::pos;
#endif
-static edg_wll_GssConnection *tmp_gss;
+
+struct reader_data {
+ edg_wll_GssConnection *gss;
+ struct timeval *timeout;
+};
+
static
int
-gss_reader(char *buffer, int max_len)
+gss_reader(void *user_data, char *buffer, int max_len)
{
int ret, len;
- struct timeval tv;
+ struct reader_data *data = (struct reader_data *)user_data;
edg_wll_GssStatus gss_stat;
- tv.tv_sec = TIMEOUT;
- tv.tv_usec = 0;
- ret = edg_wll_gss_read_full(tmp_gss, buffer, max_len, &tv, &len, &gss_stat);
+ ret = edg_wll_gss_read_full(data->gss, buffer, max_len, data->timeout, &len, &gss_stat);
if(ret < 0) {
char *gss_err = NULL;
char *msg;
int ret, code;
size_t len, l;
+ struct timeval tv;
+ struct reader_data data;
- tmp_gss = &eq->gss;
- len = read_il_data(&msg, gss_reader);
+ tv.tv_sec = TIMEOUT;
+ tv.tv_usec = 0;
+ data.gss = &eq->gss;
+ data.timeout = &tv;
+ len = read_il_data(&data, &msg, gss_reader);
if(len < 0)
return(-1);
YACC=bison -y
CC=gcc
-VPATH=${top_srcdir}/interface:${top_srcdir}/src:${top_srcdir}/test:${top_srcdir}/examples:${top_srcdir}/project
+ifeq ($(gsoap_version),2.7.0)
+ VPATH=${top_srcdir}/interface:${top_srcdir}/src:${top_srcdir}/test:${top_srcdir}/examples:${top_srcdir}/project:${gsoap_prefix}
+else
+ VPATH=${top_srcdir}/interface:${top_srcdir}/src:${top_srcdir}/test:${top_srcdir}/examples:${top_srcdir}/project
+endif
AT3=perl -I${top_srcdir}/project ${top_srcdir}/project/at3
TEST_LIBS:=-L${cppunit}/lib -lcppunit
-I${top_srcdir}/interface \
-I${expat_prefix}/include \
-I${ares_prefix}/include \
- -I${gsoap_prefix}/include \
+ -I${gsoap_prefix}/include -I${gsoap_prefix}/ \
${COVERAGE_FLAGS} \
-I${mysql_prefix}/include -I${mysql_prefix}/include/mysql \
-I${globus_prefix}/include/${nothrflavour} \
-lglobus_common_${nothrflavour} \
-lglobus_gssapi_gsi_${nothrflavour} \
+ifeq ($(shell ls ${gsoap_prefix}/bin/soapcpp2),${gsoap_prefix}/bin/soapcpp2)
+ gsoap_bin_prefix := ${gsoap_prefix}/bin
+else
+ gsoap_bin_prefix := ${gsoap_prefix}
+endif
+
ifneq (${mysql_prefix},/usr)
ifeq ($(shell echo ${mysql_version} | cut -d. -f1,2),4.1)
mysqlib := -L${mysql_prefix}/lib/mysql
lb_xml_parse_V21.o \
lock.o openserver.o query.o userjobs.o db_store.o request.o store.o \
stored_master.o srv_purge.o server_state.o dump.o lb_authz.o load.o \
- notification.o il_notification.o notif_match.o stats.o
+ notification.o il_notification.o notif_match.o stats.o
ifeq ($(GLITE_LB_SERVER_WITH_WS),yes)
- BKSERVER_OBJS:= \
- ${BKSERVER_BASE_OBJS} \
- ${GSOAP_FILES_PREFIX}C.o ${GSOAP_FILES_PREFIX}Server.o \
- ws_query.o ws_fault.o ws_typeref.o
-
- BKSERVER_LIBS= \
- ${SRVBONES_LIB} \
- -lglite_lb_common_${nothrflavour} \
- -L${gsoap_prefix}/lib -lgsoap \
- -lglite_security_gsoap_plugin_${nothrflavour} \
- ${EXT_LIBS}
+ ifeq ($(gsoap_version),2.7.0)
+ BKSERVER_OBJS:= \
+ ${BKSERVER_BASE_OBJS} \
+ ${GSOAP_FILES_PREFIX}C.o ${GSOAP_FILES_PREFIX}Server.o \
+ ws_query.o ws_fault.o ws_typeref.o stdsoap2.o
+
+ BKSERVER_LIBS= \
+ ${SRVBONES_LIB} \
+ -lglite_lb_common_${nothrflavour} \
+ -lglite_security_gsoap_plugin_${nothrflavour} \
+ ${EXT_LIBS}
+ else
+ BKSERVER_OBJS:= \
+ ${BKSERVER_BASE_OBJS} \
+ ${GSOAP_FILES_PREFIX}C.o ${GSOAP_FILES_PREFIX}Server.o \
+ ws_query.o ws_fault.o ws_typeref.o
+
+ BKSERVER_LIBS= \
+ ${SRVBONES_LIB} \
+ -lglite_lb_common_${nothrflavour} \
+ -L${gsoap_prefix}/lib -lgsoap \
+ -lglite_security_gsoap_plugin_${nothrflavour} \
+ ${EXT_LIBS}
+ endif
else
BKSERVER_OBJS:= ${BKSERVER_BASE_OBJS}
chmod -w $@ >/dev/null
${GSOAP_FILES_PREFIX}H.h ${GSOAP_FILES_PREFIX}C.c ${GSOAP_FILES_PREFIX}Server.c ${GSOAP_FILES_PREFIX}Client.c ${GSOAP_FILES_PREFIX}ServerLib.c ${GSOAP_FILES_PREFIX}ClientLib.c LoggingAndBookkeeping.nsmap: LB.xh
- ${gsoap_prefix}/bin/soapcpp2 -w -c -p ${GSOAP_FILES_PREFIX} LB.xh
+ ${gsoap_bin_prefix}/soapcpp2 -w -c -p ${GSOAP_FILES_PREFIX} LB.xh
# try several times -- LB.wsdl downloads BaseFault.xsd from www.ibm.com which may be failing
# not used right now but may be useful one day
LB.xh: ws_typemap.dat ${stagedir}/interface/LB.wsdl
cp ${stagedir}/interface/LBTypes.wsdl .
- ${gsoap_prefix}/bin/wsdl2h -c -t ${top_srcdir}/src/ws_typemap.dat -o $@ ${stagedir}/interface/LB.wsdl
+ ${gsoap_bin_prefix}/wsdl2h -c -t ${top_srcdir}/src/ws_typemap.dat -o $@ ${stagedir}/interface/LB.wsdl
rm -f LBTypes.wsdl
test.xml: test_xml
${COMPILE} -o $@ -c $<
soap_version.h:
- ${gsoap_prefix}/bin/soapcpp2 /dev/null
+ ${gsoap_bin_prefix}/soapcpp2 /dev/null
perl -ne '$$. == 2 && /.*([0-9])\.([0-9])\.([0-9]).*/ && printf "#define GSOAP_VERSION %d%02d%02d\n",$$1,$$2,$$3' soapH.h >$@
-rm soapC.cpp soapH.h soapStub.h soapClient.cpp soapServer.cpp soapClientLib.cpp soapServerLib.cpp
Revision history:
$Log$
+ Revision 1.7.2.1 2005/08/09 15:02:10 jskrabal
+ - build with broken gsoap 2.7.0 repository package
+
+ Revision 1.7 2005/08/03 09:30:28 akrenek
+ Merged the release 1.0 branch
+
Revision 1.6 2005/01/21 11:27:44 jpospi
completely remove gridsite.prefix and voms.prefix
mysql_version=${ext.mysql.version}
cppunit=${with.cppunit.prefix}
gsoap_prefix=${with.gsoap.prefix}
+gsoap_version=${ext.gsoap.version}
</echo>
</target>
</project>
char *select_max,*ssrc;
edg_wll_Stmt sh = NULL;
int next = 0xDEAD;
+ int lbproxy_notreg = 0;
char *now_s = NULL;
ssrc = jobid = stmt = select_max = NULL;
edg_wll_ResetError(ctx);
switch (err = check_auth(ctx,e)) {
case 0: break;
- case ENOENT: goto clean;
+ case ENOENT:
+ if ( !ctx->isProxy ) goto clean;
+ edg_wll_ResetError(ctx);
+ lbproxy_notreg = 1;
+ break;
case EPERM:
if (!ctx->noAuth) goto clean;
edg_wll_ResetError(ctx);
jobid = edg_wlc_JobIdGetUnique(e->any.jobId);
/* only REGJOB events determine job owner now */
- if (e->type == EDG_WLL_EVENT_REGJOB &&
- (err = store_job(ctx,e->any.jobId,userid))) goto clean;
+ if ( (e->type == EDG_WLL_EVENT_REGJOB || lbproxy_notreg)
+ && (err = store_job(ctx,e->any.jobId,userid))) goto clean;
/* obtain next event sequence number */
) goto clean;
if (!owner) {
- edg_wll_SetError(ctx,ENOENT,"job not registered");
+ if ( ctx->isProxy && !e->any.seqcode )
+ edg_wll_SetError(ctx, EINVAL, "Job not registered - sequence code needed");
+ else
+ /* We have to let the calling function know what happened here
+ * even if it hapens inside the LB Proxy which shouldn't consider
+ * this as an error
+ */
+ edg_wll_SetError(ctx, ENOENT, "job not registered");
goto clean;
}
#include "store.h"
-static edg_wll_Context tmp_ctx;
static
int
-gss_reader(char *buffer, int max_len)
+gss_reader(void *user_data, char *buffer, int max_len)
{
+ edg_wll_Context tmp_ctx = (edg_wll_Context)user_data;
int ret, len;
edg_wll_GssStatus gss_code;
edg_wll_GssStatus gss_code;
edg_wll_ResetError(ctx);
- tmp_ctx = ctx;
- ret = read_il_data(&buf, gss_reader);
+ ret = read_il_data(ctx, &buf, gss_reader);
if(ret < 0)
return(ret);
static
int
-gss_plain_reader(char *buffer, int max_len)
+gss_plain_reader(void *user_data, char *buffer, int max_len)
{
+ edg_wll_Context tmp_ctx = (edg_wll_Context)user_data;
int ret;
ret = edg_wll_plain_read_full(&tmp_ctx->connProxy->conn, buffer, max_len,
edg_wll_ResetError(ctx);
- tmp_ctx = ctx;
- ret = read_il_data(&buf, gss_plain_reader);
+ ret = read_il_data(ctx, &buf, gss_plain_reader);
if ( ret < 0 ) return(ret);
if ( !(ret = handle_request(ctx, buf)) ) {
Revision history:
$Log$
+ Revision 1.32 2005/08/03 11:58:25 akrenek
+ Merged the release 1.0 branch
+
Revision 1.31 2005/05/26 15:13:37 zurek
inserted module.build.file
<!-- component targets definitions tag = do not remove = -->
+ <target name="security.gsoap-plugin" unless="setenvonly" depends="envset">
+ <if>
+ <isset property="small.memory"/>
+ <then>
+ <exec dir="${security.subsystem.dir}" executable="${antExec}" failonerror="${failonerror}">
+ <arg line="gsoap-plugin -Dtarget=${target} -Dsmall.memory=true -Dbootstrap=${bootstrap} -Dfailonerror=${failonerror} -Ddo.cvs.tag=${do.cvs.tag}"/>
+ </exec>
+ </then>
+ <else>
+ <ant dir="${security.subsystem.dir}"
+ target="gsoap-plugin"
+ inheritall="false" >
+ <property name="target" value="${target}"/>
+ </ant>
+ </else>
+ </if>
+ </target>
+
+ <target name="security.voms" unless="setenvonly" depends="envset">
+ <if>
+ <isset property="small.memory"/>
+ <then>
+ <exec dir="${security.subsystem.dir}" executable="${antExec}" failonerror="${failonerror}">
+ <arg line="voms -Dtarget=${target} -Dsmall.memory=true -Dbootstrap=${bootstrap} -Dfailonerror=${failonerror} -Ddo.cvs.tag=${do.cvs.tag}"/>
+ </exec>
+ </then>
+ <else>
+ <ant dir="${security.subsystem.dir}"
+ target="voms"
+ inheritall="false" >
+ <property name="target" value="${target}"/>
+ </ant>
+ </else>
+ </if>
+ </target>
+
+ <target name="wms-utils.jobid" unless="setenvonly" depends="envset">
+ <if>
+ <isset property="small.memory"/>
+ <then>
+ <exec dir="${wms-utils.subsystem.dir}" executable="${antExec}" failonerror="${failonerror}">
+ <arg line="jobid -Dtarget=${target} -Dsmall.memory=true -Dbootstrap=${bootstrap} -Dfailonerror=${failonerror} -Ddo.cvs.tag=${do.cvs.tag}"/>
+ </exec>
+ </then>
+ <else>
+ <ant dir="${wms-utils.subsystem.dir}"
+ target="jobid"
+ inheritall="false" >
+ <property name="target" value="${target}"/>
+ </ant>
+ </else>
+ </if>
+ </target>
+
<target name="client-interface" unless="setenvonly" depends="envset">
<if>
<isset property="small.memory" />
</if>
</target>
- <target name="common" unless="setenvonly" depends="envset, globus,expat,ares,client-interface">
+ <target name="common" unless="setenvonly" depends="envset, globus, expat, ares, wms-utils.jobid, security.gsoap-plugin, client-interface">
<if>
<isset property="small.memory" />
<then>
</if>
</target>
- <target name="server" unless="setenvonly" depends="envset, globus,expat,ares,mysql,gsoap,client-interface,ws-interface,common,logger">
+ <target name="server" unless="setenvonly" depends="envset, globus, expat, ares, mysql, gsoap, security.voms, client-interface, ws-interface, common, logger">
<if>
<isset property="small.memory" />
<then>