# HG changeset patch
# User Timothy Clemans <timothy.clemans@gmail.com>
# Date 1226274485 21600
# Node ID 91b58135cec80756572727af4d606b3fb863c8fe
# Parent 67e0603ac89003d15b4c69257b0daad0f44db95f
4309
diff -r 67e0603ac890 -r 91b58135cec8 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 |
… |
… |
|
82 | 83 | self.failure_type = failure_type |
83 | 84 | |
84 | 85 | class PasswordChecker(object): |
| 86 | krb_data = [] |
85 | 87 | implements(checkers.ICredentialsChecker) |
86 | 88 | credentialInterfaces = (credentials.IUsernamePassword,) |
87 | 89 | |
… |
… |
|
103 | 105 | password = credentials.password |
104 | 106 | if username == 'COOKIESDISABLED': |
105 | 107 | return defer.succeed(FailedLogin(username, failure_type = 'cookies')) |
106 | | |
| 108 | |
| 109 | if self.krb_data[0] and self.krb_data[1]: |
| 110 | try: |
| 111 | kerberos.checkPassword(username,password, |
| 112 | self.krb_data[0], self.krb_data[1]) |
| 113 | except kerberos.BasicAuthError, e: |
| 114 | krb_auth = False |
| 115 | else: |
| 116 | krb_auth = True |
| 117 | |
107 | 118 | try: |
108 | 119 | U = twist.notebook.user(username) |
109 | 120 | except KeyError: |
110 | | return defer.succeed(FailedLogin(username, failure_type = 'user')) |
111 | | |
112 | | if U.password_is(password): |
| 121 | if not krb_auth: |
| 122 | return defer.succeed(FailedLogin(username, failure_type = 'user')) |
| 123 | else: |
| 124 | twist.notebook.add_user(username,"".join([choice("abcdef1234567890") for i in range(30)]) |
| 125 | ,"", account_type='user',force=True) |
| 126 | return defer.succeed(username) |
| 127 | |
| 128 | if U.password_is(password) or krb_auth: |
113 | 129 | return defer.succeed(username) |
114 | 130 | else: |
115 | 131 | return defer.succeed(FailedLogin(username,failure_type='password')) |
diff -r 67e0603ac890 -r 91b58135cec8 sage/server/notebook/notebook_object.py
a
|
b
|
|
66 | 66 | session terminates. 0 means `never timeout'. |
67 | 67 | server_pool -- (default: None) list; this option specifies that |
68 | 68 | worksheet processes run as a separate user (chosen |
69 | | from the list in the server_pool -- see below). |
| 69 | from the list in the server_pool -- see below). |
| 70 | krb_srv -- specifies the kerberos service if kerberos authentification is used |
| 71 | krb_realm -- specifies the kerberos realm if kerberos authentification is used |
70 | 72 | |
71 | 73 | \begin{verbatim} |
72 | 74 | |
diff -r 67e0603ac890 -r 91b58135cec8 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() |