diff options
author | Ashlee Young <ashlee@wildernessvoice.com> | 2015-11-29 08:22:13 -0800 |
---|---|---|
committer | Ashlee Young <ashlee@wildernessvoice.com> | 2015-11-29 08:22:13 -0800 |
commit | df5afa4fcd9725380f94ca6476248d4cc24f889a (patch) | |
tree | 65456f62397305febf7f40778c5a413a35d094ef /framework/src/audit/bindings/golang | |
parent | 76f6bf922552c00546e6e85ca471eab28f56986c (diff) |
v2.4.4 audit sources
Change-Id: I9315a7408817db51edf084fb4d27fbb492785084
Signed-off-by: Ashlee Young <ashlee@wildernessvoice.com>
Diffstat (limited to 'framework/src/audit/bindings/golang')
-rw-r--r-- | framework/src/audit/bindings/golang/Makefile.am | 45 | ||||
-rw-r--r-- | framework/src/audit/bindings/golang/audit.go | 72 | ||||
-rw-r--r-- | framework/src/audit/bindings/golang/test.go | 18 |
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") +} |