+ apply_undline(source_p, cidr);
+
+ return 0;
+}
+
+static int\r
+me_dline(struct Client *client_p, struct Client *source_p, int parc, const char **parv)\r
+{\r
+ int tdline_time = atoi(parv[1]);\r
+ /* Since this is coming over a server link, assume that the originating\r
+ * server did the relevant permission/sanity checks...\r
+ */\r
+\r
+ if(!IsPerson(source_p))\r
+ return 0;\r
+\r
+ if(!find_shared_conf(source_p->username, source_p->host,\r
+ source_p->servptr->name, tdline_time > 0 ? SHARED_TDLINE : SHARED_PDLINE))\r
+ {\r
+ sendto_realops_snomask(SNO_DEBUG, L_NETWIDE, "undline failed %s %s %s",\r
+ source_p->name, parv[1], parv[2]);\r
+ return 0;\r
+ }\r
+\r
+ apply_dline(source_p, parv[2], tdline_time, LOCAL_COPY(parv[3]));\r
+\r
+ check_dlines();\r
+ return 0;\r
+}\r
+\r
+static int\r
+me_undline(struct Client *client_p, struct Client *source_p, int parc, const char **parv)\r
+{\r
+ if(!IsPerson(source_p))\r
+ return 0;\r
+\r
+ if(!find_shared_conf(source_p->username, source_p->host,\r
+ source_p->servptr->name, SHARED_UNDLINE))\r
+ return 0;\r
+\r
+ apply_undline(source_p, parv[1]);\r
+\r
+ return 0;\r
+}
+
+static int
+apply_dline(struct Client *source_p, const char *dlhost, int tdline_time, char *reason)
+{
+ struct ConfItem *aconf;
+ char *oper_reason;
+ char dlbuffer[IRCD_BUFSIZE];
+ const char *current_date;
+ struct rb_sockaddr_storage daddr;
+ int t = AF_INET, ty, b;
+ const char *creason;
+
+ ty = parse_netmask(dlhost, (struct sockaddr *)&daddr, &b);
+ if(ty == HM_HOST)
+ {
+ sendto_one(source_p, ":%s NOTICE %s :Invalid D-Line",
+ me.name, source_p->name);
+ return 0;
+ }
+#ifdef RB_IPV6
+ if(ty == HM_IPV6)
+ t = AF_INET6;
+ else
+#endif
+ t = AF_INET;
+
+ /* This means dlines wider than /16 cannot be set remotely */