Update to sblim-sfcb-1.4.5
This commit is contained in:
parent
dabdd6746d
commit
2db677ed02
1
.gitignore
vendored
1
.gitignore
vendored
@ -10,3 +10,4 @@ sblim-sfcb-1.3.8.tar.bz2
|
|||||||
/sblim-sfcb-1.3.14.tar.bz2
|
/sblim-sfcb-1.3.14.tar.bz2
|
||||||
/sblim-sfcb-1.3.15.tar.bz2
|
/sblim-sfcb-1.3.15.tar.bz2
|
||||||
/sblim-sfcb-1.3.16.tar.bz2
|
/sblim-sfcb-1.3.16.tar.bz2
|
||||||
|
/sblim-sfcb-1.4.5.tar.bz2
|
||||||
|
@ -1,12 +0,0 @@
|
|||||||
diff -up sblim-sfcb-1.3.10/cmpimacs.h.orig sblim-sfcb-1.3.10/cmpimacs.h
|
|
||||||
--- sblim-sfcb-1.3.10/cmpimacs.h.orig 2010-12-06 14:24:21.599940670 +0100
|
|
||||||
+++ sblim-sfcb-1.3.10/cmpimacs.h 2010-12-06 14:32:05.792322703 +0100
|
|
||||||
@@ -1263,7 +1263,7 @@ inline static CMPICount CMGetArgCount (c
|
|
||||||
|
|
||||||
// CMPIString Macros
|
|
||||||
|
|
||||||
-# define CMGetCharPtr(s) ((char*)s->hdl)
|
|
||||||
+# define CMGetCharPtr(s) ((s) ? (char*)(s)->hdl : NULL)
|
|
||||||
|
|
||||||
# ifdef CMPI_INLINE
|
|
||||||
/** Get a pointer to a C char* representation of this String.
|
|
@ -1,26 +0,0 @@
|
|||||||
diff -up sblim-sfcb-1.3.14/cimXmlRequest.c.orig sblim-sfcb-1.3.14/cimXmlRequest.c
|
|
||||||
--- sblim-sfcb-1.3.14/cimXmlRequest.c.orig 2012-06-07 13:09:59.006978825 +0200
|
|
||||||
+++ sblim-sfcb-1.3.14/cimXmlRequest.c 2012-06-07 13:10:26.652133786 +0200
|
|
||||||
@@ -20,7 +20,8 @@
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
-
|
|
||||||
+#include <sys/time.h>
|
|
||||||
+#include <sys/resource.h>
|
|
||||||
|
|
||||||
#include "cmpidt.h"
|
|
||||||
#include "cmpidtx.h"
|
|
||||||
diff -up sblim-sfcb-1.3.14/providerMgr.c.orig sblim-sfcb-1.3.14/providerMgr.c
|
|
||||||
--- sblim-sfcb-1.3.14/providerMgr.c.orig 2012-06-07 11:34:30.226930620 +0200
|
|
||||||
+++ sblim-sfcb-1.3.14/providerMgr.c 2012-06-07 13:03:34.140826089 +0200
|
|
||||||
@@ -24,6 +24,9 @@
|
|
||||||
#include <signal.h>
|
|
||||||
#include <time.h>
|
|
||||||
|
|
||||||
+#include <sys/time.h>
|
|
||||||
+#include <sys/resource.h>
|
|
||||||
+
|
|
||||||
#include "cmpidt.h"
|
|
||||||
#include "providerRegister.h"
|
|
||||||
#include "providerMgr.h"
|
|
@ -1,12 +1,12 @@
|
|||||||
diff -up sblim-sfcb-1.3.16/providerDrv.c.orig sblim-sfcb-1.3.16/providerDrv.c
|
diff -up sblim-sfcb-1.4.5/providerDrv.c.orig sblim-sfcb-1.4.5/providerDrv.c
|
||||||
--- sblim-sfcb-1.3.16/providerDrv.c.orig 2013-01-07 16:39:58.922924254 +0100
|
--- sblim-sfcb-1.4.5/providerDrv.c.orig 2013-09-04 12:59:22.140813239 +0200
|
||||||
+++ sblim-sfcb-1.3.16/providerDrv.c 2013-01-07 16:40:12.121988127 +0100
|
+++ sblim-sfcb-1.4.5/providerDrv.c 2013-09-04 12:59:40.511870274 +0200
|
||||||
@@ -3116,7 +3116,7 @@ void processProviderInvocationRequests(c
|
@@ -3585,7 +3585,7 @@ processProviderInvocationRequests(char *
|
||||||
rc = spRecvReq(&providerSockets.receive, &parms->requestor,
|
rc = spRecvReq(&providerSockets.receive, &parms->requestor,
|
||||||
(void **) &parms->req, &rl, &mqg);
|
(void **) &parms->req, &rl, &mqg);
|
||||||
if (mqg.rdone) {
|
if (mqg.rdone) {
|
||||||
- int debug_break = 0;
|
- int debug_break = 0;
|
||||||
+ volatile int debug_break = 0;
|
+ volatile int debug_break = 0;
|
||||||
if (rc!=0) {
|
if (rc != 0) {
|
||||||
mlogf(M_ERROR,M_SHOW, "spRecvReq returned error %d. Skipping message.\n", rc);
|
mlogf(M_ERROR,M_SHOW, "spRecvReq returned error %d. Skipping message.\n", rc);
|
||||||
free(parms);
|
free(parms);
|
||||||
|
@ -1,103 +0,0 @@
|
|||||||
replaceClStringN() relocates items in ClStrBuf, using strlen() to get
|
|
||||||
lengths of the items. With embedded instances / objects, strlen() is not
|
|
||||||
useful at all, we must get length of the item using other means.
|
|
||||||
|
|
||||||
The patch is quite crude, there might be better way, how to get the lenghts
|
|
||||||
(e.g. by having ClStrBuf.lenPtr[], which would track lenght of each item).
|
|
||||||
|
|
||||||
Version 2: do not get lengths from fb->indexPtr, it is being modified,
|
|
||||||
use a copy of it instead.
|
|
||||||
|
|
||||||
diff -up sblim-sfcb-1.3.16/objectImpl.c.embedded-crash sblim-sfcb-1.3.16/objectImpl.c
|
|
||||||
--- sblim-sfcb-1.3.16/objectImpl.c.embedded-crash 2013-04-18 16:49:51.941521957 +0200
|
|
||||||
+++ sblim-sfcb-1.3.16/objectImpl.c 2013-04-18 16:39:30.000000000 +0200
|
|
||||||
@@ -449,6 +449,29 @@ static void replaceClString(ClObjectHdr
|
|
||||||
return replaceClStringN(hdr, id, str, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
+static int getBufIndexLen(int *indexPtr, int bUsed, int iUsed, int index)
|
|
||||||
+{
|
|
||||||
+ /*
|
|
||||||
+ * Find length of 'string' in fb at given index.
|
|
||||||
+ * We cannot use strlen, because some items are not strings but embedded
|
|
||||||
+ * instances.
|
|
||||||
+ * We cannot simply substract fb->indexPtr[index+1] - fb->indexPtr[index],
|
|
||||||
+ * because the entries are not consecutive! They are shuffled by
|
|
||||||
+ * replaceClStringN().
|
|
||||||
+ * Therefore the only way to find a length of our 'string' is to find
|
|
||||||
+ * string, which starts immediately after it. Let's call it 'nearest'
|
|
||||||
+ * string. */
|
|
||||||
+ int nearest_start = bUsed;
|
|
||||||
+ int our_start = indexPtr[index];
|
|
||||||
+ int i;
|
|
||||||
+ for (i = 0; i<iUsed; i++)
|
|
||||||
+ if (indexPtr[i] > our_start && indexPtr[i] < nearest_start) {
|
|
||||||
+ nearest_start = indexPtr[i];
|
|
||||||
+ }
|
|
||||||
+ int len = nearest_start - our_start;
|
|
||||||
+ return len;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static void
|
|
||||||
replaceClStringN(ClObjectHdr * hdr, int id, const char *str, unsigned int length)
|
|
||||||
{
|
|
||||||
@@ -457,15 +480,20 @@ replaceClStringN(ClObjectHdr * hdr, int
|
|
||||||
char *ts, *fs;
|
|
||||||
long i, l, u;
|
|
||||||
ClStrBuf *fb;
|
|
||||||
+ int *oldIndexPtr;
|
|
||||||
|
|
||||||
fb = getStrBufPtr(hdr);
|
|
||||||
ts = (char *) malloc(fb->bUsed);
|
|
||||||
fs = &fb->buf[0];
|
|
||||||
|
|
||||||
+ /* Copy indexPtr from the buffer, so we can compute lengths of items in it.*/
|
|
||||||
+ oldIndexPtr = (int*) malloc(sizeof(int)*fb->iUsed);
|
|
||||||
+ memcpy(oldIndexPtr, fb->indexPtr, sizeof(int)*fb->iUsed);
|
|
||||||
+
|
|
||||||
for (u = i = 0; i < fb->iUsed; i++) {
|
|
||||||
if (i != id - 1) {
|
|
||||||
char *f = fs + fb->indexPtr[i];
|
|
||||||
- l = strlen(f) + 1;
|
|
||||||
+ l = getBufIndexLen(oldIndexPtr, fb->bUsed, fb->iUsed, i);
|
|
||||||
fb->indexPtr[i] = u;
|
|
||||||
memcpy(ts + u, f, l);
|
|
||||||
u += l;
|
|
||||||
@@ -474,6 +502,7 @@ replaceClStringN(ClObjectHdr * hdr, int
|
|
||||||
memcpy(fs, ts, u);
|
|
||||||
fb->bUsed = u;
|
|
||||||
free(ts);
|
|
||||||
+ free(oldIndexPtr);
|
|
||||||
|
|
||||||
i = addClStringN(hdr, str, length);
|
|
||||||
fb = getStrBufPtr(hdr);
|
|
||||||
@@ -498,16 +527,20 @@ removeClObject(ClObjectHdr * hdr, int id
|
|
||||||
// char *tmpstr = NULL;
|
|
||||||
long i, l, u;
|
|
||||||
ClStrBuf *fb;
|
|
||||||
+ int *oldIndexPtr;
|
|
||||||
|
|
||||||
fb = getStrBufPtr(hdr);
|
|
||||||
ts = (char *) malloc(fb->bUsed); /* tmp string buffer */
|
|
||||||
fs = &fb->buf[0];
|
|
||||||
+ /* Copy indexPtr from the buffer, so we can compute lengths of items in it.*/
|
|
||||||
+ oldIndexPtr = (int*) malloc(sizeof(int)*fb->iUsed);
|
|
||||||
+ memcpy(oldIndexPtr, fb->indexPtr, sizeof(int)*fb->iUsed);
|
|
||||||
|
|
||||||
for (u = i = 0; i < fb->iUsed; i++) {
|
|
||||||
if (i != id - 1) { /* loop through and copy over all _other_ properties */
|
|
||||||
// fprintf(stderr, "replace: keeping %ld\n", i);
|
|
||||||
char *f = fs + fb->indexPtr[i];
|
|
||||||
- l = fb->indexPtr[i+1] - fb->indexPtr[i];
|
|
||||||
+ l = getBufIndexLen(oldIndexPtr, fb->bUsed, fb->iUsed, i);
|
|
||||||
|
|
||||||
/* Bugzilla 74159 - Align the string buffer & null terminate */
|
|
||||||
/*if (l % sizeof(long) != 0) {
|
|
||||||
@@ -535,6 +568,7 @@ removeClObject(ClObjectHdr * hdr, int id
|
|
||||||
memcpy(fs, ts, u);
|
|
||||||
fb->bUsed = u;
|
|
||||||
free(ts);
|
|
||||||
+ free(oldIndexPtr);
|
|
||||||
|
|
||||||
fb->iUsed--; /* fixup the item count, since we have one fewer elements */
|
|
||||||
|
|
@ -1,394 +0,0 @@
|
|||||||
diff -up sblim-sfcb-1.3.16/cimXmlGen.c.orig sblim-sfcb-1.3.16/cimXmlGen.c
|
|
||||||
--- sblim-sfcb-1.3.16/cimXmlGen.c.orig 2013-06-13 16:13:19.001289413 +0200
|
|
||||||
+++ sblim-sfcb-1.3.16/cimXmlGen.c 2013-06-13 16:13:19.005289432 +0200
|
|
||||||
@@ -54,16 +54,24 @@ extern CMPIData opGetKeyCharsAt(CMPIObje
|
|
||||||
const char **name, CMPIStatus * rc);
|
|
||||||
extern CMPIData __ift_internal_getPropertyAt(const CMPIInstance * ci,
|
|
||||||
CMPICount i, char ** name,
|
|
||||||
- CMPIStatus * rc, int readonly);
|
|
||||||
+ CMPIStatus * rc, int readonly,
|
|
||||||
+ unsigned long* quals);
|
|
||||||
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);
|
|
||||||
|
|
||||||
+/* We introduce additional parameter in data2xml, use this macro when you want
|
|
||||||
+ * pass it, use the original when you want data2xml behave as usual */
|
|
||||||
+#define EMBDATA2XML(data,obj,name,refname,btag,etag,sb,qsb,inst,param,embInst) \
|
|
||||||
+ data2xml((data),(obj),(name),(refname),(btag),sizeof(btag)-1,(etag), \
|
|
||||||
+ sizeof(etag)-1,(sb),(qsb),(inst),(param),(embInst))
|
|
||||||
+
|
|
||||||
+
|
|
||||||
#define DATA2XML(data,obj,name,refname,btag,etag,sb,qsb,inst,param) \
|
|
||||||
data2xml((data),(obj),(name),(refname),(btag),sizeof(btag)-1,(etag), \
|
|
||||||
- sizeof(etag)-1,(sb),(qsb),(inst),(param))
|
|
||||||
+ sizeof(etag)-1,(sb),(qsb),(inst),(param),0)
|
|
||||||
|
|
||||||
static int add_escaped_instance(UtilStringBuffer *sb, CMPIInstance *inst)
|
|
||||||
{
|
|
||||||
@@ -679,7 +687,7 @@ static void method2xml(CMPIType type, CM
|
|
||||||
|
|
||||||
void data2xml(CMPIData * data, void *obj, CMPIString * name, CMPIString * refName,
|
|
||||||
char *bTag, int bTagLen, char *eTag, int eTagLen,
|
|
||||||
- UtilStringBuffer * sb, UtilStringBuffer * qsb, int inst, int param)
|
|
||||||
+ UtilStringBuffer * sb, UtilStringBuffer * qsb, int inst, int param, int embInst)
|
|
||||||
{
|
|
||||||
_SFCB_ENTER(TRACE_CIMXMLPROC, "data2xml");
|
|
||||||
|
|
||||||
@@ -699,7 +707,11 @@ void data2xml(CMPIData * data, void *obj
|
|
||||||
}
|
|
||||||
else if(((data->type & ~CMPI_ARRAY) == CMPI_instance)
|
|
||||||
|| ((data->type & ~CMPI_ARRAY) == CMPI_class)) {
|
|
||||||
- SFCB_APPENDCHARS_BLOCK(sb, "string\" EmbeddedObject=\"object");
|
|
||||||
+ if (embInst == 1) {
|
|
||||||
+ SFCB_APPENDCHARS_BLOCK(sb, "\" EmbeddedObject=\"instance");
|
|
||||||
+ } else {
|
|
||||||
+ SFCB_APPENDCHARS_BLOCK(sb, "\" EmbeddedObject=\"object");
|
|
||||||
+ }
|
|
||||||
} else {
|
|
||||||
sb->ft->appendChars(sb, dataType(data->type));
|
|
||||||
}
|
|
||||||
@@ -751,7 +763,11 @@ void data2xml(CMPIData * data, void *obj
|
|
||||||
else if (*type == '%') {
|
|
||||||
sb->ft->appendBlock(sb, bTag, bTagLen);
|
|
||||||
sb->ft->appendChars(sb, (char *) name->hdl);
|
|
||||||
- SFCB_APPENDCHARS_BLOCK(sb, "\" EmbeddedObject=\"object");
|
|
||||||
+ if (embInst == 1) {
|
|
||||||
+ SFCB_APPENDCHARS_BLOCK(sb, "\" EmbeddedObject=\"instance");
|
|
||||||
+ } else {
|
|
||||||
+ SFCB_APPENDCHARS_BLOCK(sb, "\" EmbeddedObject=\"object");
|
|
||||||
+ }
|
|
||||||
if (param) SFCB_APPENDCHARS_BLOCK(sb, "\" PARAMTYPE=\"string\">\n");
|
|
||||||
else SFCB_APPENDCHARS_BLOCK(sb, "\" TYPE=\"string\">\n");
|
|
||||||
if(data->value.inst) {
|
|
||||||
@@ -791,10 +807,14 @@ static void quals2xml(unsigned long qual
|
|
||||||
if (quals & (ClProperty_Q_Key << 8))
|
|
||||||
SFCB_APPENDCHARS_BLOCK(sb, "<QUALIFIER NAME=\"Key\" TYPE=\"boolean\">\n"
|
|
||||||
"<VALUE>TRUE</VALUE>\n</QUALIFIER>\n");
|
|
||||||
- if (quals & (ClProperty_Q_EmbeddedObject << 8))
|
|
||||||
+ if ((quals & (ClProperty_Q_EmbeddedObject << 8)) && !(quals & (ClProperty_Q_EmbeddedInstance << 8)))
|
|
||||||
SFCB_APPENDCHARS_BLOCK(sb,
|
|
||||||
"<QUALIFIER NAME=\"EmbeddedObject\" TYPE=\"boolean\">\n"
|
|
||||||
"<VALUE>TRUE</VALUE>\n</QUALIFIER>\n");
|
|
||||||
+ if (quals & (ClProperty_Q_EmbeddedInstance << 8))
|
|
||||||
+ SFCB_APPENDCHARS_BLOCK(sb,
|
|
||||||
+ "<QUALIFIER NAME=\"EmbeddedInstance\" TYPE=\"boolean\">\n"
|
|
||||||
+ "<VALUE>TRUE</VALUE>\n</QUALIFIER>\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
static void param2xml(CMPIParameter *pdata, CMPIConstClass * cls, ClParameter *parm, CMPIString *pname,
|
|
||||||
@@ -866,7 +886,7 @@ static void param2xml(CMPIParameter *pda
|
|
||||||
int cls2xml(CMPIConstClass * cls, UtilStringBuffer * sb, unsigned int flags)
|
|
||||||
{
|
|
||||||
ClClass *cl = (ClClass *) cls->hdl;
|
|
||||||
- int i, m, q, qm, p, pm;
|
|
||||||
+ int i, m, q, qm, p, pm, embInst = 0;
|
|
||||||
char *type, *superCls;
|
|
||||||
CMPIString *name, *qname, *refName;
|
|
||||||
CMPIData data, qdata;
|
|
||||||
@@ -903,18 +923,21 @@ int cls2xml(CMPIConstClass * cls, UtilSt
|
|
||||||
CMRelease(qname);
|
|
||||||
sfcb_native_release_CMPIValue(qdata.type,&qdata.value);
|
|
||||||
}
|
|
||||||
- if (data.type & CMPI_ARRAY) DATA2XML(&data,cls,name,NULL,"<PROPERTY.ARRAY NAME=\"",
|
|
||||||
- "</PROPERTY.ARRAY>\n", sb, qsb, 0,0);
|
|
||||||
+ if (quals & ClProperty_Q_EmbeddedInstance) embInst = 1;
|
|
||||||
+
|
|
||||||
+ if (data.type & CMPI_ARRAY) EMBDATA2XML(&data,cls,name,NULL,"<PROPERTY.ARRAY NAME=\"",
|
|
||||||
+ "</PROPERTY.ARRAY>\n", sb, qsb, 0,0, embInst);
|
|
||||||
else {
|
|
||||||
type = dataType(data.type);
|
|
||||||
if (*type == '*') {
|
|
||||||
- DATA2XML(&data,cls,name,refName,"<PROPERTY.REFERENCE NAME=\"",
|
|
||||||
- "</PROPERTY.REFERENCE>\n", sb, qsb, 0,0);
|
|
||||||
+ EMBDATA2XML(&data,cls,name,refName,"<PROPERTY.REFERENCE NAME=\"",
|
|
||||||
+ "</PROPERTY.REFERENCE>\n", sb, qsb, 0,0, embInst);
|
|
||||||
}
|
|
||||||
- else DATA2XML(&data,cls,name,NULL,"<PROPERTY NAME=\"", "</PROPERTY>\n",
|
|
||||||
- sb, qsb, 0,0);
|
|
||||||
+ else EMBDATA2XML(&data,cls,name,NULL,"<PROPERTY NAME=\"", "</PROPERTY>\n",
|
|
||||||
+ sb, qsb, 0,0, embInst);
|
|
||||||
}
|
|
||||||
CMRelease(name);
|
|
||||||
+ embInst = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0, m = ClClassGetMethodCount(cl); i < m; i++) {
|
|
||||||
@@ -957,9 +980,10 @@ int cls2xml(CMPIConstClass * cls, UtilSt
|
|
||||||
int instance2xml(CMPIInstance * ci, UtilStringBuffer * sb, unsigned int flags)
|
|
||||||
{
|
|
||||||
ClInstance *inst = (ClInstance *) ci->hdl;
|
|
||||||
- int i, m = ClInstanceGetPropertyCount(inst);
|
|
||||||
+ int i, m = ClInstanceGetPropertyCount(inst), embInst = 0;
|
|
||||||
char *type;
|
|
||||||
UtilStringBuffer *qsb = UtilFactory->newStrinBuffer(1024);
|
|
||||||
+ unsigned long quals;
|
|
||||||
|
|
||||||
_SFCB_ENTER(TRACE_CIMXMLPROC, "instance2xml");
|
|
||||||
|
|
||||||
@@ -976,23 +1000,28 @@ int instance2xml(CMPIInstance * ci, Util
|
|
||||||
if(ClInstanceIsPropertyAtFiltered(inst, i)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
- data = __ift_internal_getPropertyAt(ci, i, (char**)&name.hdl, NULL, 1);
|
|
||||||
+ data = __ift_internal_getPropertyAt(ci, i, (char **) &name.hdl, NULL, 1, &quals);
|
|
||||||
|
|
||||||
+ if (quals & ClProperty_Q_EmbeddedInstance) {
|
|
||||||
+ embInst = 1;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
if (data.type & CMPI_ARRAY) {
|
|
||||||
- DATA2XML(&data,ci,&name,NULL,"<PROPERTY.ARRAY NAME=\"", "</PROPERTY.ARRAY>\n",
|
|
||||||
- sb, qsb, 1,0);
|
|
||||||
+ EMBDATA2XML(&data,ci,&name,NULL,"<PROPERTY.ARRAY NAME=\"", "</PROPERTY.ARRAY>\n",
|
|
||||||
+ sb, qsb, 1,0, embInst);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
type = dataType(data.type);
|
|
||||||
- if (*type == '*') DATA2XML(&data,ci,&name,NULL,"<PROPERTY.REFERENCE NAME=\"",
|
|
||||||
- "</PROPERTY.REFERENCE>\n", sb, qsb, 1,0);
|
|
||||||
- else DATA2XML(&data,ci,&name,NULL,"<PROPERTY NAME=\"", "</PROPERTY>\n", sb, qsb, 1,0);
|
|
||||||
+ if (*type == '*') EMBDATA2XML(&data,ci,&name,NULL,"<PROPERTY.REFERENCE NAME=\"",
|
|
||||||
+ "</PROPERTY.REFERENCE>\n", sb, qsb, 1,0, embInst);
|
|
||||||
+ else EMBDATA2XML(&data,ci,&name,NULL,"<PROPERTY NAME=\"", "</PROPERTY>\n", sb, qsb, 1,0, embInst);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (data.type & (CMPI_ENC|CMPI_ARRAY)) {// don't get confused using generic release
|
|
||||||
if ((data.state&~CMPI_keyValue)==0 && data.type != CMPI_instance)
|
|
||||||
data.value.inst->ft->release(data.value.inst);
|
|
||||||
}
|
|
||||||
+ embInst = 0;
|
|
||||||
}
|
|
||||||
SFCB_APPENDCHARS_BLOCK(sb, "</INSTANCE>\n");
|
|
||||||
|
|
||||||
diff -up sblim-sfcb-1.3.16/cimXmlGen.h.orig sblim-sfcb-1.3.16/cimXmlGen.h
|
|
||||||
--- sblim-sfcb-1.3.16/cimXmlGen.h.orig 2012-06-13 23:21:09.000000000 +0200
|
|
||||||
+++ sblim-sfcb-1.3.16/cimXmlGen.h 2013-06-13 16:13:19.006289437 +0200
|
|
||||||
@@ -52,7 +52,7 @@ extern int qualifierDeclaration2xml(CMPI
|
|
||||||
extern char *XMLEscape(char *in, int *outlen);
|
|
||||||
extern void data2xml(CMPIData * data, void *obj, CMPIString * name, CMPIString * refName,
|
|
||||||
char *bTag, int bTagLen, char *eTag, int eTagLen,
|
|
||||||
- UtilStringBuffer * sb, UtilStringBuffer * qsb, int inst, int param);
|
|
||||||
+ UtilStringBuffer * sb, UtilStringBuffer * qsb, int inst, int param, int embInst);
|
|
||||||
CMPIType guessType(char *val);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
diff -up sblim-sfcb-1.3.16/constClass.c.orig sblim-sfcb-1.3.16/constClass.c
|
|
||||||
--- sblim-sfcb-1.3.16/constClass.c.orig 2010-10-14 21:42:06.000000000 +0200
|
|
||||||
+++ sblim-sfcb-1.3.16/constClass.c 2013-06-13 16:13:19.006289437 +0200
|
|
||||||
@@ -315,6 +315,24 @@ static CMPIData getPropQualifier(CMPICon
|
|
||||||
return rv_notFound;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+ if (strcasecmp(cpq, "embeddedinstance") == 0) {
|
|
||||||
+ unsigned long quals;
|
|
||||||
+ getPropertyQualsAt(cc,p-1,NULL,&quals,NULL,rc);
|
|
||||||
+ if (quals & ClProperty_Q_EmbeddedInstance) {
|
|
||||||
+ rv.type = CMPI_boolean;
|
|
||||||
+ rv.state = CMPI_goodValue;
|
|
||||||
+ rv.value.boolean = 1;
|
|
||||||
+ if (rc) {
|
|
||||||
+ CMSetStatus(rc, CMPI_RC_OK);
|
|
||||||
+ }
|
|
||||||
+ return rv;
|
|
||||||
+ } else {
|
|
||||||
+ if (rc) {
|
|
||||||
+ CMSetStatus(rc, CMPI_RC_ERR_NOT_FOUND);
|
|
||||||
+ }
|
|
||||||
+ return rv_notFound;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
|
|
||||||
|
|
||||||
for (i=0; i<num;i++) {
|
|
||||||
diff -up sblim-sfcb-1.3.16/instance.c.orig sblim-sfcb-1.3.16/instance.c
|
|
||||||
--- sblim-sfcb-1.3.16/instance.c.orig 2012-10-31 02:40:09.000000000 +0100
|
|
||||||
+++ sblim-sfcb-1.3.16/instance.c 2013-06-13 16:13:19.007289442 +0200
|
|
||||||
@@ -205,11 +205,12 @@ static CMPIInstance *__ift_clone(const C
|
|
||||||
|
|
||||||
CMPIData __ift_internal_getPropertyAt(const CMPIInstance * ci, CMPICount i,
|
|
||||||
char ** name,
|
|
||||||
- CMPIStatus * rc, int readonly)
|
|
||||||
+ CMPIStatus * rc, int readonly,
|
|
||||||
+ unsigned long* quals)
|
|
||||||
{
|
|
||||||
ClInstance *inst = (ClInstance *) ci->hdl;
|
|
||||||
CMPIData rv = { 0, CMPI_notFound, {0} };
|
|
||||||
- if (ClInstanceGetPropertyAt(inst, i, &rv, name, NULL)) {
|
|
||||||
+ if (ClInstanceGetPropertyAt(inst, i, &rv, name, quals)) {
|
|
||||||
if (rc)
|
|
||||||
CMSetStatus(rc, CMPI_RC_ERR_NO_SUCH_PROPERTY);
|
|
||||||
return rv;
|
|
||||||
@@ -250,7 +251,7 @@ CMPIData __ift_getPropertyAt(const CMPII
|
|
||||||
return rv;
|
|
||||||
}
|
|
||||||
|
|
||||||
- rv = __ift_internal_getPropertyAt(ci, i, &sname, rc, 0);
|
|
||||||
+ rv = __ift_internal_getPropertyAt(ci, i, &sname, rc, 0, NULL);
|
|
||||||
if (name) {
|
|
||||||
*name = sfcb_native_new_CMPIString(sname, NULL, 0);
|
|
||||||
}
|
|
||||||
@@ -301,6 +302,22 @@ static CMPICount __ift_getPropertyCount(
|
|
||||||
return (CMPICount) ClInstanceGetPropertyCount(inst);
|
|
||||||
}
|
|
||||||
|
|
||||||
+static CMPIStatus __ift_addPropertyQualifier(const CMPIInstance * instance,
|
|
||||||
+ const char *name,
|
|
||||||
+ const char *qualifier )
|
|
||||||
+{
|
|
||||||
+ ClInstance *inst;
|
|
||||||
+ int rc;
|
|
||||||
+
|
|
||||||
+ if (!instance->hdl) {
|
|
||||||
+ CMReturn(CMPI_RC_ERR_INVALID_HANDLE);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ inst = (ClInstance *) instance->hdl;
|
|
||||||
+ rc = ClInstanceAddPropertyQualifierSpecial(inst, name, qualifier);
|
|
||||||
+ CMReturn(rc);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
|
|
||||||
static CMPIStatus __ift_setProperty(const CMPIInstance * instance,
|
|
||||||
const char *name,
|
|
||||||
@@ -465,7 +482,7 @@ static CMPIObjectPath *__ift_getObjectPa
|
|
||||||
|
|
||||||
while (j--) {
|
|
||||||
char *keyName;
|
|
||||||
- CMPIData d = __ift_internal_getPropertyAt(instance, j, &keyName, &tmp, 1);
|
|
||||||
+ CMPIData d = __ift_internal_getPropertyAt(instance, j, &keyName, &tmp, 1, NULL);
|
|
||||||
if (d.state & CMPI_keyValue) {
|
|
||||||
CMAddKey(cop, keyName, &d.value, d.type);
|
|
||||||
f++;
|
|
||||||
@@ -547,7 +564,7 @@ static CMPIStatus __ift_internal_setProp
|
|
||||||
iNew->property_list = __duplicate_list(propertyList);
|
|
||||||
iNew->key_list = __duplicate_list(keys);
|
|
||||||
for (j = 0, m = __ift_getPropertyCount(instance, &st); j < m; j++) {
|
|
||||||
- data = __ift_internal_getPropertyAt(instance, j, &name, &st, 1);
|
|
||||||
+ data = __ift_internal_getPropertyAt(instance, j, &name, &st, 1, NULL);
|
|
||||||
if(__contained_list((char**)propertyList, name) || __contained_list((char**)keys, name)) {
|
|
||||||
if ( (data.state & ~CMPI_keyValue) != 0) {
|
|
||||||
newInstance->ft->setProperty(
|
|
||||||
@@ -702,7 +719,7 @@ CMPIString *instance2String(CMPIInstance
|
|
||||||
add(&buf, &bp, &bm, "\n");
|
|
||||||
|
|
||||||
for (i = 0, m = __ift_getPropertyCount(inst, rc); i < m; i++) {
|
|
||||||
- data = __ift_internal_getPropertyAt(inst, i, &pname, rc, 1);
|
|
||||||
+ data = __ift_internal_getPropertyAt(inst, i, &pname, rc, 1, NULL);
|
|
||||||
add(&buf, &bp, &bm, " ");
|
|
||||||
add(&buf, &bp, &bm, pname);
|
|
||||||
add(&buf, &bp, &bm, " = ");
|
|
||||||
@@ -1064,6 +1081,7 @@ static int instFillDefaultProperties(str
|
|
||||||
pd = cc->ft->getPropertyAt(cc,pc,&pn,&ps);
|
|
||||||
|
|
||||||
/* if this prop is an EmbeddedObject, force type to CMPI_instance to allow CMSetProperty with a CMPI_Instance */
|
|
||||||
+ /* (also works for EmbeddedInstance, since the EmbeddedObject qual will also be set in that case */
|
|
||||||
CMPIData pqd = cc->ft->getPropQualifier(cc, CMGetCharsPtr(pn, NULL), "EmbeddedObject", NULL);
|
|
||||||
if ((pqd.state == CMPI_goodValue) && (pqd.value.boolean == 1)) {
|
|
||||||
pd.type = CMPI_instance;
|
|
||||||
@@ -1082,6 +1100,14 @@ static int instFillDefaultProperties(str
|
|
||||||
}
|
|
||||||
__ift_setProperty(&inst->instance,CMGetCharsPtr(pn,NULL),
|
|
||||||
vp,pd.type);
|
|
||||||
+
|
|
||||||
+ /* Copy EmbeddedInstance qualifier from the class to the instance,
|
|
||||||
+ so we know, what to put into CIM-XML */
|
|
||||||
+ CMPIData pqd = cc->ft->getPropQualifier(cc, CMGetCharsPtr(pn, NULL), "EmbeddedInstance", NULL);
|
|
||||||
+ if ((pqd.state == CMPI_goodValue) && (pqd.value.string != NULL)) {
|
|
||||||
+ __ift_addPropertyQualifier(&inst->instance, CMGetCharsPtr(pn,NULL), "EmbeddedInstance");
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
diff -up sblim-sfcb-1.3.16/objectImpl.c.orig sblim-sfcb-1.3.16/objectImpl.c
|
|
||||||
--- sblim-sfcb-1.3.16/objectImpl.c.orig 2013-06-13 16:13:18.997289393 +0200
|
|
||||||
+++ sblim-sfcb-1.3.16/objectImpl.c 2013-06-13 16:13:19.008289447 +0200
|
|
||||||
@@ -930,7 +930,11 @@ int ClClassAddPropertyQualifierSpecial(C
|
|
||||||
p->quals |= ClProperty_Q_Key;
|
|
||||||
else if (strcasecmp(id, "embeddedobject") == 0)
|
|
||||||
p->quals |= ClProperty_Q_EmbeddedObject;
|
|
||||||
- else
|
|
||||||
+ /* Make EmbeddedInstance bahave as EmbeddedObject, but be able to distinguish between them */
|
|
||||||
+ else if (strcasecmp(id, "embeddedinstance") == 0) {
|
|
||||||
+ p->quals |= ClProperty_Q_EmbeddedObject;
|
|
||||||
+ p->quals |= ClProperty_Q_EmbeddedInstance;
|
|
||||||
+ } else
|
|
||||||
return ClClassAddQualifierSpecial(hdr, &p->qualifiers, id, d, arrHdr);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
@@ -2145,6 +2149,31 @@ int ClInstanceGetPropertyAt(ClInstance *
|
|
||||||
_SFCB_RETURN(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
+int ClInstanceAddPropertyQualifierSpecial(ClInstance *inst, const char *id,
|
|
||||||
+ const char *qualifier)
|
|
||||||
+{
|
|
||||||
+ int i;
|
|
||||||
+ ClProperty *p;
|
|
||||||
+
|
|
||||||
+ _SFCB_ENTER(TRACE_OBJECTIMPL, "ClInstanceAddPropertyQualifierSpecial");
|
|
||||||
+
|
|
||||||
+ i = ClObjectLocateProperty(&inst->hdr, &inst->properties, id);
|
|
||||||
+ if (i == 0)
|
|
||||||
+ /* cannot find the property */
|
|
||||||
+ _SFCB_RETURN(CMPI_RC_ERR_NO_SUCH_PROPERTY)
|
|
||||||
+
|
|
||||||
+ p = (ClProperty*) getSectionPtr(&inst->hdr, &inst->properties);
|
|
||||||
+ p = p + i - 1;
|
|
||||||
+
|
|
||||||
+ if (strcasecmp(qualifier, "embeddedinstance") == 0) {
|
|
||||||
+ p->quals |= ClProperty_Q_EmbeddedObject;
|
|
||||||
+ p->quals |= ClProperty_Q_EmbeddedInstance;
|
|
||||||
+ } else if (strcasecmp(qualifier, "embeddedobject") == 0)
|
|
||||||
+ p->quals |= ClProperty_Q_EmbeddedObject;
|
|
||||||
+
|
|
||||||
+ _SFCB_RETURN(0)
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
int ClInstanceAddProperty(ClInstance * inst, const char *id, CMPIData d)
|
|
||||||
{
|
|
||||||
ClSection *prps = &inst->properties;
|
|
||||||
diff -up sblim-sfcb-1.3.16/objectImpl.h.orig sblim-sfcb-1.3.16/objectImpl.h
|
|
||||||
--- sblim-sfcb-1.3.16/objectImpl.h.orig 2009-12-22 01:18:29.000000000 +0100
|
|
||||||
+++ sblim-sfcb-1.3.16/objectImpl.h 2013-06-13 16:13:19.008289447 +0200
|
|
||||||
@@ -274,6 +274,7 @@ typedef struct {
|
|
||||||
#ifndef SETCLPFX
|
|
||||||
#define ClProperty_Q_Key 1
|
|
||||||
#define ClProperty_Q_EmbeddedObject 8
|
|
||||||
+ #define ClProperty_Q_EmbeddedInstance 16
|
|
||||||
#endif
|
|
||||||
unsigned char originId;
|
|
||||||
PFX(CLPFX,ClSection) qualifiers;
|
|
||||||
@@ -469,6 +470,7 @@ extern void ClInstanceFree(ClInstance *i
|
|
||||||
extern char *ClInstanceToString(ClInstance *inst);
|
|
||||||
extern int ClInstanceGetPropertyCount(ClInstance *inst);
|
|
||||||
extern int ClInstanceGetPropertyAt(ClInstance *inst, int id, CMPIData *data, char **name, unsigned long *quals);
|
|
||||||
+extern int ClInstanceAddPropertyQualifierSpecial(ClInstance *inst, const char *id, const char *qualifier);
|
|
||||||
extern int ClInstanceAddProperty(ClInstance *inst, const char *id, CMPIData d);
|
|
||||||
extern void ClInstanceFilterFlagProperty(ClInstance * inst, int id);
|
|
||||||
extern int ClInstanceIsPropertyAtFiltered(ClInstance * inst, int id);
|
|
||||||
diff -up sblim-sfcb-1.3.16/objectImplSwapI32toP32.c.orig sblim-sfcb-1.3.16/objectImplSwapI32toP32.c
|
|
||||||
--- sblim-sfcb-1.3.16/objectImplSwapI32toP32.c.orig 2008-11-07 18:00:44.000000000 +0100
|
|
||||||
+++ sblim-sfcb-1.3.16/objectImplSwapI32toP32.c 2013-06-13 16:13:19.009289452 +0200
|
|
||||||
@@ -81,6 +81,7 @@ typedef struct {
|
|
||||||
#define ClProperty_Q_Key 1
|
|
||||||
#define ClProperty_Q_Propagated 2
|
|
||||||
#define ClProperty_Q_EmbeddedObject 8
|
|
||||||
+ #define ClProperty_Q_EmbeddedInstance 16
|
|
||||||
#endif
|
|
||||||
unsigned char originId;
|
|
||||||
CLP32_ClSection qualifiers;
|
|
||||||
diff -up sblim-sfcb-1.3.16/sfcbdumpP32onI32.c.orig sblim-sfcb-1.3.16/sfcbdumpP32onI32.c
|
|
||||||
--- sblim-sfcb-1.3.16/sfcbdumpP32onI32.c.orig 2008-12-18 22:34:33.000000000 +0100
|
|
||||||
+++ sblim-sfcb-1.3.16/sfcbdumpP32onI32.c 2013-06-13 16:13:19.009289452 +0200
|
|
||||||
@@ -72,6 +72,7 @@ typedef struct {
|
|
||||||
#define ClProperty_Q_Key 1
|
|
||||||
#define ClProperty_Q_Propagated 2
|
|
||||||
#define ClProperty_Q_EmbeddedObject 8
|
|
||||||
+ #define ClProperty_Q_EmbeddedInstance 16
|
|
||||||
#endif
|
|
||||||
unsigned char originId;
|
|
||||||
CLP32_ClSection qualifiers;
|
|
@ -1,49 +0,0 @@
|
|||||||
diff -up sblim-sfcb-1.3.16/cimXmlGen.c.escape sblim-sfcb-1.3.16/cimXmlGen.c
|
|
||||||
--- sblim-sfcb-1.3.16/cimXmlGen.c.escape 2013-04-29 14:29:14.084335007 +0200
|
|
||||||
+++ sblim-sfcb-1.3.16/cimXmlGen.c 2013-04-29 14:28:44.000000000 +0200
|
|
||||||
@@ -70,6 +70,23 @@ const char *opGetClassNameChars(CMPIObje
|
|
||||||
data2xml((data),(obj),(name),(refname),(btag),sizeof(btag)-1,(etag), \
|
|
||||||
sizeof(etag)-1,(sb),(qsb),(inst),(param))
|
|
||||||
|
|
||||||
+static int add_escaped_instance(UtilStringBuffer *sb, CMPIInstance *inst)
|
|
||||||
+{
|
|
||||||
+ UtilStringBuffer *instance;
|
|
||||||
+
|
|
||||||
+ _SFCB_ENTER(TRACE_CIMXMLPROC, "add_escaped_instance");
|
|
||||||
+
|
|
||||||
+ instance = UtilFactory->newStrinBuffer(1024);
|
|
||||||
+ if (!instance)
|
|
||||||
+ _SFCB_RETURN(1);
|
|
||||||
+
|
|
||||||
+ instance2xml(inst, instance, 0);
|
|
||||||
+ char *escaped = XMLEscape((char *) instance->ft->getCharPtr(instance), NULL);
|
|
||||||
+ sb->ft->appendChars(sb, escaped);
|
|
||||||
+ free(escaped);
|
|
||||||
+ instance->ft->release(instance);
|
|
||||||
+ _SFCB_RETURN(0);
|
|
||||||
+}
|
|
||||||
|
|
||||||
char *XMLEscape(char *in, int *outlen)
|
|
||||||
{
|
|
||||||
@@ -542,9 +559,7 @@ int value2xml(CMPIData d, UtilStringBuff
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if(d.type == CMPI_instance) {
|
|
||||||
- SFCB_APPENDCHARS_BLOCK(sb, "<![CDATA[");
|
|
||||||
- instance2xml(d.value.inst, sb, 0);
|
|
||||||
- SFCB_APPENDCHARS_BLOCK(sb, "]]>");
|
|
||||||
+ add_escaped_instance(sb, d.value.inst);
|
|
||||||
splen = 0;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
@@ -754,9 +769,7 @@ void data2xml(CMPIData * data, void *obj
|
|
||||||
else SFCB_APPENDCHARS_BLOCK(sb, "\" TYPE=\"string\">\n");
|
|
||||||
if(data->value.inst) {
|
|
||||||
SFCB_APPENDCHARS_BLOCK(sb, "<VALUE>");
|
|
||||||
- SFCB_APPENDCHARS_BLOCK(sb, "<![CDATA[");
|
|
||||||
- instance2xml(data->value.inst, sb, 0);
|
|
||||||
- SFCB_APPENDCHARS_BLOCK(sb, "]]>");
|
|
||||||
+ add_escaped_instance(sb, data->value.inst);
|
|
||||||
SFCB_APPENDCHARS_BLOCK(sb, "</VALUE>\n");
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,14 +0,0 @@
|
|||||||
diff -up sblim-sfcb-1.3.16/httpAdapter.c.bak sblim-sfcb-1.3.16/httpAdapter.c
|
|
||||||
--- sblim-sfcb-1.3.16/httpAdapter.c.bak 2012-10-06 03:19:15.000000000 +0200
|
|
||||||
+++ sblim-sfcb-1.3.16/httpAdapter.c 2013-05-29 19:57:16.906813502 +0200
|
|
||||||
@@ -728,8 +728,8 @@ static int getHdrs(CommHndl conn_fd, Buf
|
|
||||||
total+=r;
|
|
||||||
|
|
||||||
/* on first run through, ensure that this is a POST req. */
|
|
||||||
- if (r && first) {
|
|
||||||
- if (strncasecmp(buf,cmd,strlen(cmd)) != 0) {
|
|
||||||
+ if (first && total >= strlen(cmd)) {
|
|
||||||
+ if (strncasecmp(b->data,cmd,strlen(cmd)) != 0) {
|
|
||||||
/* not what we expected - still continue to read to
|
|
||||||
not confuse the client */
|
|
||||||
state = 1;
|
|
@ -1,76 +0,0 @@
|
|||||||
Function copyStringBuf() uses sizeof(*fb->indexPtr) as size of elements
|
|
||||||
in fb->indexPtr, while addClStringN() usess 'sizeof(long)' for the same
|
|
||||||
elements. Both functions copy indexPtr, but each with different size.
|
|
||||||
|
|
||||||
Therefore, if addClStringN() is called after copyStringBuf(), it may copy more
|
|
||||||
bytes than copyStringBuf() created -> SIGSEGV (or 'Invalid read of size XYZ'
|
|
||||||
in Valgrind logs).
|
|
||||||
|
|
||||||
'sizeof(*buf->indexPtr)' should be consistently used in ClStrBuf.indexPtr
|
|
||||||
and ClArrayBuf.indexPtr.
|
|
||||||
|
|
||||||
diff -up sblim-sfcb-1.3.16/objectImpl.c.invalid-read sblim-sfcb-1.3.16/objectImpl.c
|
|
||||||
--- sblim-sfcb-1.3.16/objectImpl.c.invalid-read 2013-04-19 14:03:04.920602183 +0200
|
|
||||||
+++ sblim-sfcb-1.3.16/objectImpl.c 2013-04-19 14:04:10.229391267 +0200
|
|
||||||
@@ -208,7 +208,7 @@ addClStringN(ClObjectHdr * hdr, const ch
|
|
||||||
buf->bMax = nmax;
|
|
||||||
buf->bUsed = buf->iUsed = 0;
|
|
||||||
buf->iMax = 16;
|
|
||||||
- setStrIndexPtr(buf, malloc(sizeof(long) * 16));
|
|
||||||
+ setStrIndexPtr(buf, malloc(sizeof(*buf->indexPtr) * 16));
|
|
||||||
hdr->flags |= HDR_Rebuild;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -222,17 +222,17 @@ addClStringN(ClObjectHdr * hdr, const ch
|
|
||||||
if (!isMallocedStrIndex(buf)) {
|
|
||||||
void *idx = buf->indexPtr;
|
|
||||||
buf->iMax = nmax * 2;
|
|
||||||
- setStrIndexPtr(buf, malloc(buf->iMax * sizeof(long)));
|
|
||||||
- memcpy(buf->indexPtr, idx, nmax * sizeof(long));
|
|
||||||
+ setStrIndexPtr(buf, malloc(buf->iMax * sizeof(*buf->indexPtr)));
|
|
||||||
+ memcpy(buf->indexPtr, idx, nmax * sizeof(*buf->indexPtr));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
buf->iMax = nmax * 2;
|
|
||||||
- setStrIndexPtr(buf, realloc(buf->indexPtr, buf->iMax * sizeof(long)));
|
|
||||||
+ setStrIndexPtr(buf, realloc(buf->indexPtr, buf->iMax * sizeof(*buf->indexPtr)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
buf->iMax = 16;
|
|
||||||
- setStrIndexPtr(buf, malloc(buf->iMax * sizeof(long)));
|
|
||||||
+ setStrIndexPtr(buf, malloc(buf->iMax * sizeof(*buf->indexPtr)));
|
|
||||||
}
|
|
||||||
hdr->flags |= HDR_Rebuild;
|
|
||||||
}
|
|
||||||
@@ -289,7 +289,7 @@ static long addClArray(ClObjectHdr * hdr
|
|
||||||
buf->bMax = nmax;
|
|
||||||
buf->bUsed = buf->iUsed = 0;
|
|
||||||
buf->iMax = 16;
|
|
||||||
- setArrayIndexPtr(buf, malloc(sizeof(long) * 16));
|
|
||||||
+ setArrayIndexPtr(buf, malloc(sizeof(*buf->indexPtr) * 16));
|
|
||||||
hdr->flags |= HDR_Rebuild;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -303,17 +303,17 @@ static long addClArray(ClObjectHdr * hdr
|
|
||||||
if (!isMallocedArrayIndex(buf)) {
|
|
||||||
void *idx = buf->indexPtr;
|
|
||||||
buf->iMax = nmax * 2;
|
|
||||||
- setArrayIndexPtr(buf, malloc(buf->iMax * sizeof(long)));
|
|
||||||
- memcpy(buf->indexPtr, idx, nmax * sizeof(long));
|
|
||||||
+ setArrayIndexPtr(buf, malloc(buf->iMax * sizeof(*buf->indexPtr)));
|
|
||||||
+ memcpy(buf->indexPtr, idx, nmax * sizeof(*buf->indexPtr));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
buf->iMax = nmax * 2;
|
|
||||||
- setArrayIndexPtr(buf, realloc(buf->indexPtr, buf->iMax * sizeof(long)));
|
|
||||||
+ setArrayIndexPtr(buf, realloc(buf->indexPtr, buf->iMax * sizeof(*buf->indexPtr)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
buf->iMax = 16;
|
|
||||||
- setArrayIndexPtr(buf, malloc(buf->iMax * sizeof(long)));
|
|
||||||
+ setArrayIndexPtr(buf, malloc(buf->iMax * sizeof(*buf->indexPtr)));
|
|
||||||
}
|
|
||||||
hdr->flags |= HDR_Rebuild;
|
|
||||||
}
|
|
@ -1,26 +0,0 @@
|
|||||||
The memcpy below tried to copy too much data (it's capacity of the section * 2,
|
|
||||||
max is doubled few lines above). Let's copy only the used data.
|
|
||||||
|
|
||||||
|
|
||||||
Unrelated observation:
|
|
||||||
|
|
||||||
I wonder what ensureClSpace() function does at all. How can this check
|
|
||||||
be ever true:
|
|
||||||
|
|
||||||
else if (sct->used >= max) {
|
|
||||||
|
|
||||||
'max' is basically sct->max, does that mean the sct->used contains already new
|
|
||||||
size of the section?
|
|
||||||
|
|
||||||
diff -up sblim-sfcb-1.3.16/objectImpl.c.invalid-read2 sblim-sfcb-1.3.16/objectImpl.c
|
|
||||||
--- sblim-sfcb-1.3.16/objectImpl.c.invalid-read2 2013-04-19 14:42:52.000000000 +0200
|
|
||||||
+++ sblim-sfcb-1.3.16/objectImpl.c 2013-04-19 14:43:23.039536156 +0200
|
|
||||||
@@ -168,7 +168,7 @@ static void *ensureClSpace(ClObjectHdr *
|
|
||||||
void *f,*t;
|
|
||||||
f=((char*)hdr)+sct->sectionOffset;
|
|
||||||
t=malloc(max*size);
|
|
||||||
- memcpy(t,f,max*size);
|
|
||||||
+ memcpy(t,f,sct->used*size);
|
|
||||||
sct->max=max;
|
|
||||||
setSectionPtr(sct, t);
|
|
||||||
}
|
|
@ -1,19 +0,0 @@
|
|||||||
diff -up sblim-sfcb-1.3.7/cimcClientSfcbLocal.c.orig sblim-sfcb-1.3.7/cimcClientSfcbLocal.c
|
|
||||||
--- sblim-sfcb-1.3.7/cimcClientSfcbLocal.c.orig 2010-05-11 09:08:17.709465965 +0200
|
|
||||||
+++ sblim-sfcb-1.3.7/cimcClientSfcbLocal.c 2010-05-11 09:11:10.133456342 +0200
|
|
||||||
@@ -209,7 +209,6 @@ static CMPIStatus releaseClient(Client *
|
|
||||||
if (cl->connection) CMRelease(cl->connection);
|
|
||||||
|
|
||||||
free(cl);
|
|
||||||
- closeLogging();
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1618,6 +1617,7 @@ int localConnect(ClientEnv* ce, CMPIStat
|
|
||||||
static void* release(ClientEnv* ce)
|
|
||||||
{
|
|
||||||
void *lib=ce->hdl;
|
|
||||||
+ closeLogging();
|
|
||||||
CONNECT_LOCK();
|
|
||||||
if (localConnectCount > 0) localConnectCount -= 1;
|
|
||||||
if (localConnectCount == 0) {
|
|
BIN
sblim-sfcb-1.4.5-1.fc21.src.rpm
Normal file
BIN
sblim-sfcb-1.4.5-1.fc21.src.rpm
Normal file
Binary file not shown.
27
sblim-sfcb-1.4.5-service.patch
Normal file
27
sblim-sfcb-1.4.5-service.patch
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
diff -up sblim-sfcb-1.4.5/Makefile.in.orig sblim-sfcb-1.4.5/Makefile.in
|
||||||
|
--- sblim-sfcb-1.4.5/Makefile.in.orig 2013-09-03 17:00:52.835375562 +0200
|
||||||
|
+++ sblim-sfcb-1.4.5/Makefile.in 2013-09-03 17:13:40.127512520 +0200
|
||||||
|
@@ -626,7 +626,6 @@ initdir = $(sysconfdir)/init.d
|
||||||
|
pamdir = $(sysconfdir)/pam.d
|
||||||
|
sfcblibdir = $(libdir)/sfcb
|
||||||
|
cmpilibdir = $(libdir)/cmpi
|
||||||
|
-systemddir = $(prefix)/share/systemd
|
||||||
|
MANFILES = man/genSslCert.1 man/getSchema.1 man/sfcbd.1 man/sfcbmof.1 \
|
||||||
|
man/sfcbrepos.1 man/sfcbstage.1 man/sfcbunstage.1 man/sfcbuuid.1 \
|
||||||
|
man/wbemcat.1 man/xmltest.1
|
||||||
|
@@ -2365,7 +2364,6 @@ unittest:
|
||||||
|
cd test && sh check_all.sh
|
||||||
|
|
||||||
|
install-data-local:
|
||||||
|
- if test -d $(systemddir); then cp $(srcdir)/sblim-sfcb.service $(systemddir); fi;
|
||||||
|
test -d $(DESTDIR)$(sfcbstatedir)/registration/repository || $(mkdir_p) $(DESTDIR)$(sfcbstatedir)/registration/repository
|
||||||
|
test -d $(DESTDIR)$(sfcbstatedir)/stage/mofs/root/interop || $(mkdir_p) $(DESTDIR)$(sfcbstatedir)/stage/mofs/root/interop
|
||||||
|
test -d $(DESTDIR)$(sfcbstatedir)/stage/regs || $(mkdir_p) $(DESTDIR)$(sfcbstatedir)/stage/regs
|
||||||
|
@@ -2383,7 +2381,6 @@ install-data-local:
|
||||||
|
uninstall-local:
|
||||||
|
rm -f $(DESTDIR)$(sfcbstatedir)/stage/default.reg
|
||||||
|
rm -f $(DESTDIR)$(sfcbstatedir)/stage/mofs/root/interop/10_interop.mof
|
||||||
|
- rm -f $(systemddir)/sblim-sfcb.service
|
||||||
|
@INDICATIONS_TRUE@ rm -f $(DESTDIR)$(sfcbstatedir)/stage/mofs/root/interop/20_indication.mof
|
||||||
|
@INDICATIONS_TRUE@ rm -f $(DESTDIR)$(sfcbstatedir)/stage/mofs/indication.mof
|
||||||
|
@DOCS_TRUE@ rm -rf $(DESTDIR)$(sfcbdocdir)/html
|
@ -7,8 +7,8 @@
|
|||||||
Name: sblim-sfcb
|
Name: sblim-sfcb
|
||||||
Summary: Small Footprint CIM Broker
|
Summary: Small Footprint CIM Broker
|
||||||
URL: http://sblim.wiki.sourceforge.net/
|
URL: http://sblim.wiki.sourceforge.net/
|
||||||
Version: 1.3.16
|
Version: 1.4.5
|
||||||
Release: 9%{?dist}
|
Release: 1%{?dist}
|
||||||
Group: Applications/System
|
Group: Applications/System
|
||||||
License: EPL
|
License: EPL
|
||||||
Source0: http://downloads.sourceforge.net/sblim/%{name}-%{version}.tar.bz2
|
Source0: http://downloads.sourceforge.net/sblim/%{name}-%{version}.tar.bz2
|
||||||
@ -17,31 +17,18 @@ Source1: sfcb.service
|
|||||||
Source2: sfcbdump.1.gz
|
Source2: sfcbdump.1.gz
|
||||||
Source3: sfcbinst2mof.1.gz
|
Source3: sfcbinst2mof.1.gz
|
||||||
Source4: sfcbtrace.1.gz
|
Source4: sfcbtrace.1.gz
|
||||||
# Patch0: moves log close to correct place
|
# Patch0: changes schema location to the path we use
|
||||||
Patch0: sblim-sfcb-1.3.7-close_logging.patch
|
Patch0: sblim-sfcb-1.3.9-sfcbrepos-schema-location.patch
|
||||||
# Patch1: changes schema location to the path we use
|
# Patch1: Fix provider debugging - variable for stopping wait-for-debugger
|
||||||
Patch1: sblim-sfcb-1.3.9-sfcbrepos-schema-location.patch
|
|
||||||
# Patch2: fixes CMGetCharPtr macro
|
|
||||||
Patch2: sblim-sfcb-1.3.10-CMGetCharPtr.patch
|
|
||||||
# Patch3: adds missing includes
|
|
||||||
Patch3: sblim-sfcb-1.3.14-missing-includes.patch
|
|
||||||
# Patch4: Fix provider debugging - variable for stopping wait-for-debugger
|
|
||||||
# loop must be volatile
|
# loop must be volatile
|
||||||
Patch4: sblim-sfcb-1.3.15-fix-provider-debugging.patch
|
Patch1: sblim-sfcb-1.3.15-fix-provider-debugging.patch
|
||||||
# Patch5-7: already upstream, http://sourceforge.net/p/sblim/sfcb-tix/37/
|
# Patch2: increase default value of maxMsgLen in sfcb.cfg
|
||||||
Patch5: sblim-sfcb-1.3.16-invalid-read.patch
|
Patch2: sblim-sfcb-1.3.16-maxMsgLen.patch
|
||||||
Patch6: sblim-sfcb-1.3.16-invalid-read2.patch
|
# Patch3: we'll install own service file
|
||||||
Patch7: sblim-sfcb-1.3.16-embedded-crash.patch
|
Patch3: sblim-sfcb-1.4.5-service.patch
|
||||||
# Patch8: already upstream, http://sourceforge.net/p/sblim/sfcb-tix/44/
|
|
||||||
Patch8: sblim-sfcb-1.3.16-escape.patch
|
|
||||||
# Patch9: already upstream, http://sourceforge.net/p/sblim/sfcb-tix/49/
|
|
||||||
Patch9: sblim-sfcb-1.3.16-embedded-instance.patch
|
|
||||||
# Patch10: increase default value of maxMsgLen in sfcb.cfg
|
|
||||||
Patch10: sblim-sfcb-1.3.16-maxMsgLen.patch
|
|
||||||
# Patch11: fix CIM clients are sometimes getting HTTP/1.1 501 Not Implemented
|
|
||||||
Patch11: sblim-sfcb-1.3.16-http-header-cmd-check.patch
|
|
||||||
Provides: cim-server
|
Provides: cim-server
|
||||||
Requires: cim-schema
|
Requires: cim-schema
|
||||||
|
Requires: sblim-sfcCommon
|
||||||
BuildRequires: libcurl-devel
|
BuildRequires: libcurl-devel
|
||||||
BuildRequires: zlib-devel
|
BuildRequires: zlib-devel
|
||||||
BuildRequires: openssl-devel
|
BuildRequires: openssl-devel
|
||||||
@ -50,6 +37,7 @@ BuildRequires: cim-schema
|
|||||||
BuildRequires: bison flex
|
BuildRequires: bison flex
|
||||||
BuildRequires: sblim-cmpi-devel
|
BuildRequires: sblim-cmpi-devel
|
||||||
BuildRequires: systemd
|
BuildRequires: systemd
|
||||||
|
BuildRequires: sblim-sfcCommon-devel
|
||||||
Requires(post): systemd-units
|
Requires(post): systemd-units
|
||||||
Requires(preun): systemd-units
|
Requires(preun): systemd-units
|
||||||
Requires(postun): systemd-units
|
Requires(postun): systemd-units
|
||||||
@ -64,18 +52,10 @@ Programming Interface (CMPI).
|
|||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q -T -b 0 -n %{name}-%{version}
|
%setup -q -T -b 0 -n %{name}-%{version}
|
||||||
%patch0 -p1 -b .close_logging
|
%patch0 -p1 -b .sfcbrepos-schema-location
|
||||||
%patch1 -p1 -b .sfcbrepos-schema-location
|
%patch1 -p1 -b .fix-provider-debugging
|
||||||
%patch2 -p1 -b .CMGetCharPtr
|
%patch2 -p1 -b .maxMsgLen
|
||||||
%patch3 -p1 -b .missing-includes
|
%patch3 -p1 -b .service
|
||||||
%patch4 -p1 -b .fix-provider-debugging
|
|
||||||
%patch5 -p1 -b .invalid-read
|
|
||||||
%patch6 -p1 -b .invalid-read2
|
|
||||||
%patch7 -p1 -b .embedded-crash
|
|
||||||
%patch8 -p1 -b .escape
|
|
||||||
%patch9 -p1 -b .embedded-instance
|
|
||||||
%patch10 -p1 -b .maxMsgLen
|
|
||||||
%patch11 -p1 -b .http-header-cmd-check
|
|
||||||
|
|
||||||
%build
|
%build
|
||||||
%configure --enable-debug --enable-uds --enable-ssl --enable-pam --enable-ipv6 CFLAGS="$CFLAGS -D_GNU_SOURCE -fPIE -DPIE" LDFLAGS="$LDFLAGS -Wl,-z,now -pie"
|
%configure --enable-debug --enable-uds --enable-ssl --enable-pam --enable-ipv6 CFLAGS="$CFLAGS -D_GNU_SOURCE -fPIE -DPIE" LDFLAGS="$LDFLAGS -Wl,-z,now -pie"
|
||||||
@ -88,8 +68,8 @@ rm $RPM_BUILD_ROOT/%{_sysconfdir}/init.d/sfcb
|
|||||||
mkdir -p $RPM_BUILD_ROOT/%{_unitdir}
|
mkdir -p $RPM_BUILD_ROOT/%{_unitdir}
|
||||||
install -p -m644 %{SOURCE1} $RPM_BUILD_ROOT/%{_unitdir}/sblim-sfcb.service
|
install -p -m644 %{SOURCE1} $RPM_BUILD_ROOT/%{_unitdir}/sblim-sfcb.service
|
||||||
# install man pages
|
# install man pages
|
||||||
mkdir -p %{buildroot}/%{_mandir}/man1/
|
mkdir -p $RPM_BUILD_ROOT/%{_mandir}/man1/
|
||||||
cp %{SOURCE2} %{SOURCE3} %{SOURCE4} %{buildroot}/%{_mandir}/man1/
|
cp %{SOURCE2} %{SOURCE3} %{SOURCE4} $RPM_BUILD_ROOT/%{_mandir}/man1/
|
||||||
# remove unused static libraries and so files
|
# remove unused static libraries and so files
|
||||||
rm -f $RPM_BUILD_ROOT/%{_libdir}/sfcb/*.la
|
rm -f $RPM_BUILD_ROOT/%{_libdir}/sfcb/*.la
|
||||||
|
|
||||||
@ -118,14 +98,14 @@ cat _pkg_list
|
|||||||
%{_datadir}/sfcb/genSslCert.sh %{_sysconfdir}/sfcb &>/dev/null || :
|
%{_datadir}/sfcb/genSslCert.sh %{_sysconfdir}/sfcb &>/dev/null || :
|
||||||
/sbin/ldconfig
|
/sbin/ldconfig
|
||||||
%{_bindir}/sfcbrepos -f
|
%{_bindir}/sfcbrepos -f
|
||||||
%systemd_post sfcb.service
|
%systemd_post sblim-sfcb.service
|
||||||
|
|
||||||
%preun
|
%preun
|
||||||
%systemd_preun sfcb.service
|
%systemd_preun sblim-sfcb.service
|
||||||
|
|
||||||
%postun
|
%postun
|
||||||
/sbin/ldconfig
|
/sbin/ldconfig
|
||||||
%systemd_postun_with_restart sfcb.service
|
%systemd_postun_with_restart sblim-sfcb.service
|
||||||
if [ $1 -eq 0 ]; then
|
if [ $1 -eq 0 ]; then
|
||||||
/usr/sbin/groupdel sfcb > /dev/null 2>&1 || :;
|
/usr/sbin/groupdel sfcb > /dev/null 2>&1 || :;
|
||||||
fi;
|
fi;
|
||||||
@ -133,6 +113,9 @@ fi;
|
|||||||
%files -f _pkg_list
|
%files -f _pkg_list
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Sep 05 2013 Vitezslav Crhonek <vcrhonek@redhat.com> - 1.4.5-1
|
||||||
|
- Update to sblim-sfcb-1.4.5
|
||||||
|
|
||||||
* Tue Aug 13 2013 Vitezslav Crhonek <vcrhonek@redhat.com> - 1.3.16-9
|
* Tue Aug 13 2013 Vitezslav Crhonek <vcrhonek@redhat.com> - 1.3.16-9
|
||||||
- Build require systemd for unitdir macro
|
- Build require systemd for unitdir macro
|
||||||
Resolves: #988777
|
Resolves: #988777
|
||||||
|
Loading…
Reference in New Issue
Block a user