added basic ssl support to ircu
[ircu2.10.12-pk.git] / ircd / m_admin.c
index 25912591fceaeda27831a9d93dfd2c967f304904..8c4908ec8d59c3ec14af3042a1ffdd001bad409e 100644 (file)
  *            note:   it is guaranteed that parv[0]..parv[parc-1] are all
  *                    non-NULL pointers.
  */
-#if 0
-/*
- * No need to include handlers.h here the signatures must match
- * and we don't need to force a rebuild of all the handlers everytime
- * we add a new one to the list. --Bleep
- */
-#include "handlers.h"
-#endif /* 0 */
+#include "config.h"
+
 #include "client.h"
+#include "hash.h"
+#include "ircd.h"
+#include "ircd_features.h"
+#include "ircd_log.h"
 #include "ircd_reply.h"
+#include "match.h"
 #include "msg.h"
 #include "numeric.h"
 #include "numnicks.h"
 #include "s_conf.h"
 #include "s_user.h"
 
-#include <assert.h>
+/* #include <assert.h> -- Now using assert in ircd_log.h */
+
+static int send_admin_info(struct Client* sptr)
+{
+  const struct LocalConf* admin = conf_get_local();
+  assert(0 != sptr);
+
+  send_reply(sptr, RPL_ADMINME,    cli_name(&me));
+  send_reply(sptr, RPL_ADMINLOC1,  admin->location1);
+  send_reply(sptr, RPL_ADMINLOC2,  admin->location2);
+  send_reply(sptr, RPL_ADMINEMAIL, admin->contact);
+  return 0;
+}
+
 
 /*
  * m_admin - generic message handler
@@ -108,16 +120,27 @@ int m_admin(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
   assert(0 != cptr);
   assert(cptr == sptr);
 
-  if (parc > 1) {
-    struct Client *acptr;
-    if (!(acptr = find_match_server(parv[1])))
-      return send_error_to_client(sptr, ERR_NOSUCHSERVER, parv[1]);
+  if (parc > 1  && match(parv[1], cli_name(&me)))
+    return send_reply(sptr, ERR_NOPRIVILEGES);
+
+  return send_admin_info(sptr);
+}
 
-    parv[1] = acptr->name;
-    if (hunt_server(0, cptr, sptr, "%s%s " TOK_ADMIN " :%s", 1, parc, parv) != HUNTED_ISME)
-      return 0;
-  }
-  return send_admin_info(sptr, find_admin());
+/*
+ * mo_admin - oper message handler
+ *
+ * parv[0] = sender prefix
+ * parv[1] = servername
+ */
+int mo_admin(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
+{
+  assert(0 != cptr);
+  assert(cptr == sptr);
+
+  if (hunt_server_cmd(sptr, CMD_ADMIN, cptr, feature_int(FEAT_HIS_REMOTE), 
+                      ":%C", 1, parc, parv) != HUNTED_ISME)
+    return 0;
+  return send_admin_info(sptr);
 }
 
 /*
@@ -134,9 +157,9 @@ int ms_admin(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
   if (parc < 2)
     return 0;
 
-  if (hunt_server(0, cptr, sptr, "%s%s " TOK_ADMIN " :%s", 1, parc, parv) != HUNTED_ISME)
+  if (hunt_server_cmd(sptr, CMD_ADMIN, cptr, 0, ":%C", 1, parc, parv) != HUNTED_ISME)
     return 0;
 
-  return send_admin_info(sptr, find_admin());
+  return send_admin_info(sptr);
 }