270 (void) nvlist_remove(attr, "__fmev_execname", DATA_TYPE_STRING);
271 }
272
273 if (nvlist_lookup_int32(attr, "__fmev_pid", &i32) == 0) {
274 err += nvlist_add_int32(ctxt, FM_FMRI_SW_CTXT_PID, i32);
275 (void) nvlist_remove(attr, "__fmev_pid", DATA_TYPE_INT32);
276 }
277
278 if (!isglobalzone)
279 err += nvlist_add_string(ctxt, FM_FMRI_SW_CTXT_ZONE, zonename);
280
281 /* Put it all together */
282
283 err += nvlist_add_uint8(dtcr, FM_VERSION, SW_SCHEME_VERSION0);
284 err += nvlist_add_string(dtcr, FM_FMRI_SCHEME, FM_FMRI_SCHEME_SW);
285 err += nvlist_add_nvlist(dtcr, FM_FMRI_SW_OBJ, obj);
286 err += nvlist_add_nvlist(dtcr, FM_FMRI_SW_SITE, site);
287 err += nvlist_add_nvlist(dtcr, FM_FMRI_SW_CTXT, ctxt);
288
289 done:
290 if (obj != NULL)
291 nvlist_free(obj);
292 if (site != NULL)
293 nvlist_free(site);
294 if (ctxt != NULL)
295 nvlist_free(ctxt);
296
297 if (err == 0) {
298 return (dtcr);
299 } else {
300 nvlist_free(dtcr);
301 return (NULL);
302 }
303 }
304
305 static int
306 class_ok(char *class)
307 {
308 static const char *approved[] = {
309 FM_IREPORT_CLASS ".",
310 FM_EREPORT_CLASS "."
311 };
312
313 int i;
314
539 ea.pp_rawclass = rawclass;
540 ea.pp_rawsubclass = rawsubclass;
541 sysevent_get_time(sep, &ea.pp_hrt);
542 ea.pp_user = user;
543 ea.pp_priv = priv;
544 ea.pp_pri = pri;
545
546 fmevt_postprocess(ruleset, dtcr, rawattr, &ea);
547 nvlist_free(dtcr);
548 done:
549 (void) pthread_mutex_lock(&fmevt_lock);
550
551 if (--fmevt_xprt_refcnt == 0 && fmevt_exiting)
552 (void) pthread_cond_broadcast(&fmevt_cv);
553
554 (void) pthread_mutex_unlock(&fmevt_lock);
555
556 if (ruleset)
557 free(ruleset);
558
559 if (rawattr)
560 nvlist_free(rawattr);
561
562 return (0); /* in all cases consider the event delivered */
563 }
564
565 void
566 fmevt_init_inbound(fmd_hdl_t *hdl)
567 {
568 char *sidpfx;
569 zoneid_t zoneid;
570 int i;
571
572 if (!fmevt_rs_init(hdl))
573 fmd_hdl_abort(hdl, "error in fmevt_rs_init\n");
574
575 (void) fmd_stat_create(hdl, FMD_STAT_NOALLOC, sizeof (inbound_stats) /
576 sizeof (fmd_stat_t), (fmd_stat_t *)&inbound_stats);
577
578 zoneid = getzoneid();
579 isglobalzone = (zoneid == GLOBAL_ZONEID);
|
270 (void) nvlist_remove(attr, "__fmev_execname", DATA_TYPE_STRING);
271 }
272
273 if (nvlist_lookup_int32(attr, "__fmev_pid", &i32) == 0) {
274 err += nvlist_add_int32(ctxt, FM_FMRI_SW_CTXT_PID, i32);
275 (void) nvlist_remove(attr, "__fmev_pid", DATA_TYPE_INT32);
276 }
277
278 if (!isglobalzone)
279 err += nvlist_add_string(ctxt, FM_FMRI_SW_CTXT_ZONE, zonename);
280
281 /* Put it all together */
282
283 err += nvlist_add_uint8(dtcr, FM_VERSION, SW_SCHEME_VERSION0);
284 err += nvlist_add_string(dtcr, FM_FMRI_SCHEME, FM_FMRI_SCHEME_SW);
285 err += nvlist_add_nvlist(dtcr, FM_FMRI_SW_OBJ, obj);
286 err += nvlist_add_nvlist(dtcr, FM_FMRI_SW_SITE, site);
287 err += nvlist_add_nvlist(dtcr, FM_FMRI_SW_CTXT, ctxt);
288
289 done:
290 nvlist_free(obj);
291 nvlist_free(site);
292 nvlist_free(ctxt);
293
294 if (err == 0) {
295 return (dtcr);
296 } else {
297 nvlist_free(dtcr);
298 return (NULL);
299 }
300 }
301
302 static int
303 class_ok(char *class)
304 {
305 static const char *approved[] = {
306 FM_IREPORT_CLASS ".",
307 FM_EREPORT_CLASS "."
308 };
309
310 int i;
311
536 ea.pp_rawclass = rawclass;
537 ea.pp_rawsubclass = rawsubclass;
538 sysevent_get_time(sep, &ea.pp_hrt);
539 ea.pp_user = user;
540 ea.pp_priv = priv;
541 ea.pp_pri = pri;
542
543 fmevt_postprocess(ruleset, dtcr, rawattr, &ea);
544 nvlist_free(dtcr);
545 done:
546 (void) pthread_mutex_lock(&fmevt_lock);
547
548 if (--fmevt_xprt_refcnt == 0 && fmevt_exiting)
549 (void) pthread_cond_broadcast(&fmevt_cv);
550
551 (void) pthread_mutex_unlock(&fmevt_lock);
552
553 if (ruleset)
554 free(ruleset);
555
556 nvlist_free(rawattr);
557
558 return (0); /* in all cases consider the event delivered */
559 }
560
561 void
562 fmevt_init_inbound(fmd_hdl_t *hdl)
563 {
564 char *sidpfx;
565 zoneid_t zoneid;
566 int i;
567
568 if (!fmevt_rs_init(hdl))
569 fmd_hdl_abort(hdl, "error in fmevt_rs_init\n");
570
571 (void) fmd_stat_create(hdl, FMD_STAT_NOALLOC, sizeof (inbound_stats) /
572 sizeof (fmd_stat_t), (fmd_stat_t *)&inbound_stats);
573
574 zoneid = getzoneid();
575 isglobalzone = (zoneid == GLOBAL_ZONEID);
|