]> jfr.im git - irc/evilnet/x3.git/blame - patches/ns_reclaim-flag102403.diff
Fix for crash on BURST (B) message for a channel with +L, at least one ban or except...
[irc/evilnet/x3.git] / patches / ns_reclaim-flag102403.diff
CommitLineData
d76ed9a9 1diff -urN services-dist/src/nickserv.c services/src/nickserv.c
2--- services-dist/src/nickserv.c Fri Oct 24 20:05:25 2003
3+++ services/src/nickserv.c Fri Oct 24 21:08:01 2003
4@@ -1977,7 +1977,7 @@
5 unsigned int i;
6 char *set_display[] = {
7 "INFO", "WIDTH", "TABLEWIDTH", "COLOR", "PRIVMSG", "STYLE",
8- "EMAIL", "ANNOUNCEMENTS", "MAXLOGINS"
9+ "EMAIL", "ANNOUNCEMENTS", "MAXLOGINS", "RECLAIM"
10 };
11
12 nickserv_notice(user, NSMSG_SETTING_LIST);
13@@ -2094,6 +2094,27 @@
14 return 1;
15 }
16
17+static OPTION_FUNC(opt_reclaim)
18+{
19+ /* if nickserv's nick ownership functions are disabled, we don't want this. I wanted to send an error
20+ * message to the user, but there appears to be no quick & easy method of doing so, so we'll hide instead -akl */
21+ if (nickserv_conf.disable_nicks) return 1;
22+
23+ if (argc > 1) {
24+ if (enabled_string(argv[1])) {
25+ HANDLE_SET_FLAG(hi, NICKRECLAIM);
26+ } else if (disabled_string(argv[1])) {
27+ HANDLE_CLEAR_FLAG(hi, NICKRECLAIM);
28+ } else {
29+ nickserv_notice(user, MSG_INVALID_BINARY, argv[1]);
30+ return 0;
31+ }
32+ }
33+
34+ nickserv_notice (user, NSMSG_STR_SETTING, "RECLAIM:", HANDLE_FLAGGED(hi, NICKRECLAIM) ? "On - Your nicks are protected." : "Off.");
35+ return 1;
36+}
37+
38 static OPTION_FUNC(opt_privmsg)
39 {
40 if (argc > 1) {
41@@ -3305,6 +3326,9 @@
42
43 assert(user);
44 assert(ni);
45+
46+ if (!HANDLE_FLAGGED(ni->owner, NICKRECLAIM)) return;
47+
48 switch (action) {
49 case RECLAIM_NONE:
50 /* do nothing */
51@@ -3341,6 +3365,7 @@
52 irc_regnick(user);
53 return 0;
54 }
55+ if (ni && !HANDLE_FLAGGED(ni->owner, NICKRECLAIM)) return 0;
56 if (nickserv_conf.warn_nick_owned) {
57 send_message(user, nickserv, NSMSG_RECLAIM_WARN, ni->nick, ni->owner->handle);
58 }
59@@ -3534,6 +3559,7 @@
60 dict_insert(nickserv_opt_dict, "EPITHET", opt_epithet);
61 dict_insert(nickserv_opt_dict, "ANNOUNCEMENTS", opt_announcements);
62 dict_insert(nickserv_opt_dict, "MAXLOGINS", opt_maxlogins);
63+ dict_insert(nickserv_opt_dict, "RECLAIM", opt_reclaim);
64
65 nickserv_handle_dict = dict_new();
66 dict_set_free_keys(nickserv_handle_dict, free);
67diff -urN services-dist/src/nickserv.h services/src/nickserv.h
68--- services-dist/src/nickserv.h Fri Oct 24 20:05:25 2003
69+++ services/src/nickserv.h Fri Oct 24 20:29:40 2003
70@@ -37,8 +37,9 @@
71 #define HI_FLAG_FROZEN 0x00000040
72 #define HI_FLAG_NODELETE 0x00000080
73 #define HI_FLAG_NETWORK_HELPER 0x00000100
74+#define HI_FLAG_NICKRECLAIM 0x00000200
75 /* Flag characters for the above. First char is LSB, etc. */
76-#define HANDLE_FLAGS "SphgscfnH"
77+#define HANDLE_FLAGS "SphgscfnHR"
78
79 /* HI_STYLE_* go into handle_info.userlist_style */
80 #define HI_STYLE_DEF 'd'