commit
c8c021bfa9
3 changed files with 25 additions and 18 deletions
|
|
@ -1,6 +1,6 @@
|
||||||
pkgbase = howdy
|
pkgbase = howdy
|
||||||
pkgdesc = Windows Hello for Linux
|
pkgdesc = Windows Hello for Linux
|
||||||
pkgver = 2.5.1
|
pkgver = 2.6.0
|
||||||
pkgrel = 1
|
pkgrel = 1
|
||||||
url = https://github.com/boltgolt/howdy
|
url = https://github.com/boltgolt/howdy
|
||||||
arch = x86_64
|
arch = x86_64
|
||||||
|
|
@ -11,7 +11,6 @@ pkgbase = howdy
|
||||||
depends = opencv
|
depends = opencv
|
||||||
depends = hdf5
|
depends = hdf5
|
||||||
depends = pam-python
|
depends = pam-python
|
||||||
depends = python2
|
|
||||||
depends = python3
|
depends = python3
|
||||||
depends = python-pillow
|
depends = python-pillow
|
||||||
depends = python-dlib
|
depends = python-dlib
|
||||||
|
|
@ -20,11 +19,11 @@ pkgbase = howdy
|
||||||
depends = python-click
|
depends = python-click
|
||||||
depends = python-numpy
|
depends = python-numpy
|
||||||
backup = usr/lib/security/howdy/config.ini
|
backup = usr/lib/security/howdy/config.ini
|
||||||
source = https://github.com/boltgolt/howdy/archive/v2.5.1.tar.gz
|
source = https://github.com/boltgolt/howdy/archive/v2.6.0.tar.gz
|
||||||
source = https://github.com/davisking/dlib-models/raw/master/dlib_face_recognition_resnet_model_v1.dat.bz2
|
source = https://github.com/davisking/dlib-models/raw/master/dlib_face_recognition_resnet_model_v1.dat.bz2
|
||||||
source = https://github.com/davisking/dlib-models/raw/master/mmod_human_face_detector.dat.bz2
|
source = https://github.com/davisking/dlib-models/raw/master/mmod_human_face_detector.dat.bz2
|
||||||
source = https://github.com/davisking/dlib-models/raw/master/shape_predictor_5_face_landmarks.dat.bz2
|
source = https://github.com/davisking/dlib-models/raw/master/shape_predictor_5_face_landmarks.dat.bz2
|
||||||
sha256sums = 596c8d947422e6d419746784f900a4af931a6fc647e1324913c6ce66a146bf82
|
sha256sums = 5bac0f32cff1358ee06d2d33a50c3cbbb5f06973747343193ce7d9926c53de23
|
||||||
sha256sums = abb1f61041e434465855ce81c2bd546e830d28bcbed8d27ffbe5bb408b11553a
|
sha256sums = abb1f61041e434465855ce81c2bd546e830d28bcbed8d27ffbe5bb408b11553a
|
||||||
sha256sums = db9e9e40f092c118d5eb3e643935b216838170793559515541c56a2b50d9fc84
|
sha256sums = db9e9e40f092c118d5eb3e643935b216838170793559515541c56a2b50d9fc84
|
||||||
sha256sums = 6e787bbebf5c9efdb793f6cd1f023230c4413306605f24f299f12869f95aa472
|
sha256sums = 6e787bbebf5c9efdb793f6cd1f023230c4413306605f24f299f12869f95aa472
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,10 @@
|
||||||
# Maintainer: Frank Tackitt <frank@tackitt.net>
|
# Maintainer: Frank Tackitt <frank@tackitt.net>
|
||||||
# Maintainer: boltgolt <boltgolt@gmail.com>
|
# Maintainer: boltgolt <boltgolt@gmail.com>
|
||||||
|
# Co-Maintainer: Raymo111 <hi@raymond.li>
|
||||||
# Contributor: Kelley McChesney <kelley@kelleymcchesney.us>
|
# Contributor: Kelley McChesney <kelley@kelleymcchesney.us>
|
||||||
|
|
||||||
pkgname=howdy
|
pkgname=howdy
|
||||||
pkgver=2.5.1
|
pkgver=2.6.0
|
||||||
pkgrel=1
|
pkgrel=1
|
||||||
pkgdesc="Windows Hello for Linux"
|
pkgdesc="Windows Hello for Linux"
|
||||||
arch=('x86_64')
|
arch=('x86_64')
|
||||||
|
|
@ -33,12 +34,10 @@ source=(
|
||||||
"https://github.com/davisking/dlib-models/raw/master/mmod_human_face_detector.dat.bz2"
|
"https://github.com/davisking/dlib-models/raw/master/mmod_human_face_detector.dat.bz2"
|
||||||
"https://github.com/davisking/dlib-models/raw/master/shape_predictor_5_face_landmarks.dat.bz2"
|
"https://github.com/davisking/dlib-models/raw/master/shape_predictor_5_face_landmarks.dat.bz2"
|
||||||
)
|
)
|
||||||
sha256sums=(
|
sha256sums=('5bac0f32cff1358ee06d2d33a50c3cbbb5f06973747343193ce7d9926c53de23'
|
||||||
'596c8d947422e6d419746784f900a4af931a6fc647e1324913c6ce66a146bf82'
|
'abb1f61041e434465855ce81c2bd546e830d28bcbed8d27ffbe5bb408b11553a'
|
||||||
'abb1f61041e434465855ce81c2bd546e830d28bcbed8d27ffbe5bb408b11553a'
|
'db9e9e40f092c118d5eb3e643935b216838170793559515541c56a2b50d9fc84'
|
||||||
'db9e9e40f092c118d5eb3e643935b216838170793559515541c56a2b50d9fc84'
|
'6e787bbebf5c9efdb793f6cd1f023230c4413306605f24f299f12869f95aa472')
|
||||||
'6e787bbebf5c9efdb793f6cd1f023230c4413306605f24f299f12869f95aa472'
|
|
||||||
)
|
|
||||||
|
|
||||||
package() {
|
package() {
|
||||||
# Installing the proper license files and the rest of howdy
|
# Installing the proper license files and the rest of howdy
|
||||||
|
|
|
||||||
23
src/pam.py
23
src/pam.py
|
|
@ -31,11 +31,14 @@ def doAuth(pamh):
|
||||||
if any("closed" in open(f).read() for f in glob.glob("/proc/acpi/button/lid/*/state")):
|
if any("closed" in open(f).read() for f in glob.glob("/proc/acpi/button/lid/*/state")):
|
||||||
return pamh.PAM_AUTHINFO_UNAVAIL
|
return pamh.PAM_AUTHINFO_UNAVAIL
|
||||||
|
|
||||||
|
# Set up syslog
|
||||||
|
syslog.openlog("[HOWDY]", 0, syslog.LOG_AUTH)
|
||||||
|
|
||||||
# Alert the user that we are doing face detection
|
# Alert the user that we are doing face detection
|
||||||
if config.getboolean("core", "detection_notice"):
|
if config.getboolean("core", "detection_notice"):
|
||||||
pamh.conversation(pamh.Message(pamh.PAM_TEXT_INFO, "Attempting face detection"))
|
pamh.conversation(pamh.Message(pamh.PAM_TEXT_INFO, "Attempting face detection"))
|
||||||
|
|
||||||
syslog.syslog(syslog.LOG_INFO | syslog.LOG_AUTH, "[HOWDY] Attempting facial authentication for user " + pamh.get_user())
|
syslog.syslog(syslog.LOG_INFO, "Attempting facial authentication for user " + pamh.get_user())
|
||||||
|
|
||||||
# Run compare as python3 subprocess to circumvent python version and import issues
|
# Run compare as python3 subprocess to circumvent python version and import issues
|
||||||
status = subprocess.call(["/usr/bin/python3", os.path.dirname(os.path.abspath(__file__)) + "/compare.py", pamh.get_user()])
|
status = subprocess.call(["/usr/bin/python3", os.path.dirname(os.path.abspath(__file__)) + "/compare.py", pamh.get_user()])
|
||||||
|
|
@ -45,23 +48,27 @@ def doAuth(pamh):
|
||||||
if not config.getboolean("core", "suppress_unknown"):
|
if not config.getboolean("core", "suppress_unknown"):
|
||||||
pamh.conversation(pamh.Message(pamh.PAM_ERROR_MSG, "No face model known"))
|
pamh.conversation(pamh.Message(pamh.PAM_ERROR_MSG, "No face model known"))
|
||||||
|
|
||||||
syslog.syslog(syslog.LOG_NOTICE | syslog.LOG_AUTH, "[HOWDY] Failure, no face model known")
|
syslog.syslog(syslog.LOG_NOTICE, "Failure, no face model known")
|
||||||
|
syslog.closelog()
|
||||||
return pamh.PAM_USER_UNKNOWN
|
return pamh.PAM_USER_UNKNOWN
|
||||||
|
|
||||||
# Status 11 means we exceded the maximum retry count
|
# Status 11 means we exceded the maximum retry count
|
||||||
elif status == 11:
|
elif status == 11:
|
||||||
pamh.conversation(pamh.Message(pamh.PAM_ERROR_MSG, "Face detection timeout reached"))
|
pamh.conversation(pamh.Message(pamh.PAM_ERROR_MSG, "Face detection timeout reached"))
|
||||||
syslog.syslog(syslog.LOG_INFO | syslog.LOG_AUTH, "[HOWDY] Failure, timeout reached")
|
syslog.syslog(syslog.LOG_INFO, "Failure, timeout reached")
|
||||||
|
syslog.closelog()
|
||||||
return pamh.PAM_AUTH_ERR
|
return pamh.PAM_AUTH_ERR
|
||||||
|
|
||||||
# Status 12 means we aborted
|
# Status 12 means we aborted
|
||||||
elif status == 12:
|
elif status == 12:
|
||||||
syslog.syslog(syslog.LOG_INFO | syslog.LOG_AUTH, "[HOWDY] Failure, general abort")
|
syslog.syslog(syslog.LOG_INFO, "Failure, general abort")
|
||||||
|
syslog.closelog()
|
||||||
return pamh.PAM_AUTH_ERR
|
return pamh.PAM_AUTH_ERR
|
||||||
|
|
||||||
# Status 13 means the image was too dark
|
# Status 13 means the image was too dark
|
||||||
elif status == 13:
|
elif status == 13:
|
||||||
syslog.syslog(syslog.LOG_INFO | syslog.LOG_AUTH, "[HOWDY] Failure, image too dark")
|
syslog.syslog(syslog.LOG_INFO, "Failure, image too dark")
|
||||||
|
syslog.closelog()
|
||||||
pamh.conversation(pamh.Message(pamh.PAM_ERROR_MSG, "Face detection image too dark"))
|
pamh.conversation(pamh.Message(pamh.PAM_ERROR_MSG, "Face detection image too dark"))
|
||||||
return pamh.PAM_AUTH_ERR
|
return pamh.PAM_AUTH_ERR
|
||||||
# Status 0 is a successful exit
|
# Status 0 is a successful exit
|
||||||
|
|
@ -70,12 +77,14 @@ def doAuth(pamh):
|
||||||
if not config.getboolean("core", "no_confirmation"):
|
if not config.getboolean("core", "no_confirmation"):
|
||||||
pamh.conversation(pamh.Message(pamh.PAM_TEXT_INFO, "Identified face as " + pamh.get_user()))
|
pamh.conversation(pamh.Message(pamh.PAM_TEXT_INFO, "Identified face as " + pamh.get_user()))
|
||||||
|
|
||||||
syslog.syslog(syslog.LOG_INFO | syslog.LOG_AUTH, "[HOWDY] Login approved")
|
syslog.syslog(syslog.LOG_INFO, "Login approved")
|
||||||
|
syslog.closelog()
|
||||||
return pamh.PAM_SUCCESS
|
return pamh.PAM_SUCCESS
|
||||||
|
|
||||||
# Otherwise, we can't discribe what happend but it wasn't successful
|
# Otherwise, we can't discribe what happend but it wasn't successful
|
||||||
pamh.conversation(pamh.Message(pamh.PAM_ERROR_MSG, "Unknown error: " + str(status)))
|
pamh.conversation(pamh.Message(pamh.PAM_ERROR_MSG, "Unknown error: " + str(status)))
|
||||||
syslog.syslog(syslog.LOG_INFO | syslog.LOG_AUTH, "[HOWDY] Failure, unknown error" + str(status))
|
syslog.syslog(syslog.LOG_INFO, "Failure, unknown error" + str(status))
|
||||||
|
syslog.closelog()
|
||||||
return pamh.PAM_SYSTEM_ERR
|
return pamh.PAM_SYSTEM_ERR
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue