Index: src/s_serv.c
===================================================================
--- src/s_serv.c	(revision 39)
+++ src/s_serv.c	(working copy)
@@ -948,6 +948,7 @@
 CMD_FUNC(m_restart)
 {
 	char *reason = NULL;
+	char *pass = NULL;
 	/* Check permissions */
         if (MyClient(sptr) && !OPCanRestart(sptr))
         {
@@ -976,16 +977,7 @@
 		/* Syntax: /restart <pass> */
 		if (conf_drpass)
 		{
-			int ret;
-			ret = Auth_Check(cptr, conf_drpass->restartauth, parv[1]);
-			if (ret == -1)
-			{
-				sendto_one(sptr, err_str(ERR_PASSWDMISMATCH), me.name,
-					   parv[0]);
-				return 0;
-			}
-			if (ret < 1)
-				return 0;
+			pass = parv[1];
 		}
 		/* Syntax: /rehash <reason> */
 		else 
@@ -996,19 +988,22 @@
 		/* Syntax: /restart <pass> <reason> */
 		if (conf_drpass)
 		{
-			int ret;
-			ret = Auth_Check(cptr, conf_drpass->restartauth, parv[1]);
-			if (ret == -1)
-			{
-				sendto_one(sptr, err_str(ERR_PASSWDMISMATCH), me.name,
-					   parv[0]);
-				return 0;
-			}
-			if (ret < 1)
-				return 0;
+			pass = parv[1];
 		}
 		reason = parv[2];
 	}
+
+	int ret;
+	ret = Auth_Check(cptr, conf_drpass->restartauth, pass);
+	if (ret == -1)
+	{
+		sendto_one(sptr, err_str(ERR_PASSWDMISMATCH), me.name,
+			   parv[0]);
+		return 0;
+	}
+	if (ret < 1)
+		return 0;
+
 	sendto_ops("Server is Restarting by request of %s", parv[0]);
 	server_reboot(reason ? reason : "No reason");
 	return 0;
