diff --git a/Modules/clinic/spwdmodule.c.h b/Modules/clinic/spwdmodule.c.h
new file mode 100644
index 0000000..b091fc9
--- /dev/null
+++ b/Modules/clinic/spwdmodule.c.h
@@ -0,0 +1,70 @@
+/*[clinic input]
+preserve
+[clinic start generated code]*/
+
+#if defined(HAVE_GETSPNAM)
+
+PyDoc_STRVAR(spwd_getspnam__doc__,
+"getspnam($module, arg, /)\n"
+"--\n"
+"\n"
+"Return the shadow password database entry for the given user name.\n"
+"\n"
+"See `help(spwd)` for more on shadow password database entries.");
+
+#define SPWD_GETSPNAM_METHODDEF    \
+    {"getspnam", (PyCFunction)spwd_getspnam, METH_VARARGS, spwd_getspnam__doc__},
+
+static PyObject *
+spwd_getspnam_impl(PyModuleDef *module, PyObject *arg);
+
+static PyObject *
+spwd_getspnam(PyModuleDef *module, PyObject *args)
+{
+    PyObject *return_value = NULL;
+    PyObject *arg;
+
+    if (!PyArg_ParseTuple(args,
+        "U:getspnam",
+        &arg))
+        goto exit;
+    return_value = spwd_getspnam_impl(module, arg);
+
+exit:
+    return return_value;
+}
+
+#endif /* defined(HAVE_GETSPNAM) */
+
+#ifndef SPWD_GETSPNAM_METHODDEF
+    #define SPWD_GETSPNAM_METHODDEF
+#endif /* !defined(SPWD_GETSPNAM_METHODDEF) */
+
+#if defined(HAVE_GETSPENT)
+
+PyDoc_STRVAR(spwd_getspall__doc__,
+"getspall($module, /)\n"
+"--\n"
+"\n"
+"Return a list of all available shadow password database entries, in arbitrary order.\n"
+"\n"
+"See `help(spwd)` for more on shadow password database entries.");
+
+#define SPWD_GETSPALL_METHODDEF    \
+    {"getspall", (PyCFunction)spwd_getspall, METH_NOARGS, spwd_getspall__doc__},
+
+static PyObject *
+spwd_getspall_impl(PyModuleDef *module);
+
+static PyObject *
+spwd_getspall(PyModuleDef *module, PyObject *Py_UNUSED(ignored))
+{
+    return spwd_getspall_impl(module);
+}
+
+#endif /* defined(HAVE_GETSPENT) */
+
+#ifndef SPWD_GETSPALL_METHODDEF
+    #define SPWD_GETSPALL_METHODDEF
+#endif /* !defined(SPWD_GETSPALL_METHODDEF) */
+/*[clinic end generated code: output=41fec4a15b0cd2a0 input=a9049054013a1b77]*/
diff --git a/Modules/spwdmodule.c b/Modules/spwdmodule.c
index 68ea1b5..6ef4a7d 100644
--- a/Modules/spwdmodule.c
+++ b/Modules/spwdmodule.c
@@ -10,6 +10,11 @@
 #include <shadow.h>
 #endif
 
+/*[clinic input]
+output preset file
+module spwd
+[clinic start generated code]*/
+/*[clinic end generated code: output=da39a3ee5e6b4b0d input=b3464a3667278fae]*/
 
 PyDoc_STRVAR(spwd__doc__,
 "This module provides access to the Unix shadow password database.\n\
@@ -107,20 +112,25 @@
 
 #ifdef HAVE_GETSPNAM
 
-PyDoc_STRVAR(spwd_getspnam__doc__,
-"getspnam(name) -> (sp_namp, sp_pwdp, sp_lstchg, sp_min, sp_max,\n\
-                    sp_warn, sp_inact, sp_expire, sp_flag)\n\
-Return the shadow password database entry for the given user name.\n\
-See spwd.__doc__ for more on shadow password database entries.");
+/*[clinic input]
+spwd.getspnam
 
-static PyObject* spwd_getspnam(PyObject *self, PyObject *args)
+    arg: unicode
+    /
+
+Return the shadow password database entry for the given user name.
+
+See `help(spwd)` for more on shadow password database entries.
+[clinic start generated code]*/
+
+static PyObject *
+spwd_getspnam_impl(PyModuleDef *module, PyObject *arg)
+/*[clinic end generated code: output=9f6bbe51a4eb3b21 input=dd89429e6167a00f]*/
 {
     char *name;
     struct spwd *p;
-    PyObject *arg, *bytes, *retval = NULL;
+    PyObject *bytes, *retval = NULL;
 
-    if (!PyArg_ParseTuple(args, "U:getspnam", &arg))
-        return NULL;
     if ((bytes = PyUnicode_EncodeFSDefault(arg)) == NULL)
         return NULL;
     if (PyBytes_AsStringAndSize(bytes, &name, NULL) == -1)
@@ -139,14 +149,17 @@
 
 #ifdef HAVE_GETSPENT
 
-PyDoc_STRVAR(spwd_getspall__doc__,
-"getspall() -> list_of_entries\n\
-Return a list of all available shadow password database entries, \
-in arbitrary order.\n\
-See spwd.__doc__ for more on shadow password database entries.");
+/*[clinic input]
+spwd.getspall
+
+Return a list of all available shadow password database entries, in arbitrary order.
+
+See `help(spwd)` for more on shadow password database entries.
+[clinic start generated code]*/
 
 static PyObject *
-spwd_getspall(PyObject *self, PyObject *args)
+spwd_getspall_impl(PyModuleDef *module)
+/*[clinic end generated code: output=b12d8ec7bdb29612 input=b2c84b7857d622bd]*/
 {
     PyObject *d;
     struct spwd *p;
@@ -171,10 +184,10 @@
 
 static PyMethodDef spwd_methods[] = {
 #ifdef HAVE_GETSPNAM
-    {"getspnam",        spwd_getspnam, METH_VARARGS, spwd_getspnam__doc__},
+    SPWD_GETSPNAM_METHODDEF
 #endif
 #ifdef HAVE_GETSPENT
-    {"getspall",        spwd_getspall, METH_NOARGS, spwd_getspall__doc__},
+    SPWD_GETSPALL_METHODDEF
 #endif
     {NULL,              NULL}           /* sentinel */
 };
