"The gigantic merge"; from release 1.4 branch to HEAD
authorAleš Křenek <ljocha@ics.muni.cz>
Mon, 19 Sep 2005 15:24:20 +0000 (15:24 +0000)
committerAleš Křenek <ljocha@ics.muni.cz>
Mon, 19 Sep 2005 15:24:20 +0000 (15:24 +0000)
12 files changed:
org.glite.lb.client/src/notification.c
org.glite.lb.client/src/prod_proto.c
org.glite.lb.client/src/producer.c
org.glite.lb.common/interface/il_msg.h
org.glite.lb.common/src/il_msg.c
org.glite.lb.common/test/il_msg_test.cpp
org.glite.lb.logger/src/send_event.c
org.glite.lb.server/Makefile
org.glite.lb.server/project/configure.properties.xml
org.glite.lb.server/src/store.c.T
org.glite.lb.server/src/stored_master.c
org.glite.lb/build.xml

index acd991a..a9fe57b 100644 (file)
@@ -446,11 +446,11 @@ err:
 }
 
 
-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,
@@ -485,8 +485,7 @@ static int recv_notif(edg_wll_Context ctx)
        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);
        
index 7d24851..367d9c1 100644 (file)
@@ -66,18 +66,22 @@ int edg_wll_log_proto_handle_gss_failures(edg_wll_Context context, int code, edg
 }
 
 
-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);
 }
@@ -96,11 +100,12 @@ get_reply_plain(edg_wll_Context context, edg_wll_PlainConnection *conn, char **b
 {
        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;
 
@@ -116,20 +121,19 @@ 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);
@@ -142,10 +146,11 @@ get_reply_gss(edg_wll_Context context, edg_wll_GssConnection *conn, char **buf,
 {
        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;
 
index 27c71fd..bd6905c 100644 (file)
@@ -127,7 +127,7 @@ static int edg_wll_DoLogEvent(
        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;
        }
 
@@ -274,7 +274,7 @@ static int edg_wll_DoLogEventDirect(
 #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;
        }
 
index cb839f8..a2e33a4 100644 (file)
@@ -33,6 +33,8 @@ int encode_il_msg(char **, const char *);
 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
index a9e3fff..dc07813 100644 (file)
@@ -7,15 +7,18 @@
 #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);
   }
@@ -27,6 +30,7 @@ encode_il_msg(char **buffer, const char *event)
   p += 17;
 
   /* write rest of the message */
+  p = put_string(p, protocol_magic_word);
   p = put_string(p, (char*)event);
 
   return(p - *buffer);
@@ -59,8 +63,21 @@ int
 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);
@@ -88,14 +105,15 @@ decode_il_reply(int *maj, int *min, char **err, const char * buf)
 
 
 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;
   }
@@ -113,7 +131,7 @@ read_il_data(char **buffer,
   }
 
   /* read body */
-  ret = (*reader)(*buffer, len);
+  ret = (*reader)(user_data, *buffer, len);
   if(ret < 0) {
     free(*buffer);
     *buffer = NULL;
index 6748bdb..99c0311 100644 (file)
@@ -28,7 +28,7 @@ public:
        }
 
        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));
        }
@@ -67,10 +67,10 @@ public:
                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);
        }
 
@@ -80,14 +80,14 @@ private:
        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;
 
index 6ed63d4..65e2c01 100644 (file)
@@ -91,19 +91,22 @@ confirm_msg(struct server_msg *msg, int code, int code_min)
 #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;
 
@@ -130,9 +133,14 @@ get_reply(struct event_queue *eq, char **buf, int *code_min)
   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);
 
index 0df3eb4..e047f08 100644 (file)
@@ -36,7 +36,11 @@ GSOAP_FILES_PREFIX:= bk_ws_
 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
@@ -56,7 +60,7 @@ CFLAGS:= \
        -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} \
@@ -78,6 +82,12 @@ GLOBUS_LIBS:= -L${globus_prefix}/lib \
        -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
@@ -118,20 +128,33 @@ BKSERVER_BASE_OBJS:= \
        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}
                
@@ -194,7 +217,7 @@ lb_xml_parse.c: lb_xml_parse.c.T
        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
@@ -206,7 +229,7 @@ ${GSOAP_FILES_PREFIX}H.h ${GSOAP_FILES_PREFIX}C.c ${GSOAP_FILES_PREFIX}Server.c
 
 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
@@ -334,7 +357,7 @@ lb_plugin.lo: lb_plugin.c jp_job_attrs.h
        ${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
 
index ffe0fff..f533759 100644 (file)
 
        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
        
@@ -85,6 +91,7 @@ mysql_prefix=${with.mysql.prefix}
 mysql_version=${ext.mysql.version}
 cppunit=${with.cppunit.prefix}
 gsoap_prefix=${with.gsoap.prefix}
+gsoap_version=${ext.gsoap.version}
                        </echo>
            </target>
        </project>
index d45db39..b2bcbc4 100644 (file)
@@ -52,6 +52,7 @@ int edg_wll_StoreEvent(edg_wll_Context ctx,edg_wll_Event *e,int *seq)
        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;
@@ -63,7 +64,11 @@ int edg_wll_StoreEvent(edg_wll_Context ctx,edg_wll_Event *e,int *seq)
        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);
@@ -80,8 +85,8 @@ int edg_wll_StoreEvent(edg_wll_Context ctx,edg_wll_Event *e,int *seq)
        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 */
@@ -425,7 +430,14 @@ static int check_auth(edg_wll_Context ctx,edg_wll_Event *e)
        ) 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;
        }
 
index 41b7d89..748d851 100644 (file)
 
 #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;
 
@@ -57,8 +57,7 @@ int edg_wll_StoreProto(edg_wll_Context ctx)
        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);
 
@@ -81,8 +80,9 @@ int edg_wll_StoreProto(edg_wll_Context ctx)
 
 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,
@@ -103,8 +103,7 @@ int edg_wll_StoreProtoProxy(edg_wll_Context ctx)
 
 
        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)) ) {
index 6b6f36d..6344922 100755 (executable)
@@ -20,6 +20,9 @@
 
        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>