|
From: Narasimha S. <nsh...@us...> - 2012-06-13 21:21:11
|
Update of /cvsroot/sblim/sfcb
In directory vz-cvs-3.sog:/tmp/cvs-serv22469
Modified Files:
ChangeLog cimslpCMPI.c cimXmlGen.c cimXmlGen.h cimXmlRequest.c
control.c Makefile.am NEWS providerMgr.h sfcb.cfg.pre.in
sfcBroker.c support.c
Added Files:
sfcCustomLib.c
Log Message:
[ 3534977 ] sfcb custom library and hostname
Signed-off-by: Narasimha Sharoff <nsh...@us...>
Index: cimslpCMPI.c
===================================================================
RCS file: /cvsroot/sblim/sfcb/cimslpCMPI.c,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -d -r1.18 -r1.19
--- cimslpCMPI.c 29 Jun 2010 22:54:33 -0000 1.18
+++ cimslpCMPI.c 13 Jun 2012 21:21:09 -0000 1.19
@@ -38,6 +38,8 @@
extern char *configfile;
CMPIContext *prepareUpcall(const CMPIContext *ctx);
+extern int getCustomSlpHostname(char **hn)
+
// helper function ... until better solution is found to get to the
// interop Namespace
char **
@@ -267,28 +269,6 @@
// to the calling function
char *sn;
-#ifdef SLP_HOSTNAME_LIB
- static void *hostnameLib = NULL;
- static getSlpHostname gethostname;
- char *ln;
- char dlName[512];
- int err;
-
- err = 1;
- if (getControlChars("slpHostnamelib", &ln) == 0) {
- libraryName(NULL, ln, dlName, 512);
- if ((hostnameLib = dlopen(dlName, RTLD_LAZY))) {
- gethostname = dlsym(hostnameLib, "_sfcGetSlpHostname");
- if (gethostname)
- err = 0;
- }
- }
- if (err)
- mlogf(M_ERROR, M_SHOW,
- "--- SLP Hostname exit %s not found. Defaulting to system hostname.\n",
- dlName);
-#endif
-
_SFCB_ENTER(TRACE_SLP, "getSLPData");
memset(&rs, 0, sizeof(cimSLPService));
@@ -308,18 +288,9 @@
sn = myGetProperty(ci[0], "SystemName");
#ifdef SLP_HOSTNAME_LIB
- if (!err) {
- char *tmp;
- if ((err = gethostname(&tmp))) {
- free(sn);
- sn = tmp;
- } else {
- printf
- ("-#- SLP call to %s for hostname failed. Defaulting to system hostname.\n",
- dlName);
- }
- }
+ getCustomSlpHostname(char **sn);
#endif
+
rs.url_syntax = getUrlSyntax(sn, cfg.commScheme, cfg.port);
rs.service_hi_name = myGetProperty(ci[0], "ElementName");
rs.service_hi_description = myGetProperty(ci[0], "Description");
Index: cimXmlGen.h
===================================================================
RCS file: /cvsroot/sblim/sfcb/cimXmlGen.h,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -d -r1.10 -r1.11
--- cimXmlGen.h 30 Nov 2011 23:22:48 -0000 1.10
+++ cimXmlGen.h 13 Jun 2012 21:21:09 -0000 1.11
@@ -45,7 +45,7 @@
extern int instance2xml(CMPIInstance * ci, UtilStringBuffer * sb, unsigned int flags);
extern int args2xml(CMPIArgs * args, UtilStringBuffer * sb);
extern int enum2xml(CMPIEnumeration * enm, UtilStringBuffer * sb, CMPIType type,
- int xmlAs, unsigned int flags);
+ int xmlAs, unsigned int flags, char *httpHost);
extern int qualiEnum2xml(CMPIEnumeration * enm, UtilStringBuffer * sb);
extern CMPIValue union2CMPIValue(CMPIType type, char *val, XtokValueArray *arr);
extern int qualifierDeclaration2xml(CMPIQualifierDecl * q, UtilStringBuffer * sb);
Index: providerMgr.h
===================================================================
RCS file: /cvsroot/sblim/sfcb/providerMgr.h,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -d -r1.17 -r1.18
--- providerMgr.h 12 Mar 2012 22:30:52 -0000 1.17
+++ providerMgr.h 13 Jun 2012 21:21:09 -0000 1.18
@@ -134,6 +134,7 @@
CMPIType type;
ProvAddr provA;
ProvAddr* pAs;
+ char *httpHost;
unsigned long pCount,pDone;
unsigned long rCount;
int rc;
Index: cimXmlRequest.c
===================================================================
RCS file: /cvsroot/sblim/sfcb/cimXmlRequest.c,v
retrieving revision 1.72
retrieving revision 1.73
diff -u -d -r1.72 -r1.73
--- cimXmlRequest.c 13 Apr 2012 18:05:40 -0000 1.72
+++ cimXmlRequest.c 13 Jun 2012 21:21:09 -0000 1.73
@@ -530,10 +530,10 @@
sb = UtilFactory->newStrinBuffer(1024);
if (binCtx->oHdr->type==OPS_EnumerateClassNames)
- enum2xml(enm, sb, binCtx->type, XML_asClassName, binCtx->bHdr->flags);
+ enum2xml(enm, sb, binCtx->type, XML_asClassName, binCtx->bHdr->flags, binCtx->httpHost);
else if (binCtx->oHdr->type==OPS_EnumerateClasses)
- enum2xml(enm, sb, binCtx->type, XML_asClass, binCtx->bHdr->flags);
- else enum2xml(enm, sb, binCtx->type, binCtx->xmlAs,binCtx->bHdr->flags);
+ enum2xml(enm, sb, binCtx->type, XML_asClass, binCtx->bHdr->flags, binCtx->httpHost);
+ else enum2xml(enm, sb, binCtx->type, binCtx->xmlAs,binCtx->bHdr->flags, binCtx->httpHost);
_SFCB_RETURN(sb);
}
@@ -621,7 +621,7 @@
UtilStringBuffer *sb;
RespSegments rs;
- _SFCB_ENTER(TRACE_CIMXMLPROC, "genResponses");
+ _SFCB_ENTER(TRACE_CIMXMLPROC, "genFirstChunkResponses");
sb=genEnumResponses(binCtx,resp,arrlen);
@@ -654,7 +654,7 @@
UtilStringBuffer *sb;
RespSegments rs;
- _SFCB_ENTER(TRACE_CIMXMLPROC, "genResponses");
+ _SFCB_ENTER(TRACE_CIMXMLPROC, "genLastChunkResponses");
sb=genEnumResponses(binCtx,resp,arrlen);
@@ -997,6 +997,7 @@
binCtx.xmlAs=binCtx.noResp=0;
binCtx.chunkedMode=0;
binCtx.pAs=NULL;
+ binCtx.httpHost=ctx->host;
_SFCB_TRACE(1, ("--- Getting Provider context"));
irc = getProviderContext(&binCtx, (OperationHdr *) req);
@@ -1051,6 +1052,7 @@
binCtx.type=CMPI_class;
binCtx.xmlAs=binCtx.noResp=0;
binCtx.chunkFncs=ctx->chunkFncs;
+ binCtx.httpHost=ctx->host;
if (ctx->teTrailers==0)
hdr->chunkedMode=binCtx.chunkedMode=0;
@@ -1440,6 +1442,7 @@
binCtx.xmlAs=binCtx.noResp=0;
binCtx.chunkedMode=0;
binCtx.pAs=NULL;
+ binCtx.httpHost=ctx->host;
_SFCB_TRACE(1, ("--- Getting Provider context"));
irc = getProviderContext(&binCtx, (OperationHdr *) req);
@@ -1504,6 +1507,7 @@
binCtx.type=CMPI_instance;
binCtx.xmlAs=binCtx.noResp=0;
binCtx.chunkFncs=ctx->chunkFncs;
+ binCtx.httpHost=ctx->host;
if (ctx->teTrailers==0) {
hdr->chunkedMode=binCtx.chunkedMode=0;
@@ -1596,6 +1600,7 @@
binCtx.type=CMPI_instance;
binCtx.xmlAs=XML_asObj; binCtx.noResp=0;
binCtx.chunkFncs=ctx->chunkFncs;
+ binCtx.httpHost=ctx->host;
if (ctx->teTrailers==0)
hdr->chunkedMode=binCtx.chunkedMode=0;
@@ -1697,6 +1702,7 @@
binCtx.xmlAs=XML_asObjectPath; binCtx.noResp=0;
binCtx.chunkedMode=0;
binCtx.pAs=NULL;
+ binCtx.httpHost=ctx->host;
_SFCB_TRACE(1, ("--- Getting Provider context"));
irc = getProviderContext(&binCtx, (OperationHdr *) req);
@@ -1789,6 +1795,7 @@
binCtx.type=CMPI_instance;
binCtx.xmlAs=XML_asObj; binCtx.noResp=0;
binCtx.pAs=NULL;
+ binCtx.httpHost = ctx->host;
binCtx.chunkFncs=ctx->chunkFncs;
if (ctx->teTrailers==0)
@@ -1889,6 +1896,7 @@
binCtx.xmlAs=XML_asObjectPath; binCtx.noResp=0;
binCtx.chunkedMode=0;
binCtx.pAs=NULL;
+ binCtx.httpHost=ctx->host;
_SFCB_TRACE(1, ("--- Getting Provider context"));
irc = getProviderContext(&binCtx, (OperationHdr *) req);
@@ -1980,6 +1988,7 @@
binCtx.type=CMPI_instance;
binCtx.xmlAs=XML_asObj; binCtx.noResp=0;
binCtx.pAs=NULL;
+ binCtx.httpHost=ctx->host;
binCtx.chunkFncs=ctx->chunkFncs;
if (ctx->teTrailers==0)
Index: ChangeLog
===================================================================
RCS file: /cvsroot/sblim/sfcb/ChangeLog,v
retrieving revision 1.778
retrieving revision 1.779
diff -u -d -r1.778 -r1.779
--- ChangeLog 12 Jun 2012 21:48:36 -0000 1.778
+++ ChangeLog 13 Jun 2012 21:21:08 -0000 1.779
@@ -1,3 +1,10 @@
+2012-06-13 Narasimha Sharoff <nsh...@us...>
+
+ * cimslpCMPI.c, cimXmlGen.c, cimXmlGen.h, cimXmlRequest.c,
+ control.c, Makefile.am, providerMgr.h, sfcb.cfg.pre.in,
+ sfcBroker.c, sfcCustomLib.c, support.c:
+ [ 3534977 ] sfcb custom library and hostname
+
2012-06-12 Chris Buccella <buc...@li...>
* msgqueue.h:
Index: cimXmlGen.c
===================================================================
RCS file: /cvsroot/sblim/sfcb/cimXmlGen.c,v
retrieving revision 1.77
retrieving revision 1.78
diff -u -d -r1.77 -r1.78
--- cimXmlGen.c 27 Dec 2011 20:43:57 -0000 1.77
+++ cimXmlGen.c 13 Jun 2012 21:21:09 -0000 1.78
@@ -56,6 +56,7 @@
CMPICount i, char ** name,
CMPIStatus * rc, int readonly);
extern int invalid_uint(const char *v, const CMPIType type);
+extern int getCustomHostname(char *httpHost, char **hn, unsigned int len);
const char *opGetClassNameChars(CMPIObjectPath * cop);
@@ -575,7 +576,8 @@
_SFCB_RETURN(0);
}
-static int nsPath2xml(CMPIObjectPath * ci, UtilStringBuffer * sb)
+
+static int nsPath2xml(CMPIObjectPath * ci, UtilStringBuffer * sb, char *httpHost)
{
_SFCB_ENTER(TRACE_CIMXMLPROC, "nsPath2xml");
char * hn = CMGetCharPtr(CMGetHostname(ci,NULL));
@@ -585,12 +587,9 @@
if (hn && *hn) {
sb->ft->appendChars(sb, hn);
} else {
- hn = malloc(HOST_NAME_MAX);
- if(gethostname(hn, HOST_NAME_MAX) == 0) {
- sb->ft->appendChars(sb, hn);
- } else {
- SFCB_APPENDCHARS_BLOCK(sb, "localhost");
- }
+ hn = calloc(1, HOST_NAME_MAX);
+ getCustomHostname(httpHost, &hn, HOST_NAME_MAX);
+ sb->ft->appendChars(sb, hn);
free (hn);
}
SFCB_APPENDCHARS_BLOCK(sb, "</HOST>\n");
@@ -622,7 +621,7 @@
char * hn = CMGetCharPtr(CMGetHostname(ci,NULL));
if (hn && *hn && ns && *ns) {
SFCB_APPENDCHARS_BLOCK(sb, "<INSTANCEPATH>\n");
- nsPath2xml(ci, sb);
+ nsPath2xml(ci, sb, NULL);
} else if (ns && *ns) {
SFCB_APPENDCHARS_BLOCK(sb, "<LOCALINSTANCEPATH>\n");
lnsPath2xml(ci, sb);
@@ -1047,7 +1046,7 @@
}
int enum2xml(CMPIEnumeration * enm, UtilStringBuffer * sb, CMPIType type,
- int xmlAs, unsigned int flags)
+ int xmlAs, unsigned int flags, char *httpHost)
{
CMPIObjectPath *cop;
CMPIInstance *ci;
@@ -1062,7 +1061,7 @@
else if (xmlAs==XML_asObjectPath) {
SFCB_APPENDCHARS_BLOCK(sb, "<OBJECTPATH>\n");
SFCB_APPENDCHARS_BLOCK(sb, "<INSTANCEPATH>\n");
- nsPath2xml(cop, sb);
+ nsPath2xml(cop, sb, httpHost);
instanceName2xml(cop, sb);
SFCB_APPENDCHARS_BLOCK(sb, "</INSTANCEPATH>\n");
SFCB_APPENDCHARS_BLOCK(sb, "</OBJECTPATH>\n");
@@ -1079,7 +1078,7 @@
if (xmlAs==XML_asObj) {
SFCB_APPENDCHARS_BLOCK(sb, "<VALUE.OBJECTWITHPATH>\n");
SFCB_APPENDCHARS_BLOCK(sb, "<INSTANCEPATH>\n");
- nsPath2xml(cop, sb);
+ nsPath2xml(cop, sb, httpHost);
}
else
SFCB_APPENDCHARS_BLOCK(sb, "<VALUE.NAMEDINSTANCE>\n");
Index: sfcBroker.c
===================================================================
RCS file: /cvsroot/sblim/sfcb/sfcBroker.c,v
retrieving revision 1.63
retrieving revision 1.64
diff -u -d -r1.63 -r1.64
--- sfcBroker.c 11 Apr 2012 22:55:17 -0000 1.63
+++ sfcBroker.c 13 Jun 2012 21:21:09 -0000 1.64
@@ -76,6 +76,9 @@
extern void sunsetControl();
extern void uninitGarbageCollector();
+extern int loadHostnameLib();
+extern void unloadHostnameLib();
+
extern TraceId traceIds[];
extern unsigned long exFlags;
@@ -244,6 +247,8 @@
pthread_mutex_unlock(&syncMtx);
_SFCB_TRACE_STOP();
+
+ unloadHostnameLib();
if (restartBroker) {
char *emsg=strerror(errno);
@@ -813,6 +818,12 @@
if ((enableHttp || enableHttps) && dSockets > 0) {
startHttp = 1;
}
+
+ if (loadHostnameLib() == -1) {
+ printf("--- Failed to load sfcCustomLib. Exiting\n");
+ exit(1);
+ }
+
initSem(dSockets,sSockets,pSockets);
initProvProcCtl(pSockets);
--- NEW FILE: sfcCustomLib.c ---
/*
* sfcCustomLib.c
*
* (C) Copyright IBM Corp. 2012
*
* THIS FILE IS PROVIDED UNDER THE TERMS OF THE ECLIPSE PUBLIC LICENSE
* ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THIS FILE
* CONSTITUTES RECIPIENTS ACCEPTANCE OF THE AGREEMENT.
*
* You can obtain a current copy of the Eclipse Public License from
* http://www.opensource.org/licenses/eclipse-1.0.php
*
* Author: Narasimha Sharoff <nsh...@us...>
*
* Description:
*
* These routines are used by sfcb. User can customize the functionality.
* Do not remove any function or the function prototype
*
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
/*
* _sfcGetSlpHostname: by Tyrel Datwyler <ty...@us...>
* is from sfcSlpCustomHostname.c - this file will be deprecated
*/
/** \brief _sfcGetSlpHostname - obtains custom hostname to register with SLP DA
*
* Obtain custom hostname string to register with SLP DA
* This is only a sample of how to write the custom routine
* used to provide the hostname. You will need to replace this
* with a routine that uses the desired method to obtain the
* proper value.
*/
extern int _sfcGetSlpHostname(char **hostname)
{
char *sn;
sn = (char *) malloc((strlen("mycimom.com") + 1) * sizeof(char));
sn = strncpy(sn, "mycimom.com", strlen("mycimom.com") + 1);
if (sn == NULL)
return 0;
printf("-#- Request for custom SLP service hostname: (hostname = %s)\n", sn);
*hostname = sn;
/* Return value of 1 for successs and 0 for failure. */
return 1;
}
/** \brief _sfcbGetResponseHostname - obtains custom hostname
*
* Allows the user to customize the hostname that sfcb will use internally
* httphost - hostname as provided in HTTP header
* hostname - sfcb allocated buffer
* len - size of the hostname buffer
*/
extern int _sfcbGetResponseHostname(char *httpHost, char **hostname, unsigned int len)
{
if (gethostname(*hostname, len) != 0) {
strcpy(*hostname, "localhost");
}
return 0;
}
Index: support.c
===================================================================
RCS file: /cvsroot/sblim/sfcb/support.c,v
retrieving revision 1.39
retrieving revision 1.40
diff -u -d -r1.39 -r1.40
--- support.c 5 Mar 2012 18:14:26 -0000 1.39
+++ support.c 13 Jun 2012 21:21:09 -0000 1.40
@@ -37,6 +37,7 @@
#include "native.h"
#include "trace.h"
#include "config.h"
+#include "control.h"
#include <pthread.h>
#ifdef SFCB_IX86
@@ -1019,3 +1020,68 @@
return str;
}
+/* If config hostnameLib=true, get custom hostname */
+extern void libraryName(const char *dir, const char *location,
+ const char *fullName, int buf_size);
+typedef int (*getSfcbHostname)(char *httpHost, char **hostname,
+ unsigned int len);
+typedef int (*getSfcbSlpHostname)(char **hostname);
+static void *hostnameLib;
+static getSfcbHostname sfcbHostname;
+static getSfcbSlpHostname sfcbSlpHostname;
+int loadHostnameLib()
+{
+ char *ln;
+ char dlName[512];
+ char *err;
+
+ hostnameLib = NULL;
+ if (getControlChars("sfcbCustomLib", &ln) == 0) {
+ libraryName(NULL, ln, dlName, 512);
+ if ((hostnameLib = dlopen(dlName, RTLD_LAZY))) {
+ dlerror();
+ sfcbHostname = dlsym(hostnameLib, "_sfcbGetResponseHostname");
+ if ((err = dlerror()) != NULL) {
+ printf("dlsym failed for _sfcbGetResponseHostname: %s\n", err);
+ dlclose(hostnameLib);
+ return -1;
+ }
+ dlerror();
+ sfcbSlpHostname = dlsym(hostnameLib, "_sfcGetSlpHostname");
+ if ((err = dlerror()) != NULL) {
+ printf("dlsym failed for _sfcbGetSlpHostname: %s\n", err);
+ dlclose(hostnameLib);
+ return -1;
+ }
+ }
+ else {
+ printf("dlopen failed for sfcbCustomLib\n");
+ return -1;
+ }
+ }
+ else {
+ printf("Cannot find the libary to open: %s\n", ln);
+ return -1;
+ }
+
+ return 0;
+}
+
+int getCustomHostname(char *httpHost, char **hn, unsigned int len)
+{
+ if (sfcbHostname) return(sfcbHostname(httpHost, hn, len));
+ return -1;
+}
+
+int getCustomSlpHostname(char **hn)
+{
+ if (sfcbSlpHostname) return(sfcbSlpHostname(hn));
+ return -1;
+}
+
+
+void unloadHostnameLib()
+{
+ if (hostnameLib) dlclose(hostnameLib);
+ return;
+}
Index: sfcb.cfg.pre.in
===================================================================
RCS file: /cvsroot/sblim/sfcb/sfcb.cfg.pre.in,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -d -r1.35 -r1.36
--- sfcb.cfg.pre.in 7 Jun 2012 02:56:09 -0000 1.35
+++ sfcb.cfg.pre.in 13 Jun 2012 21:21:09 -0000 1.36
@@ -52,6 +52,10 @@
## Default is 100000000
#httpMaxContentLength: 100000000
+## Customization library - user can modify the logic of one or more routine(s)
+## But, do not remove any functions or change the function signature.
+sfcbCustomLib: sfcCustomLib
+
## Enable basic authentication for HTTP and HTTPS connections
## Default is false
doBasicAuth: @SFCB_CONF_DOBASICAUTH@
@@ -233,13 +237,6 @@
## Default is 600
#slpRefreshInterval: 600
-## Name of the library that will return the hostname to use in the SLP
-## useful if current system hostname is not valid for advertisment.
-## You probably don't need this. See example, sfcSlpHostname.c.
-## Only applies if configured with --enable-slp-hostname-lib.
-## Default is sfcSlpHostname
-#slpHostnameLib: sfcSlpHostname
-
##------------------------------------ Trace ----------------------------------
Index: NEWS
===================================================================
RCS file: /cvsroot/sblim/sfcb/NEWS,v
retrieving revision 1.696
retrieving revision 1.697
diff -u -d -r1.696 -r1.697
--- NEWS 12 Jun 2012 21:48:36 -0000 1.696
+++ NEWS 13 Jun 2012 21:21:09 -0000 1.697
@@ -10,6 +10,7 @@
- 3527920 RI and http responsecodes
- 3531210 Allow indication delivery timeout tuning
- 3534659 Match SfcbLocal to sfcc update
+- 3334977 sfcb custom library and hostname
Bugs fixed:
Index: control.c
===================================================================
RCS file: /cvsroot/sblim/sfcb/control.c,v
retrieving revision 1.47
retrieving revision 1.48
diff -u -d -r1.47 -r1.48
--- control.c 7 Jun 2012 02:56:09 -0000 1.47
+++ control.c 13 Jun 2012 21:21:09 -0000 1.48
@@ -82,9 +82,9 @@
#ifdef HAVE_SLP
{"enableSlp", 2, "true"},
{"slpRefreshInterval", 1, "600"},
- {"slpHostnameLib", 0, "sfcSlpHostname"},
#endif
{"provProcs", 1, "32"},
+ {"sfcbCustomLib", 0, "sfcCustomLib"},
{"basicAuthLib", 0, "sfcBasicAuthentication"},
{"basicAuthEntry", 0, "_sfcBasicAuthenticate"},
{"doBasicAuth", 2, "false"},
Index: Makefile.am
===================================================================
RCS file: /cvsroot/sblim/sfcb/Makefile.am,v
retrieving revision 1.117
retrieving revision 1.118
diff -u -d -r1.117 -r1.118
--- Makefile.am 29 Feb 2012 23:12:44 -0000 1.117
+++ Makefile.am 13 Jun 2012 21:21:09 -0000 1.118
@@ -93,11 +93,7 @@
HTTP_ADAPTER_LIBS_LINK = -lsfcHttpAdapter
endif
-if SLP_HOSTNAME_LIB
-SLP_HOSTNAME_LIBS = libsfcSlpHostname.la
-else
-SLP_HOSTNAME_LIBS =
-endif
+SFC_CUSTOM_LIB = libsfcCustomLib.la
if QUALREP
QUALREP_LIBS = libsfcQualifierProvider.la
@@ -163,7 +159,7 @@
$(QUALREP_LIBS) \
$(INDICATION_LIBS) \
$(PAM_LIBS) \
- $(SLP_HOSTNAME_LIBS) \
+ $(SFC_CUSTOM_LIB) \
$(ACCOUNT_PASSTHRU_LIBS)
if TEST_ENABLED
@@ -278,10 +274,8 @@
libsfcHttpAdapter_la_DEPENDENCIES=libsfcBrokerCore.la $(CIMXMLCODEC_LIBS)
endif
-if SLP_HOSTNAME_LIB
-libsfcSlpHostname_la_SOURCES = \
- sfcSlpHostname.c
-endif
+libsfcCustomLib_la_SOURCES = \
+ sfcCustomLib.c
libsfcBasicAuthentication_la_SOURCES = \
sfcBasicAuthentication.c
|