diff --git a/app-transaction.go b/app-transaction.go new file mode 100644 index 0000000..2ddfaaa --- /dev/null +++ b/app-transaction.go @@ -0,0 +1,24 @@ +//go:build !go_pam_module + +package pam + +/* +#include +#include +*/ +import "C" + +import "runtime/cgo" + +// _go_pam_conv_handler is a C wrapper for the conversation callback function. +// +//export _go_pam_conv_handler +func _go_pam_conv_handler(msg *C.struct_pam_message, c C.uintptr_t, outMsg **C.char) C.int { + convHandler, ok := cgo.Handle(c).Value().(ConversationHandler) + if !ok || convHandler == nil { + return C.int(ErrConv) + } + replyMsg, r := pamConvHandler(Style(msg.msg_style), msg.msg, convHandler) + *outMsg = replyMsg + return r +} diff --git a/cmd/pam-moduler/moduler.go b/cmd/pam-moduler/moduler.go index b95195d..94298dc 100644 --- a/cmd/pam-moduler/moduler.go +++ b/cmd/pam-moduler/moduler.go @@ -119,9 +119,9 @@ func main() { tags = *buildTags } - var generateTags []string + generateTags := []string{"go_pam_module"} if len(*moduleBuildTags) > 0 { - generateTags = strings.Split(*moduleBuildTags, ",") + generateTags = append(generateTags, strings.Split(*moduleBuildTags, ",")...) } var buildFlags []string diff --git a/example-module/pam_module.go b/example-module/pam_module.go index b3bfb08..b13924e 100644 --- a/example-module/pam_module.go +++ b/example-module/pam_module.go @@ -1,6 +1,6 @@ // Code generated by "pam-moduler "; DO NOT EDIT. -//go:generate go build "-ldflags=-extldflags -Wl,-soname,pam_go.so" -buildmode=c-shared -o pam_go.so +//go:generate go build "-ldflags=-extldflags -Wl,-soname,pam_go.so" -buildmode=c-shared -o pam_go.so -tags go_pam_module // Package main is the package for the PAM module library. package main diff --git a/transaction.go b/transaction.go index 9dba072..600f0cf 100644 --- a/transaction.go +++ b/transaction.go @@ -75,19 +75,6 @@ func (f ConversationFunc) RespondPAM(s Style, msg string) (string, error) { return f(s, msg) } -// _go_pam_conv_handler is a C wrapper for the conversation callback function. -// -//export _go_pam_conv_handler -func _go_pam_conv_handler(msg *C.struct_pam_message, c C.uintptr_t, outMsg **C.char) C.int { - convHandler, ok := cgo.Handle(c).Value().(ConversationHandler) - if !ok || convHandler == nil { - return C.int(ErrConv) - } - replyMsg, r := pamConvHandler(Style(msg.msg_style), msg.msg, convHandler) - *outMsg = replyMsg - return r -} - // pamConvHandler is a Go wrapper for the conversation callback function. func pamConvHandler(style Style, msg *C.char, handler ConversationHandler) (*C.char, C.int) { var r string