Create missing man pages, Add support for EmbeddedInstance qualifier
This commit is contained in:
parent
68f8046a06
commit
33531250eb
394
sblim-sfcb-1.3.16-embedded-instance.patch
Normal file
394
sblim-sfcb-1.3.16-embedded-instance.patch
Normal file
@ -0,0 +1,394 @@
|
|||||||
|
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;
|
@ -8,10 +8,15 @@ 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.3.16
|
||||||
Release: 3%{?dist}
|
Release: 4%{?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
|
||||||
|
Source1: sfcb.service
|
||||||
|
# Missing man pages
|
||||||
|
Source2: sfcbdump.1.gz
|
||||||
|
Source3: sfcbinst2mof.1.gz
|
||||||
|
Source4: sfcbtrace.1.gz
|
||||||
# Patch0: moves log close to correct place
|
# Patch0: moves log close to correct place
|
||||||
Patch0: sblim-sfcb-1.3.7-close_logging.patch
|
Patch0: sblim-sfcb-1.3.7-close_logging.patch
|
||||||
# Patch1: changes schema location to the path we use
|
# Patch1: changes schema location to the path we use
|
||||||
@ -29,7 +34,8 @@ Patch6: sblim-sfcb-1.3.16-invalid-read2.patch
|
|||||||
Patch7: sblim-sfcb-1.3.16-embedded-crash.patch
|
Patch7: sblim-sfcb-1.3.16-embedded-crash.patch
|
||||||
# Patch8: already upstream, http://sourceforge.net/p/sblim/sfcb-tix/44/
|
# Patch8: already upstream, http://sourceforge.net/p/sblim/sfcb-tix/44/
|
||||||
Patch8: sblim-sfcb-1.3.16-escape.patch
|
Patch8: sblim-sfcb-1.3.16-escape.patch
|
||||||
Source1: sfcb.service
|
# Patch9: already upstream, http://sourceforge.net/p/sblim/sfcb-tix/49/
|
||||||
|
Patch9: sblim-sfcb-1.3.16-embedded-instance.patch
|
||||||
Provides: cim-server
|
Provides: cim-server
|
||||||
Requires: cim-schema
|
Requires: cim-schema
|
||||||
BuildRequires: libcurl-devel
|
BuildRequires: libcurl-devel
|
||||||
@ -62,6 +68,7 @@ Programming Interface (CMPI).
|
|||||||
%patch6 -p1 -b .invalid-read2
|
%patch6 -p1 -b .invalid-read2
|
||||||
%patch7 -p1 -b .embedded-crash
|
%patch7 -p1 -b .embedded-crash
|
||||||
%patch8 -p1 -b .escape
|
%patch8 -p1 -b .escape
|
||||||
|
%patch9 -p1 -b .orig
|
||||||
|
|
||||||
%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"
|
||||||
@ -73,6 +80,9 @@ make DESTDIR=$RPM_BUILD_ROOT install
|
|||||||
rm $RPM_BUILD_ROOT/%{_sysconfdir}/init.d/sfcb
|
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
|
||||||
|
mkdir -p %{buildroot}/%{_mandir}/man1/
|
||||||
|
cp %{SOURCE2} %{SOURCE3} %{SOURCE4} %{buildroot}/%{_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
|
||||||
|
|
||||||
@ -116,6 +126,11 @@ fi;
|
|||||||
%files -f _pkg_list
|
%files -f _pkg_list
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Jun 17 2013 Vitezslav Crhonek <vcrhonek@redhat.com> - 1.3.16-4
|
||||||
|
- Create missing man pages
|
||||||
|
- Add support for EmbeddedInstance qualifier
|
||||||
|
Resolves: #919377
|
||||||
|
|
||||||
* Mon May 20 2013 Vitezslav Crhonek <vcrhonek@redhat.com> - 1.3.16-3
|
* Mon May 20 2013 Vitezslav Crhonek <vcrhonek@redhat.com> - 1.3.16-3
|
||||||
- Fix indCIMXmlHandler crash in IndCIMXMLHandlerInvokeMethod with Embedded Instances
|
- Fix indCIMXmlHandler crash in IndCIMXMLHandlerInvokeMethod with Embedded Instances
|
||||||
Resolves: #957747
|
Resolves: #957747
|
||||||
|
BIN
sfcbdump.1.gz
Normal file
BIN
sfcbdump.1.gz
Normal file
Binary file not shown.
BIN
sfcbinst2mof.1.gz
Normal file
BIN
sfcbinst2mof.1.gz
Normal file
Binary file not shown.
BIN
sfcbtrace.1.gz
Normal file
BIN
sfcbtrace.1.gz
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user