fix possible crash on user deletion
[srvx.git] / patches / ns_reclaim-flag102403.diff
1 diff -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);
67 diff -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'