summaryrefslogtreecommitdiff
path: root/src/nshd/hackers_git/db_pam.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/nshd/hackers_git/db_pam.go')
-rw-r--r--src/nshd/hackers_git/db_pam.go70
1 files changed, 57 insertions, 13 deletions
diff --git a/src/nshd/hackers_git/db_pam.go b/src/nshd/hackers_git/db_pam.go
index a133e88..7c20a56 100644
--- a/src/nshd/hackers_git/db_pam.go
+++ b/src/nshd/hackers_git/db_pam.go
@@ -1,28 +1,72 @@
package hackers_git
-import p "nslcd_proto"
+import (
+ "crypto/rand"
+ "math/big"
+ p "nslcd_proto"
+ "nslcd_proto/util"
+)
func (o *Hackers) PAM_Authentication(cred p.Ucred, req p.Request_PAM_Authentication) p.PAM_Authentication_Enumerator {
o.lock.RLock()
defer o.lock.RUnlock()
- // TODO
- return nil
+
+ uid := o.name2uid(req.UserName)
+ if uid < 0 {
+ return util.PAM_Authentication_Ø{}
+ }
+
+ user := o.users[uid]
+ ret := p.PAM_Authentication{
+ AuthenticationResult: p.NSLCD_PAM_AUTH_ERR,
+ UserName: "",
+ AuthorizationResult: p.NSLCD_PAM_AUTH_ERR,
+ AuthorizationError: "",
+ }
+ if check_password(req.Password, user.passwd.PwHash) {
+ ret.AuthenticationResult = p.NSLCD_PAM_SUCCESS
+ ret.AuthorizationResult = ret.AuthenticationResult
+ ret.UserName = user.passwd.Name
+ }
+
+ return util.New_PAM_Authentication_List([]p.PAM_Authentication{ret})
}
+
func (o *Hackers) PAM_Authorization(cred p.Ucred, req p.Request_PAM_Authorization) p.PAM_Authorization_Enumerator {
o.lock.RLock()
defer o.lock.RUnlock()
- // TODO
- return nil
+
+ uid := o.name2uid(req.UserName)
+ if uid < 0 {
+ return util.PAM_Authorization_Ø{}
+ }
+ ret := p.PAM_Authorization{
+ Result: p.NSLCD_PAM_SUCCESS,
+ Error: "",
+ }
+
+ return util.New_PAM_Authorization_List([]p.PAM_Authorization{ret})
}
+
+const alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890"
+var alphabet_len = big.NewInt(int64(len(alphabet)))
+
func (o *Hackers) PAM_SessionOpen(cred p.Ucred, req p.Request_PAM_SessionOpen) p.PAM_SessionOpen_Enumerator {
- o.lock.RLock()
- defer o.lock.RUnlock()
- // TODO
- return nil
+ var sessionid [24]byte
+
+ for i := 0; i < len(sessionid); i++ {
+ bigint, err := rand.Int(rand.Reader, alphabet_len)
+ if err != nil {
+ return util.PAM_SessionOpen_Ø{}
+ }
+ sessionid[i] = alphabet[bigint.Int64()]
+ }
+
+ ret := p.PAM_SessionOpen{SessionID: string(sessionid[:])}
+
+ return util.New_PAM_SessionOpen_List([]p.PAM_SessionOpen{ret})
}
+
func (o *Hackers) PAM_SessionClose(cred p.Ucred, req p.Request_PAM_SessionClose) p.PAM_SessionClose_Enumerator {
- o.lock.RLock()
- defer o.lock.RUnlock()
- // TODO
- return nil
+ return util.PAM_SessionClose_Ø{}
}