LCOV - code coverage report
Current view: | top level - Modules - _cryptmodule.c (source / functions) |  |  | Hit | Total | Coverage
Test: | CPython 3.12 LCOV report [commit 5e6661bce9] |  | Lines: | 2 | 8 | 25.0 %
Date: | 2023-03-20 08:15:36 |  | Functions: | 1 | 2 | 50.0 %
|  |  | Branches: | 0 | 2 | 0.0 %

               Branch data     Line data    Source code
           1                 :            : /* cryptmodule.c - by Steve Majewski
           2                 :            :  */
           3                 :            :
           4                 :            : #include "Python.h"
           5                 :            :
           6                 :            : #include <sys/types.h>
           7                 :            : #ifdef HAVE_CRYPT_H
           8                 :            : #include <crypt.h>
           9                 :            : #endif
          10                 :            :
          11                 :            : /* Module crypt */
          12                 :            :
          13                 :            : /*[clinic input]
          14                 :            : module crypt
          15                 :            : [clinic start generated code]*/
          16                 :            : /*[clinic end generated code: output=da39a3ee5e6b4b0d input=c6252cf4f2f2ae81]*/
          17                 :            :
          18                 :            : #include "clinic/_cryptmodule.c.h"
          19                 :            :
          20                 :            : /*[clinic input]
          21                 :            : crypt.crypt
          22                 :            :
          23                 :            :     word: str
          24                 :            :     salt: str
          25                 :            :     /
          26                 :            :
          27                 :            : Hash a *word* with the given *salt* and return the hashed password.
          28                 :            :
          29                 :            : *word* will usually be a user's password.  *salt* (either a random 2 or 16
          30                 :            : character string, possibly prefixed with $digit$ to indicate the method)
          31                 :            : will be used to perturb the encryption algorithm and produce distinct
          32                 :            : results for a given *word*.
          33                 :            :
          34                 :            : [clinic start generated code]*/
          35                 :            :
          36                 :            : static PyObject *
          37                 :          0 : crypt_crypt_impl(PyObject *module, const char *word, const char *salt)
          38                 :            : /*[clinic end generated code: output=0512284a03d2803c input=0e8edec9c364352b]*/
          39                 :            : {
          40                 :            :     char *crypt_result;
          41                 :            : #ifdef HAVE_CRYPT_R
          42                 :            :     struct crypt_data data;
          43                 :          0 :     memset(&data, 0, sizeof(data));
          44                 :          0 :     crypt_result = crypt_r(word, salt, &data);
          45                 :            : #else
          46                 :            :     crypt_result = crypt(word, salt);
          47                 :            : #endif
          48         [ #  # ]:          0 :     if (crypt_result == NULL) {
          49                 :          0 :         return PyErr_SetFromErrno(PyExc_OSError);
          50                 :            :     }
          51                 :          0 :     return Py_BuildValue("s", crypt_result);
          52                 :            : }
          53                 :            :
          54                 :            :
          55                 :            : static PyMethodDef crypt_methods[] = {
          56                 :            :     CRYPT_CRYPT_METHODDEF
          57                 :            :     {NULL,              NULL}           /* sentinel */
          58                 :            : };
          59                 :            :
          60                 :            : static PyModuleDef_Slot _crypt_slots[] = {
          61                 :            :     {0, NULL}
          62                 :            : };
          63                 :            :
          64                 :            : static struct PyModuleDef cryptmodule = {
          65                 :            :     PyModuleDef_HEAD_INIT,
          66                 :            :     "_crypt",
          67                 :            :     NULL,
          68                 :            :     0,
          69                 :            :     crypt_methods,
          70                 :            :     _crypt_slots,
          71                 :            :     NULL,
          72                 :            :     NULL,
          73                 :            :     NULL
          74                 :            : };
          75                 :            :
          76                 :            : PyMODINIT_FUNC
          77                 :          1 : PyInit__crypt(void)
          78                 :            : {
          79                 :          1 :     return PyModuleDef_Init(&cryptmodule);
          80                 :            : }

Generated by: LCOV version 1.14