summaryrefslogtreecommitdiffstats
path: root/framework/src/audit/bindings/golang
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/audit/bindings/golang')
-rw-r--r--framework/src/audit/bindings/golang/Makefile.am45
-rw-r--r--framework/src/audit/bindings/golang/audit.go72
-rw-r--r--framework/src/audit/bindings/golang/test.go18
3 files changed, 135 insertions, 0 deletions
diff --git a/framework/src/audit/bindings/golang/Makefile.am b/framework/src/audit/bindings/golang/Makefile.am
new file mode 100644
index 00000000..4332b8cb
--- /dev/null
+++ b/framework/src/audit/bindings/golang/Makefile.am
@@ -0,0 +1,45 @@
+# Makefile.am --
+# Copyright 2014 Red Hat Inc., Durham, North Carolina.
+# All Rights Reserved.
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# Authors:
+# Steve Grubb <sgrubb@redhat.com>
+#
+
+CONFIG_CLEAN_FILES = *.loT *.rej *.orig
+EXTRA_DIST = audit.go
+
+LIBDIR = lib
+GODIR = $(LIBDIR)/golang/src/pkg/redhat.com/audit
+dist_check_SCRIPTS = test.go
+
+install:
+ [ -d $(DESTDIR)${prefix}/$(GODIR) ] || mkdir -p $(DESTDIR)${prefix}/$(GODIR)
+ install -m 644 ${top_srcdir}/bindings/golang/audit.go $(DESTDIR)${prefix}/$(GODIR)
+
+uninstall:
+ @rm -f $(DESTDIR)${prefix}/$(GODIR)/*
+
+check:
+ @mkdir audit
+ @cp ${top_srcdir}/bindings/golang/audit.go audit
+ @cp ${top_srcdir}/lib/libaudit.h audit
+ ## Disable for now. Golang doesn't allow overriding search
+ ## paths from the command line.
+ ##[ -f test.go ] || cp ${top_srcdir}/bindings/golang/test.go .
+ ##PKG_CONFIG_PATH=${abs_top_builddir}/lib/:$(PKG_CONFIG_PATH) GOPATH=$(pwd) $(GOLANG) run test.go
+ @rm -rf audit
diff --git a/framework/src/audit/bindings/golang/audit.go b/framework/src/audit/bindings/golang/audit.go
new file mode 100644
index 00000000..d060ddcb
--- /dev/null
+++ b/framework/src/audit/bindings/golang/audit.go
@@ -0,0 +1,72 @@
+package audit
+
+/*
+ The audit package is a go bindings to libaudit that only allows for
+ logging audit events.
+
+ Author Steve Grubb <sgrubb@redhat.com>
+
+*/
+
+// #cgo pkg-config: audit
+// #include "libaudit.h"
+// #include <unistd.h>
+// #include <stdlib.h>
+// #include <string.h>
+// #include <stdio.h>
+import "C"
+
+import (
+ "unsafe"
+)
+
+const (
+ AUDIT_VIRT_CONTROL = 2500
+ AUDIT_VIRT_RESOURCE = 2501
+ AUDIT_VIRT_MACHINE_ID = 2502
+)
+
+// type=VIRT_CONTROL msg=audit(08/05/2014 17:01:05.891:6471) : pid=1265 uid=root auid=unset ses=unset subj=system_u:system_r:virtd_t:s0-s0:c0.c1023 msg='virt=kvm op=start reason=booted vm=vm1 uuid=462dcd6d-fb68-4a26-a96f-56eb024515b9 vm-pid=22527 exe=/usr/sbin/libvirtd hostname=? addr=? terminal=? res=success'
+
+func AuditValueNeedsEncoding(str string) bool {
+ cstr := C.CString(str)
+ defer C.free(unsafe.Pointer(cstr))
+ len := C.strlen(cstr)
+
+ res, _ := C.audit_value_needs_encoding(cstr, C.uint(len))
+ if res != 0 {
+ return true
+ }
+ return false
+}
+
+func AuditEncodeNVString(name string, value string) string {
+ cname := C.CString(name)
+ cval := C.CString(value)
+
+ cres := C.audit_encode_nv_string(cname, cval, 0)
+
+ C.free(unsafe.Pointer(cname))
+ C.free(unsafe.Pointer(cval))
+ defer C.free(unsafe.Pointer(cres))
+
+ return C.GoString(cres)
+}
+
+func AuditLogUserEvent(event_type int, message string, result bool) error {
+ var r int
+ fd := C.audit_open()
+ if result {
+ r = 1
+ } else {
+ r = 0
+ }
+ if fd > 0 {
+ cmsg := C.CString(message)
+ _, err := C.audit_log_user_message(fd, C.int(event_type), cmsg, nil, nil, nil, C.int(r))
+ C.free(unsafe.Pointer(cmsg))
+ C.close(fd)
+ return err
+ }
+ return nil
+}
diff --git a/framework/src/audit/bindings/golang/test.go b/framework/src/audit/bindings/golang/test.go
new file mode 100644
index 00000000..7d9ab7ee
--- /dev/null
+++ b/framework/src/audit/bindings/golang/test.go
@@ -0,0 +1,18 @@
+package main
+
+import (
+ "./audit"
+ "fmt"
+)
+
+func main() {
+ if audit.AuditValueNeedsEncoding("test") {
+ fmt.Printf("Failed test 1\n")
+ return
+ }
+ if !audit.AuditValueNeedsEncoding("test test") {
+ fmt.Printf("Failed test 2\n")
+ return
+ }
+ fmt.Printf("Success\n")
+}