Mercurial > cpython-lru_cache-weakref
annotate Modules/_cryptmodule.c @ 87690:66c1c9f32567 default tip
Add use_weakref option to functools.lru_cache
The use_weakref option makes lru_cache create weak references to the function
arguments when creating the cache key, which prevents them from staying in the
memory forever even after all other references to them are gone.
This is a proof of concept for http://bugs.python.org/issue19859
| author | Radomir Dopieralski <devel@sheep.art.pl> |
|---|---|
| date | Tue, 03 Dec 2013 16:02:48 +0100 |
| parents | 372b2ef0ff37 |
| children |
| rev | line source |
|---|---|
| 1617 | 1 /* cryptmodule.c - by Steve Majewski |
| 2 */ | |
| 3 | |
|
4643
8d909ae1f099
renamed grandly.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
4 #include "Python.h" |
| 1617 | 5 |
| 6 #include <sys/types.h> | |
| 7 | |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
24471
diff
changeset
|
8 #ifdef __VMS |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
24471
diff
changeset
|
9 #include <openssl/des.h> |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
24471
diff
changeset
|
10 #endif |
| 1617 | 11 |
| 12 /* Module crypt */ | |
| 13 | |
| 14 | |
|
13496
03bc51e43f7a
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
11687
diff
changeset
|
15 static PyObject *crypt_crypt(PyObject *self, PyObject *args) |
| 1617 | 16 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
17 char *word, *salt; |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
24471
diff
changeset
|
18 #ifndef __VMS |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
19 extern char * crypt(const char *, const char *); |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
24471
diff
changeset
|
20 #endif |
| 1617 | 21 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
22 if (!PyArg_ParseTuple(args, "ss:crypt", &word, &salt)) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
23 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
24 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
25 /* On some platforms (AtheOS) crypt returns NULL for an invalid |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
26 salt. Return None in that case. XXX Maybe raise an exception? */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
27 return Py_BuildValue("s", crypt(word, salt)); |
| 1617 | 28 |
| 29 } | |
| 30 | |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23777
diff
changeset
|
31 PyDoc_STRVAR(crypt_crypt__doc__, |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23777
diff
changeset
|
32 "crypt(word, salt) -> string\n\ |
|
11687
47d70f4f635f
Added docstring to crypt.crypt() based on the documentation.
Fred Drake <fdrake@acm.org>
parents:
9588
diff
changeset
|
33 word will usually be a user's password. salt is a 2-character string\n\ |
|
47d70f4f635f
Added docstring to crypt.crypt() based on the documentation.
Fred Drake <fdrake@acm.org>
parents:
9588
diff
changeset
|
34 which will be used to select one of 4096 variations of DES. The characters\n\ |
|
47d70f4f635f
Added docstring to crypt.crypt() based on the documentation.
Fred Drake <fdrake@acm.org>
parents:
9588
diff
changeset
|
35 in salt must be either \".\", \"/\", or an alphanumeric character. Returns\n\ |
|
47d70f4f635f
Added docstring to crypt.crypt() based on the documentation.
Fred Drake <fdrake@acm.org>
parents:
9588
diff
changeset
|
36 the hashed password as a string, which will be composed of characters from\n\ |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23777
diff
changeset
|
37 the same alphabet as the salt."); |
|
11687
47d70f4f635f
Added docstring to crypt.crypt() based on the documentation.
Fred Drake <fdrake@acm.org>
parents:
9588
diff
changeset
|
38 |
|
47d70f4f635f
Added docstring to crypt.crypt() based on the documentation.
Fred Drake <fdrake@acm.org>
parents:
9588
diff
changeset
|
39 |
|
4643
8d909ae1f099
renamed grandly.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
40 static PyMethodDef crypt_methods[] = { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
41 {"crypt", crypt_crypt, METH_VARARGS, crypt_crypt__doc__}, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
42 {NULL, NULL} /* sentinel */ |
| 1617 | 43 }; |
| 44 | |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
39442
diff
changeset
|
45 |
|
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
39442
diff
changeset
|
46 static struct PyModuleDef cryptmodule = { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
47 PyModuleDef_HEAD_INIT, |
|
68097
372b2ef0ff37
Issue #10924: Adding salt and Modular Crypt Format to crypt library.
Sean Reifscheider <jafo@tummy.com>
parents:
61466
diff
changeset
|
48 "_crypt", |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
49 NULL, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
50 -1, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
51 crypt_methods, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
52 NULL, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
53 NULL, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
54 NULL, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
55 NULL |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
39442
diff
changeset
|
56 }; |
|
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
39442
diff
changeset
|
57 |
|
24471
f66b3a3509c7
Excise DL_EXPORT/DL_IMPORT from Modules/*. Required adding a prototype
Mark Hammond <mhammond@skippinet.com.au>
parents:
23832
diff
changeset
|
58 PyMODINIT_FUNC |
|
68097
372b2ef0ff37
Issue #10924: Adding salt and Modular Crypt Format to crypt library.
Sean Reifscheider <jafo@tummy.com>
parents:
61466
diff
changeset
|
59 PyInit__crypt(void) |
| 1617 | 60 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
61 return PyModule_Create(&cryptmodule); |
| 1617 | 62 } |
