-
Notifications
You must be signed in to change notification settings - Fork 36
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #15 from 3v1n0/safer-transaction
Safer transaction: add End() method and don't use as error
- Loading branch information
Showing
5 changed files
with
549 additions
and
97 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
on: [push, pull_request] | ||
name: Lint | ||
|
||
permissions: | ||
contents: read | ||
|
||
jobs: | ||
golangci: | ||
name: lint | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/checkout@v3 | ||
- uses: actions/setup-go@v4 | ||
with: | ||
go-version: '1.21' | ||
cache: false | ||
- name: Install PAM | ||
run: sudo apt install -y libpam-dev | ||
- name: golangci-lint | ||
uses: golangci/golangci-lint-action@v3 | ||
with: | ||
version: v1.54 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
# This is for linting. To run it, please use: | ||
# golangci-lint run ${MODULE}/... [--fix] | ||
|
||
linters: | ||
# linters to run in addition to default ones | ||
enable: | ||
- dupl | ||
- durationcheck | ||
- errname | ||
- errorlint | ||
- exportloopref | ||
- forbidigo | ||
- forcetypeassert | ||
- gci | ||
- godot | ||
- gofmt | ||
- gosec | ||
- misspell | ||
- nakedret | ||
- nolintlint | ||
- revive | ||
- thelper | ||
- tparallel | ||
- unconvert | ||
- unparam | ||
- whitespace | ||
|
||
run: | ||
timeout: 5m | ||
|
||
# Get all linter issues, even if duplicated | ||
issues: | ||
exclude-use-default: false | ||
max-issues-per-linter: 0 | ||
max-same-issues: 0 | ||
fix: false # we don’t want this in CI | ||
exclude: | ||
# EXC0001 errcheck: most errors are in defer calls, which are safe to ignore and idiomatic Go (would be good to only ignore defer ones though) | ||
- 'Error return value of .((os\.)?std(out|err)\..*|.*Close|.*Flush|os\.Remove(All)?|.*print(f|ln)?|os\.(Un)?Setenv|w\.Stop). is not checked' | ||
# EXC0008 gosec: duplicated of errcheck | ||
- (G104|G307) | ||
# EXC0010 gosec: False positive is triggered by 'src, err := ioutil.ReadFile(filename)' | ||
- Potential file inclusion via variable | ||
# We want named parameters even if unused, as they help better document the function | ||
- unused-parameter | ||
# Sometimes it is more readable it do a `if err:=a(); err != nil` tha simpy `return a()` | ||
- if-return | ||
|
||
nolintlint: | ||
require-explanation: true | ||
require-specific: true | ||
|
||
linters-settings: | ||
# Forbid the usage of deprecated ioutil and debug prints | ||
forbidigo: | ||
forbid: | ||
- ioutil\. | ||
- ^print.*$ | ||
# Never have naked return ever | ||
nakedret: | ||
max-func-lines: 1 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,94 @@ | ||
package pam | ||
|
||
/* | ||
#include <security/pam_appl.h> | ||
*/ | ||
import "C" | ||
|
||
// Error is the Type for PAM Return types | ||
type Error int | ||
|
||
// Pam Return types | ||
const ( | ||
// OpenErr indicates a dlopen() failure when dynamically loading a | ||
// service module. | ||
ErrOpen Error = C.PAM_OPEN_ERR | ||
// ErrSymbol indicates a symbol not found. | ||
ErrSymbol Error = C.PAM_SYMBOL_ERR | ||
// ErrService indicates a error in service module. | ||
ErrService Error = C.PAM_SERVICE_ERR | ||
// ErrSystem indicates a system error. | ||
ErrSystem Error = C.PAM_SYSTEM_ERR | ||
// ErrBuf indicates a memory buffer error. | ||
ErrBuf Error = C.PAM_BUF_ERR | ||
// ErrPermDenied indicates a permission denied. | ||
ErrPermDenied Error = C.PAM_PERM_DENIED | ||
// ErrAuth indicates a authentication failure. | ||
ErrAuth Error = C.PAM_AUTH_ERR | ||
// ErrCredInsufficient indicates a can not access authentication data due to | ||
// insufficient credentials. | ||
ErrCredInsufficient Error = C.PAM_CRED_INSUFFICIENT | ||
// ErrAuthinfoUnavail indicates that the underlying authentication service | ||
// can not retrieve authentication information. | ||
ErrAuthinfoUnavail Error = C.PAM_AUTHINFO_UNAVAIL | ||
// ErrUserUnknown indicates a user not known to the underlying authentication | ||
// module. | ||
ErrUserUnknown Error = C.PAM_USER_UNKNOWN | ||
// ErrMaxtries indicates that an authentication service has maintained a retry | ||
// count which has been reached. No further retries should be attempted. | ||
ErrMaxtries Error = C.PAM_MAXTRIES | ||
// ErrNewAuthtokReqd indicates a new authentication token required. This is | ||
// normally returned if the machine security policies require that the | ||
// password should be changed because the password is nil or it has aged. | ||
ErrNewAuthtokReqd Error = C.PAM_NEW_AUTHTOK_REQD | ||
// ErrAcctExpired indicates that an user account has expired. | ||
ErrAcctExpired Error = C.PAM_ACCT_EXPIRED | ||
// ErrSession indicates a can not make/remove an entry for the | ||
// specified session. | ||
ErrSession Error = C.PAM_SESSION_ERR | ||
// ErrCredUnavail indicates that an underlying authentication service can not | ||
// retrieve user credentials. | ||
ErrCredUnavail Error = C.PAM_CRED_UNAVAIL | ||
// ErrCredExpired indicates that an user credentials expired. | ||
ErrCredExpired Error = C.PAM_CRED_EXPIRED | ||
// ErrCred indicates a failure setting user credentials. | ||
ErrCred Error = C.PAM_CRED_ERR | ||
// ErrNoModuleData indicates a no module specific data is present. | ||
ErrNoModuleData Error = C.PAM_NO_MODULE_DATA | ||
// ErrConv indicates a conversation error. | ||
ErrConv Error = C.PAM_CONV_ERR | ||
// ErrAuthtokErr indicates an authentication token manipulation error. | ||
ErrAuthtok Error = C.PAM_AUTHTOK_ERR | ||
// ErrAuthtokRecoveryErr indicates an authentication information cannot | ||
// be recovered. | ||
ErrAuthtokRecovery Error = C.PAM_AUTHTOK_RECOVERY_ERR | ||
// ErrAuthtokLockBusy indicates am authentication token lock busy. | ||
ErrAuthtokLockBusy Error = C.PAM_AUTHTOK_LOCK_BUSY | ||
// ErrAuthtokDisableAging indicates an authentication token aging disabled. | ||
ErrAuthtokDisableAging Error = C.PAM_AUTHTOK_DISABLE_AGING | ||
// ErrTryAgain indicates a preliminary check by password service. | ||
ErrTryAgain Error = C.PAM_TRY_AGAIN | ||
// ErrIgnore indicates to ignore underlying account module regardless of | ||
// whether the control flag is required, optional, or sufficient. | ||
ErrIgnore Error = C.PAM_IGNORE | ||
// ErrAbort indicates a critical error (module fail now request). | ||
ErrAbort Error = C.PAM_ABORT | ||
// ErrAuthtokExpired indicates an user's authentication token has expired. | ||
ErrAuthtokExpired Error = C.PAM_AUTHTOK_EXPIRED | ||
// ErrModuleUnknown indicates a module is not known. | ||
ErrModuleUnknown Error = C.PAM_MODULE_UNKNOWN | ||
// ErrBadItem indicates a bad item passed to pam_*_item(). | ||
ErrBadItem Error = C.PAM_BAD_ITEM | ||
// ErrConvAgain indicates a conversation function is event driven and data | ||
// is not available yet. | ||
ErrConvAgain Error = C.PAM_CONV_AGAIN | ||
// ErrIncomplete indicates to please call this function again to complete | ||
// authentication stack. Before calling again, verify that conversation | ||
// is completed. | ||
ErrIncomplete Error = C.PAM_INCOMPLETE | ||
) | ||
|
||
// Error returns the error message for the given status. | ||
func (status Error) Error() string { | ||
return C.GoString(C.pam_strerror(nil, C.int(status))) | ||
} |
Oops, something went wrong.