merge from branch
authorFrantišek Dvořák <valtri@civ.zcu.cz>
Fri, 8 Aug 2008 19:22:52 +0000 (19:22 +0000)
committerFrantišek Dvořák <valtri@civ.zcu.cz>
Fri, 8 Aug 2008 19:22:52 +0000 (19:22 +0000)
org.glite.security.gsoap-plugin/Makefile
org.glite.security.gsoap-plugin/src/glite_gsplugin.c

index cebbc67..b0faef9 100644 (file)
@@ -15,15 +15,16 @@ gsoap_prefix=/opt/gsoap
 
 CC=gcc
 
-gsoap_versions?=2.6.2 2.7.0f 2.7.6b 2.7.9b 2.7.9d 2.7.10
-gsoap_versions:=${shell if ! echo $gsoap_versions | grep "\<${gsoap_default_version}\>" >/dev/null; then echo "${gsoap_default_version} "; else echo ne; fi} ${gsoap_versions}
+gsoap_versions_noflavours?=2.6.2 2.7.0f 2.7.6b 2.7.9d 2.7.9b
+gsoap_versions_flavours?=2.7.10
+gsoap_versions_flavours:=${shell if ! echo $gsoap_versions_flavours | grep "\<${gsoap_default_version}\>" >/dev/null; then echo "${gsoap_default_version} "; else echo ne; fi} ${gsoap_versions_flavours}
 
 -include Makefile.inc
 -include ../Makefile.inc
 
 GSPLUGIN_DEBUG?=no
 GSPLUGIN_VERSION_CHECKING?=yes
