14287: ARVADOS_EXPERIMENTAL=14287 enables EnableBetaController14287.
[arvados.git] / sdk / pam / arvados_pam / __init__.py
1 # Copyright (C) The Arvados Authors. All rights reserved.
2 #
3 # SPDX-License-Identifier: Apache-2.0
4
5 import sys
6 sys.argv=['']
7
8 from . import auth_event
9
10 def pam_sm_authenticate(pamh, flags, argv):
11     config = {}
12     config['arvados_api_host'] = argv[1]
13     config['virtual_machine_hostname'] = argv[2]
14     if len(argv) > 3:
15         for k in argv[3:]:
16             config[k] = True
17
18     try:
19         username = pamh.get_user(None)
20     except pamh.exception as e:
21         return e.pam_result
22
23     if not username:
24         return pamh.PAM_USER_UNKNOWN
25
26     try:
27         prompt = '' if config.get('noprompt') else 'Arvados API token: '
28         token = pamh.conversation(pamh.Message(pamh.PAM_PROMPT_ECHO_OFF, prompt)).resp
29     except pamh.exception as e:
30         return e.pam_result
31
32     if auth_event.AuthEvent(
33             config=config,
34             service=pamh.service,
35             client_host=pamh.rhost,
36             username=username,
37             token=token).can_login():
38         return pamh.PAM_SUCCESS
39     else:
40         return pamh.PAM_AUTH_ERR
41
42 def pam_sm_setcred(pamh, flags, argv):
43     return pamh.PAM_SUCCESS
44
45 def pam_sm_acct_mgmt(pamh, flags, argv):
46     return pamh.PAM_SUCCESS
47
48 def pam_sm_open_session(pamh, flags, argv):
49     return pamh.PAM_SUCCESS
50
51 def pam_sm_close_session(pamh, flags, argv):
52     return pamh.PAM_SUCCESS
53
54 def pam_sm_chauthtok(pamh, flags, argv):
55     return pamh.PAM_SUCCESS