Nailed a couple of memory leaks, caught by Purify.
diff --git a/Modules/grpmodule.c b/Modules/grpmodule.c
index ccdba12..0199b6b 100644
--- a/Modules/grpmodule.c
+++ b/Modules/grpmodule.c
@@ -51,6 +51,7 @@
 			Py_DECREF(w);
 			return NULL;
 		}
+		Py_DECREF(x);
 	}
 	v = Py_BuildValue("(sslO)",
 		       p->gr_name,
@@ -112,6 +113,7 @@
 			Py_DECREF(d);
 			return NULL;
 		}
+		Py_DECREF(v);
 	}
 	return d;
 }
diff --git a/Modules/nismodule.c b/Modules/nismodule.c
index a00a0e6..5866026 100644
--- a/Modules/nismodule.c
+++ b/Modules/nismodule.c
@@ -292,7 +292,7 @@
 	nisresp_maplist *list;
 	char *dom;
 	CLIENT *cl, *clnt_create();
-	char *server = "";
+	char *server = NULL;
 	int mapi = 0;
         int err;
 
@@ -301,25 +301,32 @@
 		return NULL;
 	}
 
-	while (!strcmp("", server) && aliases[mapi].map != 0L) {
+	while (!server && aliases[mapi].map != 0L) {
 		yp_master (dom, aliases[mapi].map, &server);
 		mapi++;
 	}
-        if (!strcmp("", server)) {
+        if (!server) {
             PyErr_SetString(NisError, "No NIS master found for any map");
             return NULL;
         }
 	cl = clnt_create(server, YPPROG, YPVERS, "tcp");
 	if (cl == NULL) {
 		PyErr_SetString(NisError, clnt_spcreateerror(server));
-		return NULL;
+		goto finally;
 	}
 	list = nisproc_maplist_2 (&dom, cl);
+	clnt_destroy(cl);
 	if (list == NULL)
-		return NULL;
+		goto finally;
 	if (list->stat != NIS_TRUE)
-		return NULL;
+		goto finally;
+
+	PyMem_DEL(server);
 	return list->maps;
+
+  finally:
+	PyMem_DEL(server);
+	return NULL;
 }
 
 static PyObject *
@@ -337,12 +344,14 @@
 	if ((list = PyList_New(0)) == NULL)
 		return NULL;
 	for (maps = maps->next; maps; maps = maps->next) {
-		if (PyList_Append (list, PyString_FromString (maps->map)) < 0)
+		PyObject *str = PyString_FromString(maps->map);
+		if (!str || PyList_Append(list, str) < 0)
 		{
 			Py_DECREF(list);
 			list = NULL;
 			break;
 		}
+		Py_DECREF(str);
 	}
 	/* XXX Shouldn't we free the list of maps now? */
 	return list;
diff --git a/Modules/pwdmodule.c b/Modules/pwdmodule.c
index 69a81ef..4b09312 100644
--- a/Modules/pwdmodule.c
+++ b/Modules/pwdmodule.c
@@ -109,6 +109,7 @@
 			Py_DECREF(d);
 			return NULL;
 		}
+		Py_DECREF(v);
 	}
 	return d;
 }
diff --git a/Modules/regexmodule.c b/Modules/regexmodule.c
index 981a6e9..695c2d2 100644
--- a/Modules/regexmodule.c
+++ b/Modules/regexmodule.c
@@ -518,6 +518,8 @@
 					    Py_XDECREF(npattern);
 					    return NULL;
 				    }
+				    Py_DECREF(group_name);
+				    Py_DECREF(group_index);
 				    ++o;     /* eat the '>' */
 				    break;
 				}
@@ -573,6 +575,7 @@
 	PyObject *tran = NULL;
 	PyObject *gdict = NULL;
 	PyObject *npattern;
+	PyObject *retval = NULL;
 
 	if (!PyArg_ParseTuple(args, "S|S", &pattern, &tran))
 		return NULL;
@@ -583,7 +586,9 @@
 		Py_DECREF(pattern);
 		return NULL;
 	}
-	return newregexobject(npattern, tran, pattern, gdict);
+	retval = newregexobject(npattern, tran, pattern, gdict);
+	Py_DECREF(npattern);
+	return retval;
 }