func()

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
}