# HG changeset patch
# User Kilian Kilger <kilian@nihilnovi.de>
# Date 1224174540 -7200
# Node ID 8eae55623eb458c7f6c075327102231cf016a58a
# Parent a175cdbeb408e30953aa338a084de996f6c720e3
This adds Kerberos authentification support for SAGE Notebook
This also adds the options krb_srv, krb_realm to the notebook()
command.
diff -r a175cdbeb408 -r 8eae55623eb4 sage/server/notebook/avatars.py
a
|
b
|
|
9 | 9 | |
10 | 10 | import crypt |
11 | 11 | import os |
12 | | from random import randint |
| 12 | from random import randint, choice |
13 | 13 | |
14 | 14 | import twist |
| 15 | import kerberos |
15 | 16 | from twisted.cred import portal, checkers, credentials, error as credError |
16 | 17 | from twisted.internet import protocol, defer |
17 | 18 | from zope.interface import Interface, implements |
… |
… |
|
80 | 81 | self.failure_type = failure_type |
81 | 82 | |
82 | 83 | class PasswordChecker(object): |
| 84 | krb_data = [] |
83 | 85 | implements(checkers.ICredentialsChecker) |
84 | 86 | credentialInterfaces = (credentials.IUsernamePassword,) |
85 | 87 | |
… |
… |
|
99 | 101 | def requestAvatarId(self, credentials): |
100 | 102 | username = credentials.username |
101 | 103 | password = credentials.password |
| 104 | |
| 105 | if self.krb_data[0] and self.krb_data[1]: |
| 106 | try: |
| 107 | kerberos.checkPassword(username,password, |
| 108 | self.krb_data[0], self.krb_data[1]) |
| 109 | except kerberos.BasicAuthError, e: |
| 110 | krb_auth = False |
| 111 | else: |
| 112 | krb_auth = True |
| 113 | |
102 | 114 | try: |
103 | 115 | U = twist.notebook.user(username) |
104 | 116 | except KeyError: |
105 | | return defer.succeed(FailedLogin(username, failure_type = 'user')) |
106 | | |
107 | | if U.password_is(password): |
| 117 | if not krb_auth: |
| 118 | return defer.succeed(FailedLogin(username, failure_type = 'user')) |
| 119 | else: |
| 120 | twist.notebook.add_user(username,"".join([choice("abcdef1234567890") for i in range(30)]) |
| 121 | ,"", account_type='user',force=True) |
| 122 | return defer.succeed(username) |
| 123 | |
| 124 | if U.password_is(password) or krb_auth: |
108 | 125 | return defer.succeed(username) |
109 | 126 | else: |
110 | 127 | return defer.succeed(FailedLogin(username,failure_type='password')) |
diff -r a175cdbeb408 -r 8eae55623eb4 sage/server/notebook/notebook_object.py
a
|
b
|
|
60 | 60 | Sage session terminates. 0 means 'never timeout'. |
61 | 61 | server_pool -- list; The server_pool option specifies that worksheet processes run |
62 | 62 | as a separate user (chosen from the list in the server_pool -- see below). |
| 63 | krb_srv -- specifies the kerberos service if kerberos authentification is used |
| 64 | krb_realm -- specifies the kerberos realm if kerberos authentification is used |
63 | 65 | |
64 | 66 | \begin{verbatim} |
65 | 67 | |
diff -r a175cdbeb408 -r 8eae55623eb4 sage/server/notebook/run_notebook.py
a
|
b
|
|
61 | 61 | sagetex_path = "", |
62 | 62 | start_path = "", |
63 | 63 | fork = False, |
64 | | quiet = False): |
65 | | |
| 64 | |
| 65 | quiet = False, |
| 66 | |
| 67 | krb_srv= None, |
| 68 | krb_realm= None): |
66 | 69 | if directory is None: |
67 | 70 | directory = '%s/sage_notebook'%DOT_SAGE |
68 | 71 | else: |
… |
… |
|
221 | 224 | startup_checker = avatars.OneTimeTokenChecker() |
222 | 225 | startup_checker.token = startup_token |
223 | 226 | p.registerChecker(startup_checker) |
| 227 | avatars.PasswordChecker.krb_data=%s |
224 | 228 | password_checker = avatars.PasswordChecker() |
225 | 229 | p.registerChecker(password_checker) |
226 | 230 | p.registerChecker(checkers.AllowAnonymousAccess()) |
… |
… |
|
239 | 243 | reactor.addSystemEventTrigger('before', 'shutdown', save_notebook) |
240 | 244 | |
241 | 245 | """%(notebook_opts, sagetex_path, not require_login, |
242 | | os.path.abspath(directory), strport, open_page)) |
| 246 | os.path.abspath(directory), [krb_srv,krb_realm], strport, open_page)) |
243 | 247 | |
244 | 248 | |
245 | 249 | config.close() |