OpenBSD non-PAM lokker authentication.
Reviewers: ManMower, zmike! Subscribers: raster, ManMower, cedric Differential Revision: https://phab.enlightenment.org/D4204
This commit is contained in:
parent
adfa905e09
commit
fddcaa43c4
|
@ -1,6 +1,6 @@
|
||||||
#include "e.h"
|
#include "e.h"
|
||||||
|
|
||||||
#if defined(HAVE_PAM) && !defined(__FreeBSD__)
|
#if defined(HAVE_PAM) && !defined(__FreeBSD__) && !defined(__OpenBSD__)
|
||||||
# include <security/pam_appl.h>
|
# include <security/pam_appl.h>
|
||||||
# include <pwd.h>
|
# include <pwd.h>
|
||||||
|
|
||||||
|
@ -128,7 +128,7 @@ _auth_pam_init(E_Auth *da)
|
||||||
free(current_host);
|
free(current_host);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif // HAVE_PAM && !__FreeBSD__
|
#endif // HAVE_PAM && !__FreeBSD__ && !_OpenBSD__
|
||||||
|
|
||||||
E_API int
|
E_API int
|
||||||
#if defined(__FreeBSD__)
|
#if defined(__FreeBSD__)
|
||||||
|
@ -165,6 +165,41 @@ out:
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
#elif defined(__OpenBSD__)
|
||||||
|
e_auth_begin(char *passwd)
|
||||||
|
{
|
||||||
|
char exe_path[PATH_MAX], *p;
|
||||||
|
Ecore_Exe *exe = NULL;
|
||||||
|
int ret = 0;
|
||||||
|
int len = strlen(passwd);
|
||||||
|
|
||||||
|
if (len == 0) goto out;
|
||||||
|
|
||||||
|
snprintf(exe_path, sizeof(exe_path), "%s/enlightenment/utils/enlightenment_sys -z",
|
||||||
|
e_prefix_lib_get());
|
||||||
|
|
||||||
|
exe = ecore_exe_pipe_run(exe_path, ECORE_EXE_PIPE_WRITE, NULL);
|
||||||
|
if (!exe) goto out;
|
||||||
|
if (ecore_exe_send(exe, passwd, len) != EINA_TRUE) goto out;
|
||||||
|
if (ecore_exe_send(exe, "\n", 1) != EINA_TRUE) goto out;
|
||||||
|
ecore_exe_close_stdin(exe);
|
||||||
|
|
||||||
|
ret = ecore_exe_pid_get(exe);
|
||||||
|
if (ret == -1)
|
||||||
|
{
|
||||||
|
ret = 0;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
exe = NULL;
|
||||||
|
out:
|
||||||
|
if (exe) ecore_exe_free(exe);
|
||||||
|
|
||||||
|
for (p = passwd; *p; p++)
|
||||||
|
*p = 0;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
#elif defined(HAVE_PAM)
|
#elif defined(HAVE_PAM)
|
||||||
e_auth_begin(char *passwd)
|
e_auth_begin(char *passwd)
|
||||||
{
|
{
|
||||||
|
|
|
@ -259,7 +259,7 @@ e_desklock_show(Eina_Bool suspend)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef HAVE_PAM
|
#if ! defined(HAVE_PAM) && ! defined(__OpenBSD__)
|
||||||
if (e_desklock_is_system())
|
if (e_desklock_is_system())
|
||||||
{
|
{
|
||||||
e_util_dialog_show(_("Error - no PAM support"),
|
e_util_dialog_show(_("Error - no PAM support"),
|
||||||
|
|
|
@ -49,6 +49,56 @@ static int auth_etc_enlightenment_sysactions(char *a,
|
||||||
static void auth_etc_enlightenment_sysactions_perm(char *path);
|
static void auth_etc_enlightenment_sysactions_perm(char *path);
|
||||||
static char *get_word(char *s,
|
static char *get_word(char *s,
|
||||||
char *d);
|
char *d);
|
||||||
|
#if defined(__OpenBSD__)
|
||||||
|
|
||||||
|
static void
|
||||||
|
_exit_backoff(void)
|
||||||
|
{
|
||||||
|
sleep(3);
|
||||||
|
exit(1 << 7);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
_check_auth(const char *guess)
|
||||||
|
{
|
||||||
|
struct passwd *pw_ent;
|
||||||
|
uid_t uid = getuid();
|
||||||
|
|
||||||
|
pw_ent = getpwuid_shadow(uid);
|
||||||
|
if (!pw_ent)
|
||||||
|
_exit_backoff();
|
||||||
|
|
||||||
|
return crypt_checkpass(guess, pw_ent->pw_passwd);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
auth_generic_enlightenment_desklock(void)
|
||||||
|
{
|
||||||
|
char buf[4096];
|
||||||
|
char byte[1];
|
||||||
|
int res = -1;
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
while (read(STDIN_FILENO, byte, sizeof(byte)) > 0)
|
||||||
|
{
|
||||||
|
if (byte[0] == '\n') break;
|
||||||
|
buf[i++] = byte[0];
|
||||||
|
if (i == sizeof(buf) -1) break;
|
||||||
|
}
|
||||||
|
|
||||||
|
buf[i] = '\0';
|
||||||
|
|
||||||
|
if (!i)
|
||||||
|
_exit_backoff();
|
||||||
|
|
||||||
|
res = _check_auth(buf);
|
||||||
|
|
||||||
|
if (res) _exit_backoff();
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
/* local subsystem globals */
|
/* local subsystem globals */
|
||||||
static Eina_Hash *actions = NULL;
|
static Eina_Hash *actions = NULL;
|
||||||
|
@ -82,6 +132,15 @@ main(int argc,
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#if defined(__OpenBSD__)
|
||||||
|
if (argc >= 2)
|
||||||
|
{
|
||||||
|
if (!strcmp(argv[1], "-z"))
|
||||||
|
{
|
||||||
|
exit(auth_generic_enlightenment_desklock());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
if (argc >= 3)
|
if (argc >= 3)
|
||||||
{
|
{
|
||||||
if ((argc == 3) && (!strcmp(argv[1], "-t")))
|
if ((argc == 3) && (!strcmp(argv[1], "-t")))
|
||||||
|
|
Loading…
Reference in New Issue