[2] | 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 | {
|
---|
[391] | 17 | char *word, *salt;
|
---|
[2] | 18 | #ifndef __VMS
|
---|
[391] | 19 | extern char * crypt(const char *, const char *);
|
---|
[2] | 20 | #endif
|
---|
| 21 |
|
---|
[391] | 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));
|
---|
[2] | 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[] = {
|
---|
[391] | 41 | {"crypt", crypt_crypt, METH_VARARGS, crypt_crypt__doc__},
|
---|
| 42 | {NULL, NULL} /* sentinel */
|
---|
[2] | 43 | };
|
---|
| 44 |
|
---|
| 45 | PyMODINIT_FUNC
|
---|
| 46 | initcrypt(void)
|
---|
| 47 | {
|
---|
[391] | 48 | Py_InitModule("crypt", crypt_methods);
|
---|
[2] | 49 | }
|
---|