in audit.go [123:161]
func (c *AuditClient) GetStatus() (*AuditStatus, error) {
// Send AUDIT_GET message to the kernel.
seq, err := c.GetStatusAsync(true)
if err != nil {
return nil, fmt.Errorf("failed sending request: %w", err)
}
// Get the ack message which is a NLMSG_ERROR type whose error code is SUCCESS.
ack, err := c.getReply(seq)
if err != nil {
return nil, fmt.Errorf("failed to get audit status ack: %w", err)
}
if ack.Header.Type != syscall.NLMSG_ERROR {
return nil, fmt.Errorf("unexpected ACK to GET, got type=%d", ack.Header.Type)
}
if err = ParseNetlinkError(ack.Data); err != nil {
return nil, err
}
// Get the audit_status reply message. It has the same sequence number as
// our original request.
reply, err := c.getReply(seq)
if err != nil {
return nil, fmt.Errorf("failed to get audit status reply: %w", err)
}
if reply.Header.Type != AuditGet {
return nil, fmt.Errorf("unexpected reply to GET, got type=%d", reply.Header.Type)
}
replyStatus := &AuditStatus{}
if err := replyStatus.FromWireFormat(reply.Data); err != nil {
return nil, fmt.Errorf("failed to unmarshal reply: %w", err)
}
return replyStatus, nil
}