~ubuntu-branches/ubuntu/trusty/sblim-sfcb/trusty-proposed

« back to all changes in this revision

Viewing changes to cimXmlRequest.c

  • Committer: Bazaar Package Importer
  • Author(s): Thierry Carrez
  • Date: 2009-06-08 12:04:49 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20090608120449-byfplk09rqz8rtg6
Tags: 1.3.3-0ubuntu1
* New upstream release.
* debian/rules: Removed rpath hacks, SFCB default build handles that now.
* Removed 1934753-remove-assignment.diff, now upstream.
* Refreshed patch cim-schema-location.diff

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
 
2
2
/*
3
 
 * $Id: cimXmlRequest.c,v 1.48 2008/01/30 22:20:26 buccella Exp $
 
3
 * $Id: cimXmlRequest.c,v 1.52 2008/12/18 21:34:33 mchasal Exp $
4
4
 *
5
5
 * © Copyright IBM Corp. 2005, 2007
6
6
 *
51
51
#define SFCB_ASM(x)
52
52
#endif
53
53
 
 
54
#ifdef LOCAL_CONNECT_ONLY_ENABLE
 
55
// from httpAdapter.c
 
56
int noChunking = 0;
 
57
#endif // LOCAL_CONNECT_ONLY_ENABLE
 
58
 
54
59
typedef struct handler {
55
60
   RespSegments(*handler) (CimXmlRequestContext *, RequestHdr * hdr);
56
61
} Handler;
266
271
   return sb;
267
272
}
268
273
 
 
274
static char* xsnprintf(const char* fmt, ...)
 
275
{
 
276
    va_list ap;
 
277
    int len;
 
278
    va_start(ap, fmt);
 
279
    len = vsnprintf(NULL, 0, fmt, ap);
 
280
    va_end(ap);
 
281
    if (len <= 0)
 
282
    {
 
283
        return NULL;
 
284
    }
 
285
    char* str = (char*)malloc(len+1);
 
286
    if (str == NULL)
 
287
    {
 
288
        return NULL;
 
289
    }
 
290
    va_start(ap, fmt);
 
291
    vsnprintf(str, len+1, fmt, ap);
 
292
    va_end(ap);
 
293
    return str;
 
294
}
 
295
 
 
296
 
269
297
static char *getErrSegment(int rc, char *m)
270
298
{
271
 
   char msg[1024];
 
299
   char *msg;
272
300
   char *escapedMsg;
273
301
   
274
302
   if (m && *m) {
275
303
     escapedMsg = XMLEscape(m, NULL);
276
 
       snprintf(msg, sizeof(msg), "<ERROR CODE=\"%d\" DESCRIPTION=\"%s\"/>\n",
 
304
       msg = xsnprintf("<ERROR CODE=\"%d\" DESCRIPTION=\"%s\"/>\n",
277
305
                rc, escapedMsg);
278
306
       free(escapedMsg);
279
307
   }
280
308
   else if (rc > 0 && rc < 18) {
281
 
       snprintf(msg, sizeof(msg), "<ERROR CODE=\"%d\" DESCRIPTION=\"%s\"/>\n",
 
309
       msg = xsnprintf("<ERROR CODE=\"%d\" DESCRIPTION=\"%s\"/>\n",
282
310
                rc, cimMsg[rc]);
283
311
   }
284
312
   else  {
285
 
       snprintf(msg, sizeof(msg), "<ERROR CODE=\"%d\"/>\n", rc);
 
313
       msg = xsnprintf("<ERROR CODE=\"%d\"/>\n", rc);
286
314
   }
287
 
   return strdup(msg);
 
315
   return msg; 
288
316
}
289
317
/*
290
318
static char *getErrorSegment(CMPIStatus rc)
297
325
*/
298
326
char *getErrTrailer(int id, int rc, char *m)
299
327
{
300
 
   char msg[1024];
 
328
   char *msg;
301
329
   
302
 
   if (m && *m) snprintf(msg, sizeof(msg), "CIMStatusCodeDescription: %s\r\n",m);
 
330
   if (m && *m) msg = xsnprintf("CIMStatusCodeDescription: %s\r\n",m);
303
331
   else if (rc > 0 && rc < 18)
304
 
      snprintf(msg, sizeof(msg), "CIMStatusCodeDescription: %s\r\n",cimMsg[rc]);
305
 
   else snprintf(msg, sizeof(msg), "CIMStatusCodeDescription: *Unknown*\r\n");
306
 
   return strdup(msg);
 
332
      msg = xsnprintf("CIMStatusCodeDescription: %s\r\n",cimMsg[rc]);
 
333
   else msg = strdup("CIMStatusCodeDescription: *Unknown*\r\n");
 
334
   return msg; 
307
335
}
308
336
 
309
337
 
347
375
{
348
376
   MsgXctl *xd = ctx->ctlXdata;
349
377
   char msg[256];
 
378
   CMPIrc err;
350
379
 
351
380
   switch (ctx->rc) {
352
381
   case MSG_X_NOT_SUPPORTED:
353
382
      hdr->errMsg = strdup("Operation not supported yy");
 
383
      err = CMPI_RC_ERR_NOT_SUPPORTED;
354
384
      break;
355
385
   case MSG_X_INVALID_CLASS:
356
386
      hdr->errMsg = strdup("Class not found");
 
387
      err = CMPI_RC_ERR_INVALID_CLASS;
357
388
      break;
358
389
   case MSG_X_INVALID_NAMESPACE:
359
390
      hdr->errMsg = strdup("Invalid namespace");
 
391
      err = CMPI_RC_ERR_INVALID_NAMESPACE;
360
392
      break;
361
393
   case MSG_X_PROVIDER_NOT_FOUND:
362
394
      hdr->errMsg = strdup("Provider not found or not loadable");
 
395
      err = CMPI_RC_ERR_NOT_FOUND;
363
396
      break;
364
397
   case MSG_X_FAILED:
365
398
      hdr->errMsg = strdup(xd->data);
 
399
      err = CMPI_RC_ERR_FAILED; 
366
400
      break;
367
401
   default:
368
402
      sprintf(msg, "Internal error - %d\n", ctx->rc);
369
403
      hdr->errMsg = strdup(msg);
 
404
      err = CMPI_RC_ERR_FAILED;
370
405
   }
371
406
   if (meth) return
372
 
      methodErrResponse(hdr,getErrSegment(CMPI_RC_ERR_INVALID_CLASS,hdr->errMsg));
 
407
      methodErrResponse(hdr,getErrSegment(err,hdr->errMsg));
373
408
   return
374
 
      iMethodErrResponse(hdr,getErrSegment(CMPI_RC_ERR_INVALID_CLASS,hdr->errMsg));
 
409
      iMethodErrResponse(hdr,getErrSegment(err,hdr->errMsg));
375
410
};
376
411
 
377
412
 
744
779
   CMPIObjectPath *path;
745
780
   CMPIConstClass cls;
746
781
   ClClass *cl;
 
782
   ClClass *tmp;
747
783
   int irc;
748
784
   BinRequestContext binCtx;
749
785
   BinResponseHdr *resp;
857
893
      }
858
894
   }
859
895
   
 
896
   tmp = cl;
860
897
   cl = ClClassRebuildClass(cl,NULL); 
 
898
   free(tmp);
861
899
   cls=initConstClass(cl);
862
900
 
863
901
   sreq.principal = setCharsMsgSegment(ctx->principal);