* audit_pipe_submit_user(): the same as audit_pipe_submit(), except that * since we don't currently have selection information available, it is * delivered to the pipe unconditionally. * * XXXRW: This is a bug. The BSM check routine for submitting a user record * should parse that information and return it. */
| 538 | * should parse that information and return it. |
| 539 | */ |
| 540 | void |
| 541 | audit_pipe_submit_user(void *record, u_int record_len) |
| 542 | { |
| 543 | struct audit_pipe *ap; |
| 544 | |
| 545 | /* |
| 546 | * Lockless read to avoid lock overhead if pipes are not in use. |
| 547 | */ |
| 548 | if (TAILQ_FIRST(&audit_pipe_list) == NULL) |
| 549 | return; |
| 550 | |
| 551 | AUDIT_PIPE_LIST_RLOCK(); |
| 552 | TAILQ_FOREACH(ap, &audit_pipe_list, ap_list) { |
| 553 | AUDIT_PIPE_LOCK(ap); |
| 554 | audit_pipe_append(ap, record, record_len); |
| 555 | AUDIT_PIPE_UNLOCK(ap); |
| 556 | } |
| 557 | AUDIT_PIPE_LIST_RUNLOCK(); |
| 558 | |
| 559 | /* Unlocked increment. */ |
| 560 | audit_pipe_records++; |
| 561 | } |
| 562 | |
| 563 | /* |
| 564 | * Allocate a new audit pipe. Connects the pipe, on success, to the global |
no test coverage detected