-
+CC=gcc
 
 offset=0
 version_info:=-version-info ${shell \
@@ -38,6 +39,10 @@ ext_repository:=${shell if [ -d "${repository}/externals" ]; then \
 
 gsoap_version=${gsoap_default_version}
 gsoap_prefix?=${ext_repository}/${gsoap_name}/${gsoap_version}/${gsoap_platform}
+ifdef lang
+langflavour:=_${lang}
+langsuffix:=.${lang}
+endif
 
 VPATH=${top_srcdir}/src:${top_srcdir}/examples
 
@@ -69,34 +74,43 @@ LDFLAGS:=${COVERAGE_FLAGS}
 
 COMPILE:=libtool --mode=compile ${CC} ${CFLAGS}
 COMPILEXX:=libtool --mode=compile ${CXX} ${CFLAGS}
-LINK:=libtool --mode=link ${CC} -rpath ${stagedir}/lib ${LDFLAGS} 
-LINKXX:=PATH=${top_srcdir}/project/libtoolhack:${PATH} libtool --mode=link ${CXX} -rpath ${stagedir}/lib ${LDFLAGS}
+LINK:=libtool --mode=link ${CC} -rpath ${stagedir}/lib ${LDFLAGS}
+LINKXX:=libtool --mode=link ${CXX} -rpath ${stagedir}/lib ${LDFLAGS}
 INSTALL:=libtool --mode=install install
+LINK_lang:=PATH=${top_srcdir}/project/libtoolhack:${PATH} libtool --mode=link ${CXX} -rpath ${stagedir}/lib ${LDFLAGS}
+ifeq (${lang},c)
+LINK_lang:=${LINK}
+endif
+ifeq (${lang},cxx)
+LINK_lang:=${LINKXX}
+endif
 
 GSOAP_LIBS:= -L${gsoap_prefix}/lib -lgsoap
 
 EX_LIBS:=-L${stagedir}/lib -lglite_security_gss_${nothrflavour}
 EX_THRLIBS:=-L${stagedir}/lib -lglite_security_gss_${thrflavour}
-
 HDRS:=glite_gsplugin.h glite_gscompat.h glite_gsplugin-int.h
+EXAMPLES:=wscalc_clt_ex wscalc_srv_ex wscalc_srv_ex2
+TESTS:=test_gss test_coverage test_cxx
 
-STATICLIB:=libglite_security_gsoap_plugin_${nothrflavour}.a
-THRSTATICLIB:=libglite_security_gsoap_plugin_${thrflavour}.a
-LTLIB:=libglite_security_gsoap_plugin_${nothrflavour}.la
-THRLTLIB:=libglite_security_gsoap_plugin_${thrflavour}.la
+STATICLIB:=libglite_security_gsoap_plugin_${nothrflavour}${langflavour}.a
+THRSTATICLIB:=libglite_security_gsoap_plugin_${thrflavour}${langflavour}.a
+LTLIB:=libglite_security_gsoap_plugin_${nothrflavour}${langflavour}.la
+THRLTLIB:=libglite_security_gsoap_plugin_${thrflavour}${langflavour}.la
 
-OBJS:=glite_gsplugin.o
+OBJS:=${GSS_OBJS} glite_gsplugin${langsuffix}.o
 LOBJS:=${OBJS:.o=.lo}
 THROBJS:=${OBJS:.o=.thr.o}
 THRLOBJS:=${OBJS:.o=.thr.lo}
 
 dotless_ver:=${shell echo ${gsoap_version} | tr -d '.'}
-STATICLIB_S:=libglite_security_gsoap_plugin_${dotless_ver}_${nothrflavour}.a
-THRSTATICLIB_S:=libglite_security_gsoap_plugin_${dotless_ver}_${thrflavour}.a
-LTLIB_S:=libglite_security_gsoap_plugin_${dotless_ver}_${nothrflavour}.la
-THRLTLIB_S:=libglite_security_gsoap_plugin_${dotless_ver}_${thrflavour}.la
+STATICLIB_S:=libglite_security_gsoap_plugin_${dotless_ver}_${nothrflavour}${langflavour}.a
+THRSTATICLIB_S:=libglite_security_gsoap_plugin_${dotless_ver}_${thrflavour}${langflavour}.a
+LTLIB_S:=libglite_security_gsoap_plugin_${dotless_ver}_${nothrflavour}${langflavour}.la
+THRLTLIB_S:=libglite_security_gsoap_plugin_${dotless_ver}_${thrflavour}${langflavour}.la
+LTLIB_TEST_S:=libglite_security_gsoap_plugin_${dotless_ver}_${nothrflavour}_cxx.la
 
-OBJS_S:=glite_gsplugin.o stdsoap2.o
+OBJS_S:=glite_gsplugin${langsuffix}.o stdsoap2${langsuffix}.o
 LOBJS_S:=${OBJS_S:.o=.lo}
 THROBJS_S:=${OBJS_S:.o=.thr.o}
 THRLOBJS_S:=${OBJS_S:.o=.thr.lo}
@@ -110,10 +124,10 @@ ${THRSTATICLIB}: ${THROBJS}
        ranlib $@
 
 ${LTLIB}: ${OBJS} 
-       PATH=${top_builddir}:${PATH} ${LINKXX} ${version_info} -o $@ ${LOBJS} ${EX_LIBS}
+       ${LINK_lang} ${version_info} -o $@ ${LOBJS} ${EX_LIBS}
 
 ${THRLTLIB}: ${THROBJS}
-       PATH=${top_builddir}:${PATH} ${LINKXX} ${version_info} -o $@ ${THRLOBJS} ${EX_THRLIBS}
+       ${LINK_lang} ${version_info} -o $@ ${THRLOBJS} ${EX_THRLIBS}
 
 ${STATICLIB_S}: ${OBJS_S}
        ar crv $@ ${OBJS_S}
@@ -124,30 +138,41 @@ ${THRSTATICLIB_S}: ${THROBJS_S}
        ranlib $@
 
 ${LTLIB_S}: ${OBJS_S} 
-       PATH=${top_builddir}:${PATH} ${LINKXX} ${version_info} -o $@ ${LOBJS_S} ${EX_LIBS}
+       ${LINK_lang} ${version_info} -o $@ ${LOBJS_S} ${EX_LIBS}
 
 ${THRLTLIB_S}: ${THROBJS_S}
-       PATH=${top_builddir}:${PATH} ${LINKXX} ${version_info} -o $@ ${THRLOBJS_S} ${EX_THRLIBS}
+       ${LINK_lang} ${version_info} -o $@ ${THRLOBJS_S} ${EX_THRLIBS}
 
 all compile: \
        ${STATICLIB} ${LTLIB} ${THRSTATICLIB} ${THRLTLIB} \
        all-libs-with-soap examples
 
-check: compile
+check: check.cxx
+
+# C/C++ compatibility test
+# (C flavour, gsoap 2.7.10 ==> C++ test fails)
+check.cxx:
+       ${MAKE} lang=cxx ${LTLIB_TEST_S} test_cxx
+       ./test_cxx
 
 test_coverage:
        -mkdir coverage
        cd coverage && $(MAKE) -f ../Makefile top_srcdir=../../ COVERAGE_FLAGS="-fprofile-arcs -ftest-coverage" check
        cd coverage && for i in ${OBJS}; do gcov -o .libs/ $$i ; done
 
-
-examples: wscalc_clt_ex wscalc_srv_ex wscalc_srv_ex2
+examples: ${EXAMPLES}
 
 all-libs-with-soap:
-       for v in ${gsoap_versions}; do  \
+       for v in ${gsoap_versions_noflavours}; do       \
+               dir=`echo $$v | tr -d .`; \
+               mkdir $$dir; \
+               ( cd $$dir && ${MAKE} -f ../Makefile gsoap_version=$$v top_srcdir=../.. lang= libs-with-soap) ; \
+       done
+       for v in ${gsoap_versions_flavours}; do \
                dir=`echo $$v | tr -d .`; \
                mkdir $$dir; \
-               ( cd $$dir && ${MAKE} -f ../Makefile gsoap_version=$$v top_srcdir=../.. libs-with-soap) ; \
+               ( cd $$dir && ${MAKE} -f ../Makefile gsoap_version=$$v top_srcdir=../.. lang=c libs-with-soap) ; \
+               ( cd $$dir && ${MAKE} -f ../Makefile gsoap_version=$$v top_srcdir=../.. lang=cxx libs-with-soap) ; \
        done
 
 libs-with-soap: ${LTLIB_S} ${THRLTLIB_S} ${STATICLIB_S} ${THRSTATICLIB_S}
@@ -183,26 +208,28 @@ WSCALC_SRV2_OBJS = wscalc_srv_ex2.o ${GSOAP_FPREFIX}C.o ${GSOAP_FPREFIX}Server.o
 wscalc_clt_ex.o wscalc_srv_ex.o wscalc_srv_ex2.o: ${GSOAP_FPREFIX}H.h
 
 wscalc_clt_ex: ${WSCALC_CLT_OBJS} ${LTLIB_S}
-       ${LINK} -o $@ ${WSCALC_CLT_OBJS} ${LTLIB_S}
+       ${LINK_lang} -o $@ ${WSCALC_CLT_OBJS} ${LTLIB_S}
 
 wscalc_srv_ex: ${WSCALC_SRV_OBJS} ${LTLIB_S}
-       ${LINK} -o $@ ${WSCALC_SRV_OBJS} ${LTLIB_S}
+       ${LINK_lang} -o $@ ${WSCALC_SRV_OBJS} ${LTLIB_S}
 
 wscalc_srv_ex2: ${WSCALC_SRV2_OBJS} ${LTLIB_S}
-       ${LINK} -o $@ ${WSCALC_SRV2_OBJS} ${LTLIB_S}
+       ${LINK_lang} -o $@ ${WSCALC_SRV2_OBJS} ${LTLIB_S}
 
+test_cxx: test_gsplugin_cxx.o ${GSOAP_FPREFIX}C.cxx.o
+       ${LINKXX} -o $@ $+ ${LTLIB_TEST_S}
 
 soapcpp:=${shell if [ -x ${gsoap_prefix}/bin/soapcpp2 ]; then \
        echo ${gsoap_prefix}/bin/soapcpp2; \
        else echo ${gsoap_prefix}/soapcpp2; \
        fi}
 
-${GSOAP_FPREFIX}H.h ${GSOAP_FPREFIX}C.c ${GSOAP_FPREFIX}Server.c ${GSOAP_FPREFIX}Client.c ${GSOAP_FPREFIX}ServerLib.c ${GSOAP_FPREFIX}ClientLib.c:  calc.h.S
+${GSOAP_FPREFIX}H.h ${GSOAP_FPREFIX}C.c ${GSOAP_FPREFIX}Server.c ${GSOAP_FPREFIX}Client.c ${GSOAP_FPREFIX}ServerLib.c ${GSOAP_FPREFIX}ClientLib.c: calc.h.S
        ${soapcpp} -c -p ${GSOAP_FPREFIX} ${top_srcdir}/examples/calc.h.S
 
 wscalc_clt_ex.o: wscalc_clt_ex.c
        ${CC} -c ${CFLAGS} -o $@ $<
-       
+
 doc:
 
 stage:
@@ -212,10 +239,15 @@ install:
        -mkdir -p ${PREFIX}/lib
        -mkdir -p ${PREFIX}/include/glite/security
        -mkdir -p ${PREFIX}/share/doc/${package}-${version}
+       -mkdir -p ${PREFIX}/include/glite/security/
        ${INSTALL} -m 644 ${top_srcdir}/LICENSE ${PREFIX}/share/doc/${package}-${version}
        cd ${top_srcdir}/interface && ${INSTALL} -m 644 ${HDRS} ${PREFIX}/include/glite/security/
-       for v in ${gsoap_versions}; do \
-               (cd `echo $$v | tr -d .` && ${MAKE} -f ../Makefile install-soaplib gsoap_version=$$v PREFIX=${PREFIX} top_srcdir=${top_srcdir}/..); \
+       for v in ${gsoap_versions_noflavours}; do \
+               (cd `echo $$v | tr -d .` && ${MAKE} -f ../Makefile install-soaplib gsoap_version=$$v lang= PREFIX=${PREFIX} top_srcdir=${top_srcdir}/..); \
+       done
+       for v in ${gsoap_versions_flavours}; do \
+               (cd `echo $$v | tr -d .` && ${MAKE} -f ../Makefile install-soaplib gsoap_version=$$v lang=c PREFIX=${PREFIX} top_srcdir=${top_srcdir}/..); \
+               (cd `echo $$v | tr -d .` && ${MAKE} -f ../Makefile install-soaplib gsoap_version=$$v lang=cxx PREFIX=${PREFIX} top_srcdir=${top_srcdir}/..); \
        done
 
 install-soaplib:
@@ -224,23 +256,35 @@ install-soaplib:
 clean:
        rm -rvf ${STATICLIB} ${LTLIB} ${THRSTATICLIB} ${THRLTLIB}
        rm -rvf ${LTLIB_S} ${THRLTLIB_S} ${STATICLIB_S} ${THRSTATICLIB_S}
-       rm -rvf *.o *.lo .libs lib* *.c *.h *.xml *.nsmap *.wsdl glite_gsplugin* wscalc* GSOAP_*
-       for v in ${gsoap_versions}; do  \
-               dir=`echo $$v | tr -d .`; \
-               rm -rvf $$dir; \
-       done
+       rm -rvf *.c *.h *.xml *.nsmap *.o *.lo .libs ${EXAMPLES} ${TESTS}
+       rm -rvf CalcService.wsdl wscalc.xsd
        rm -rvf log.xml project/ rpmbuild/ RPMS/ tgz/
+       for v in ${gsoap_versions_noflavours} ${gsoap_versions_flavours}; do \
+               rm -rvf `echo $$v | tr -d .`; \
+       done
+
+%.c.o: %.c
+       ${COMPILE} -o $@ -c $<
+
+%.cxx.o: %.c
+       ${COMPILEXX} -o $@ -c $<
 
 %.o: %.c
        ${COMPILE} -o $@ -c $<
 
-stdsoap2.o: stdsoap2.c
-       ${COMPILE} ${GLOBUS_INC} -o $@ -c $<
+%.c.thr.o: %.c
+       ${COMPILE} -o $@ -c $<
+
+%.cxx.thr.o: %.c
+       ${COMPILEXX} -o $@ -c $<
 
 %.thr.o: %.c
        ${COMPILE} -o $@ -c $<
 
-glite_gsplugin.o glite_gsplugin.thr.o: soap_version.h
+test_gsplugin_cxx.o: %.o: %.cpp stdsoap2.h
+       ${COMPILEXX} -c ${GLOBUS_INC} $<
+
+glite_gsplugin${langsuffix}.o glite_gsplugin${langsuffix}.thr.o: soap_version.h
 
 soap_version.h: stdsoap2.h
        head stdsoap2.h | \
index 5b7da65..463e529 100644 (file)
@@ -120,7 +120,7 @@ glite_gsplugin_set_credential(glite_gsplugin_Context ctx,
    edg_wll_GssStatus gss_code;
    int ret;
 
-   ret = edg_wll_gss_acquire_cred_gsi(cert, key, &ctx->cred, &gss_code);
+   ret = edg_wll_gss_acquire_cred_gsi((char *)cert, (char *)key, &ctx->cred, &gss_code);
    if (ret) {
       /* XXX propagate error description */
       return EINVAL;
@@ -157,7 +157,7 @@ glite_gsplugin_set_connection(glite_gsplugin_Context ctx, edg_wll_GssConnection
                free(ctx->connection);
        }
        if (conn) {
-               ctx->connection = malloc(sizeof(edg_wll_GssConnection));
+               ctx->connection = (edg_wll_GssConnection *)malloc(sizeof(edg_wll_GssConnection));
                memcpy(ctx->connection, conn, sizeof(edg_wll_GssConnection));
        } else ctx->connection = NULL;
        ctx->internal_connection = 0;
@@ -168,13 +168,13 @@ glite_gsplugin_set_connection(glite_gsplugin_Context ctx, edg_wll_GssConnection
 int
 glite_gsplugin(struct soap *soap, struct soap_plugin *p, void *arg)
 {
-       int_plugin_data_t *pdata = malloc(sizeof(int_plugin_data_t)); 
+       int_plugin_data_t *pdata = (int_plugin_data_t *)malloc(sizeof(int_plugin_data_t)); 
 
        pdprintf(("GSLITE_GSPLUGIN: initializing gSOAP plugin\n"));
        if ( !pdata ) return ENOMEM;
        if ( arg ) {
                pdprintf(("GSLITE_GSPLUGIN: Context is given\n"));
-               pdata->ctx = arg;
+               pdata->ctx = (glite_gsplugin_Context)arg;
                pdata->def = 0;
        }
        else {
@@ -280,7 +280,7 @@ glite_gsplugin_connect(
        if (ctx->connection) {
                pdprintf(("GSLITE_GSPLUGIN: Warning: connection dropped, new to %s:%d\n", host, port));
        }
-       printf("gsoap-plugin: connection to %s:%d will be established\n", host, port);
+       pdprintf(("GSLITE_GSPLUGIN: connection to %s:%d will be established\n", host, port));
 
        if ( ctx->cred == NULL ) {
                pdprintf(("GSLITE_GSPLUGIN: loading default credentials\n"));
@@ -294,7 +294,7 @@ glite_gsplugin_connect(
                ctx->internal_credentials = 1;
        }
 
-       if ( !(ctx->connection = malloc(sizeof(*ctx->connection))) ) return errno;
+       if ( !(ctx->connection = (edg_wll_GssConnection  *)malloc(sizeof(*ctx->connection))) ) return errno;
        ret = edg_wll_gss_connect(ctx->cred,
                                host, port,
                                ctx->timeout,
@@ -318,6 +318,9 @@ err:
                soap_set_sender_error(soap, "SSL error", "SSL authentication failed in tcp_connect(): check password, key file, and ca file.", SOAP_SSL_ERROR);
                break;
        case EDG_WLL_GSS_ERROR_HERRNO:
+               ret = h_errno;
+               soap_set_sender_error(soap, "connection error", hstrerror(ret), SOAP_CLI_FAULT);
+               break;
        case EDG_WLL_GSS_ERROR_ERRNO:
                ret = errno;
                soap_set_sender_error(soap, "connection error", strerror(ret), SOAP_CLI_FAULT);
@@ -362,16 +365,20 @@ glite_gsplugin_accept(struct soap *soap, int s, struct sockaddr *a, int *n)
        soap->errnum = 0;
        pdprintf(("GSLITE_GSPLUGIN: glite_gsplugin_accept()\n"));
        ctx = ((int_plugin_data_t *)soap_lookup_plugin(soap, plugin_id))->ctx;
-       if ( (conn = accept(s, (struct sockaddr *)&a, n)) < 0 ) return conn;
+       if ( (conn = accept(s, (struct sockaddr *)&a, (socklen_t *)n)) < 0 ) return conn;
        if ( !ctx->connection ) {
-               if ( !(ctx->connection = malloc(sizeof(*ctx->connection))) ) return -1;
+               if ( !(ctx->connection = (edg_wll_GssConnection *)malloc(sizeof(*ctx->connection))) ) {
+                       soap_set_receiver_error(soap, "malloc error", strerror(ENOMEM), ENOMEM);
+                       return SOAP_INVALID_SOCKET;
+               }
                ctx->internal_connection = 1;
        }
        if ( edg_wll_gss_accept(ctx->cred, conn, ctx->timeout, ctx->connection, &gss_code)) {
                pdprintf(("GSLITE_GSPLUGIN: Client authentication failed, closing.\n"));
                edg_wll_gss_get_error(&gss_code, "Client authentication failed", &ctx->error_msg);
                soap->errnum = SOAP_SVR_FAULT;
-               return -1;
+               soap_set_receiver_error(soap, "SSL error", "SSL authentication failed in tcp_connect(): check password, key file, and ca file.", SOAP_SSL_ERROR);
+               return SOAP_INVALID_SOCKET;
        }
 
        return conn;