1 | /* cryptmodule.c - by Steve Majewski
|
---|
2 | */
|
---|
3 |
|
---|
4 | #include "Python.h"
|
---|
5 |
|
---|
6 | #include <sys/types.h>
|
---|
7 |
|
---|
8 | #ifdef __VMS
|
---|
9 | #include <openssl/des.h>
|
---|
10 | #endif
|
---|
11 |
|
---|
12 | /* Module crypt */
|
---|
13 |
|
---|
14 |
|
---|
15 | static PyObject *crypt_crypt(PyObject *self, PyObject *args)
|
---|
16 | {
|
---|
17 | char *word, *salt;
|
---|
18 | #ifndef __VMS
|
---|
19 | extern char * crypt(const char *, const char *);
|
---|
20 | #endif
|
---|
21 |
|
---|
22 | if (!PyArg_ParseTuple(args, "ss:crypt", &word, &salt)) {
|
---|
23 | return NULL;
|
---|
24 | }
|
---|
25 | /* On some platforms (AtheOS) crypt returns NULL for an invalid
|
---|
26 | salt. Return None in that case. XXX Maybe raise an exception? */
|
---|
27 | return Py_BuildValue("s", crypt(word, salt));
|
---|
28 |
|
---|
29 | }
|
---|
30 |
|
---|
31 | PyDoc_STRVAR(crypt_crypt__doc__,
|
---|
32 | "crypt(word, salt) -> string\n\
|
---|
33 | word will usually be a user's password. salt is a 2-character string\n\
|
---|
34 | which will be used to select one of 4096 variations of DES. The characters\n\
|
---|
35 | in salt must be either \".\", \"/\", or an alphanumeric character. Returns\n\
|
---|
36 | the hashed password as a string, which will be composed of characters from\n\
|
---|
37 | the same alphabet as the salt.");
|
---|
38 |
|
---|
39 |
|
---|
40 | static PyMethodDef crypt_methods[] = {
|
---|
41 | {"crypt", crypt_crypt, METH_VARARGS, crypt_crypt__doc__},
|
---|
42 | {NULL, NULL} /* sentinel */
|
---|
43 | };
|
---|
44 |
|
---|
45 | PyMODINIT_FUNC
|
---|
46 | initcrypt(void)
|
---|
47 | {
|
---|
48 | Py_InitModule("crypt", crypt_methods);
|
---|
49 | }
|
---|