diff --git a/goutmp.go b/goutmp.go index 8f93293..230f6bd 100644 --- a/goutmp.go +++ b/goutmp.go @@ -78,6 +78,7 @@ import "C" import ( "fmt" + "log" "net" "os/user" "strings" @@ -86,46 +87,51 @@ import ( // UtmpEntry wraps the C struct utmp type UtmpEntry struct { - entry C.struct_utmp + entry C.struct_utmp } // return remote client hostname or IP if host lookup fails +// addr is expected to be of the format given by net.Addr.String() +// eg., "127.0.0.1:80" or "[::1]:80" func GetHost(addr string) (h string) { - // Strip off the port after IP addr - hList, e := net.LookupAddr(strings.Split(addr,":")[0]) - fmt.Printf("lookupAddr:%v\n", hList) - if e != nil { - h = strings.Split(addr,":")[0] + if !strings.Contains(addr, "[") { + h = strings.Split(addr, ":")[0] } else { + h = strings.Split(strings.Split(addr, "[")[1], "]")[0] + } + hList, e := net.LookupAddr(h) + //fmt.Printf("lookupAddr:%v\n", hList) + if e == nil { h = hList[0] } return } // Put a username and the originating host/IP to utmp -func Put_utmp(user string, host string) (UtmpEntry) { - var entry UtmpEntry +func Put_utmp(user string, host string) UtmpEntry { + var entry UtmpEntry - C.pututmp(&entry.entry, C.CString(user), C.CString(host)) - return entry + log.Println("Put_utmp:host ", host, " user ", user) + C.pututmp(&entry.entry, C.CString(user), C.CString(host)) + return entry } // Remove a username/host entry from utmp func Unput_utmp(entry UtmpEntry) { - C.unpututmp(&entry.entry) + C.unpututmp(&entry.entry) } // Put the login app, username and originating host/IP to lastlog func Put_lastlog_entry(app string, usr string, host string) { - u, e := user.Lookup(usr) - if e != nil { - return - } - var uid uint32 - fmt.Sscanf(u.Uid, "%d", &uid) + u, e := user.Lookup(usr) + if e != nil { + return + } + var uid uint32 + fmt.Sscanf(u.Uid, "%d", &uid) - t := time.Now().Unix() - _ = C.putlastlogentry(C.int64_t(t), C.int(uid), C.CString(app), C.CString(host)) - //stat := C.putlastlogentry(C.int64_t(t), C.int(uid), C.CString(app), C.CString(host)) - //fmt.Println("stat was:",stat) + t := time.Now().Unix() + _ = C.putlastlogentry(C.int64_t(t), C.int(uid), C.CString(app), C.CString(host)) + //stat := C.putlastlogentry(C.int64_t(t), C.int(uid), C.CString(app), C.CString(host)) + //fmt.Println("stat was:",stat) } diff --git a/main/test.go b/main/test.go index ddcbc7b..6b67001 100644 --- a/main/test.go +++ b/main/test.go @@ -1,8 +1,9 @@ package main import ( - "blitter.com/go/goutmp" "time" + + "blitter.com/go/goutmp" ) func main() {