2016-09-18 1 views
1

J'ai une application qui lit le nom et le mot de passe d'un utilisateur sur une socket. Je veux déterminer si le mot de passe fourni correspond au mot de passe que le système d'exploitation a pour cet utilisateur. Si c'est le cas, je veux lancer un processus en cours d'exécution en tant que cet utilisateur. Idéalement, le code serait en Go, mais je peux faire C si nécessaire. Idéalement, cela fonctionnerait sous Linux, OSX et BSD.Existe-t-il un moyen de savoir si un mot de passe fourni correspond à un mot de passe réel pour un utilisateur particulier?

+2

essayez peut-être cette bibliothèque: https://godoc.org/github.com/msteinert/pam –

+0

Merci, ça semble prometteur. Je vais essayer. –

+0

@Not_a_Golfer J'ai essayé godoc.org/github.com/msteinert/pam sur mon Mac, ne fonctionne pas. J'ai exécuté le test en tant que root et ils échouent tous avec une erreur système. –

Répondre

2

Vous pouvez utiliser l'authentification PAM pour Linux et OS X. La fonction principale étant pam_authenticate, mais vous devez d'abord démarrer le service Pam et le terminer lorsque vous avez terminé.

Here's an example de son utilisation de base.

+0

J'ai fini par écrire un module cgo utilisant PAM. Il y a quelques différences entre BSD (Mac) et Linux mais ce n'est pas un gros problème. https://github.com/murphybytes/ucp/tree/master/pam –