ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/ircd-hybrid/branches/8.2.x/src/user.c
(Generate patch)

Comparing ircd-hybrid/trunk/src/s_user.c (file contents):
Revision 2145 by michael, Thu May 30 10:57:08 2013 UTC vs.
Revision 2283 by michael, Tue Jun 18 19:13:20 2013 UTC

# Line 52 | Line 52
52   #include "parse.h"
53   #include "watch.h"
54  
55
55   static char umode_buffer[IRCD_BUFSIZE];
56  
57   static void user_welcome(struct Client *);
# Line 73 | Line 72 | struct Isupport
72    int number;
73   };
74  
75 < static dlink_list support_list = { NULL, NULL, 0 };
76 < MessageFile *isupportFile;
75 > static dlink_list support_list;
76 > static dlink_list support_list_lines;
77  
78   /* memory is cheap. map 0-255 to equivalent mode */
79   const unsigned int user_modes[256] =
# Line 86 | Line 85 | const unsigned int user_modes[256] =
85    0,                  /* @ */
86    0,                  /* A */
87    0,                  /* B */
88 <  UMODE_CCONN_FULL,   /* C */
88 >  0,                  /* C */
89    UMODE_DEAF,         /* D */
90    0,                  /* E */
91    UMODE_FARCONNECT,   /* F */
# Line 102 | Line 101 | const unsigned int user_modes[256] =
101    0,                  /* P */
102    0,                  /* Q */
103    UMODE_REGONLY,      /* R */
104 <  0,                  /* S */
104 >  UMODE_SSL,          /* S */
105    0,                  /* T */
106    0,                  /* U */
107    0,                  /* V */
# Line 243 | Line 242 | show_lusers(struct Client *source_p)
242   void
243   show_isupport(struct Client *source_p)
244   {
245 <  send_message_file(source_p, isupportFile);
245 >  const dlink_node *ptr = NULL;
246 >
247 >  DLINK_FOREACH(ptr, support_list_lines.head)
248 >    sendto_one(source_p, form_str(RPL_ISUPPORT), me.name,
249 >               source_p->name, ptr->data);
250   }
251  
252   /*
# Line 421 | Line 424 | register_local_user(struct Client *sourc
424                         get_client_class(&source_p->localClient->confs),
425                         source_p->info, source_p->id);
426  
424  sendto_realops_flags(UMODE_CCONN_FULL, L_ALL, SEND_NOTICE,
425                       "CLICONN %s %s %s %s %s %s %s 0 %s",
426                       source_p->name, source_p->username, source_p->host,
427                       ConfigFileEntry.hide_spoof_ips && IsIPSpoof(source_p) ?
428                       "255.255.255.255" : source_p->sockhost,
429                       get_client_class(&source_p->localClient->confs),
430                       ConfigFileEntry.hide_spoof_ips && IsIPSpoof(source_p) ?
431                           "<hidden>" : source_p->localClient->client_host,
432                       ConfigFileEntry.hide_spoof_ips && IsIPSpoof(source_p) ?
433                           "<hidden>" : source_p->localClient->client_server,
434                       source_p->info);
435
436
427    if (ConfigFileEntry.invisible_on_connect)
428    {
429      AddUMode(source_p, UMODE_INVISIBLE);
# Line 633 | Line 623 | introduce_client(struct Client *source_p
623                     ubuf, source_p->username, source_p->host,
624                     source_p->servptr->name, source_p->info);
625      }
626 +
627 +    if (!EmptyString(source_p->certfp))
628 +      sendto_one(server, ":%s CERTFP %s", ID(source_p), source_p->certfp);
629    }
630   }
631  
# Line 902 | Line 895 | set_user_mode(struct Client *client_p, s
895  
896            break;
897  
898 +        case 'S':  /* Only servers may set +S in a burst */
899          case 'r':  /* Only services may set +r */
900          case 'x':  /* Only services may set +x */
901            break;
# Line 1093 | Line 1087 | user_set_hostmask(struct Client *target_
1087      clear_ban_cache_client(target_p);
1088    }
1089  
1090 +  if (!ConfigFileEntry.cycle_on_host_change)
1091 +    return;
1092 +
1093    DLINK_FOREACH(ptr, target_p->channel.head)
1094    {
1095      char modebuf[4], nickbuf[NICKLEN * 3 + 3] = { '\0' };
# Line 1100 | Line 1097 | user_set_hostmask(struct Client *target_
1097      int len = 0;
1098      const struct Membership *ms = ptr->data;
1099  
1100 <    if (has_member_flags(ms, CHFL_CHANOP)) {
1100 >    if (has_member_flags(ms, CHFL_CHANOP))
1101 >    {
1102        *p++ = 'o';
1103        len += snprintf(nickbuf + len, sizeof(nickbuf) - len, len ? " %s" : "%s", target_p->name);
1104      }
1105  
1106 <    if (has_member_flags(ms, CHFL_HALFOP)) {
1106 >    if (has_member_flags(ms, CHFL_HALFOP))
1107 >    {
1108        *p++ = 'h';
1109        len += snprintf(nickbuf + len, sizeof(nickbuf) - len, len ? " %s" : "%s", target_p->name);
1110      }
1111  
1112 <    if (has_member_flags(ms, CHFL_VOICE)) {
1112 >    if (has_member_flags(ms, CHFL_VOICE))
1113 >    {
1114        *p++ = 'v';
1115        len += snprintf(nickbuf + len, sizeof(nickbuf) - len, len ? " %s" : "%s", target_p->name);
1116      }
# Line 1150 | Line 1150 | user_welcome(struct Client *source_p)
1150   #endif
1151  
1152   #ifdef HAVE_LIBCRYPTO
1153 <  if (source_p->localClient->fd.ssl != NULL)
1153 >  if (HasFlag(source_p, FLAGS_SSL))
1154 >  {
1155 >    AddUMode(source_p, UMODE_SSL);
1156      sendto_one(source_p, ":%s NOTICE %s :*** Connected securely via %s",
1157                 me.name, source_p->name,
1158                 ssl_get_cipher(source_p->localClient->fd.ssl));
1159 +  }
1160   #endif
1161  
1162    sendto_one(source_p, form_str(RPL_WELCOME), me.name, source_p->name,
# Line 1171 | Line 1174 | user_welcome(struct Client *source_p)
1174                 source_p->name, source_p->id);
1175  
1176    show_lusers(source_p);
1177 <
1175 <  if (ConfigFileEntry.short_motd)
1176 <  {
1177 <    sendto_one(source_p, ":%s NOTICE %s :*** Notice -- motd was last changed at %s",
1178 <               me.name, source_p->name, ConfigFileEntry.motd.lastChangedDate);
1179 <    sendto_one(source_p,
1180 <               ":%s NOTICE %s :*** Notice -- Please read the motd if you haven't "
1181 <               "read it", me.name, source_p->name);
1182 <    sendto_one(source_p, form_str(RPL_MOTDSTART),
1183 <               me.name, source_p->name, me.name);
1184 <    sendto_one(source_p, form_str(RPL_MOTD),
1185 <               me.name, source_p->name,
1186 <               "*** This is the short motd ***");
1187 <    sendto_one(source_p, form_str(RPL_ENDOFMOTD),
1188 <               me.name, source_p->name);
1189 <  }
1190 <  else  
1191 <    send_message_file(source_p, &ConfigFileEntry.motd);
1177 >  motd_signon(source_p);
1178   }
1179  
1180   /* check_xline()
# Line 1370 | Line 1356 | uid_get(void)
1356   void
1357   init_isupport(void)
1358   {
1373  isupportFile = init_MessageLine();
1374
1359    add_isupport("CALLERID", NULL, -1);
1360    add_isupport("CASEMAPPING", CASEMAP, -1);
1361    add_isupport("DEAF", "D", -1);
# Line 1384 | Line 1368 | init_isupport(void)
1368    add_isupport("PREFIX", "(ov)@+", -1);
1369    add_isupport("STATUSMSG", "@+", -1);
1370   #endif
1371 +  add_isupport("EXCEPTS", "e", -1);
1372 +  add_isupport("INVEX", "I", -1);
1373   }
1374  
1375   /*
# Line 1467 | Line 1453 | rebuild_isupport_message_line(void)
1453   {
1454    char isupportbuffer[IRCD_BUFSIZE];
1455    char *p = isupportbuffer;
1456 <  dlink_node *ptr = NULL;
1456 >  dlink_node *ptr = NULL, *ptr_next = NULL;
1457    int n = 0;
1458    int tokens = 0;
1459    size_t len = 0;
1460    size_t reserve = strlen(me.name) + HOSTLEN + strlen(form_str(RPL_ISUPPORT));
1461  
1462 <  destroy_MessageLine(isupportFile);
1462 >  DLINK_FOREACH_SAFE(ptr, ptr_next, support_list_lines.head)
1463 >  {
1464 >    dlinkDelete(ptr, &support_list_lines);
1465 >    MyFree(ptr->data);
1466 >    free_dlink_node(ptr);
1467 >  }
1468  
1469    DLINK_FOREACH(ptr, support_list.head)
1470    {
# Line 1503 | Line 1494 | rebuild_isupport_message_line(void)
1494        if (*--p == ' ')
1495          *p = '\0';
1496  
1497 <      addto_MessageLine(isupportFile, isupportbuffer);
1497 >      dlinkAddTail(xstrdup(isupportbuffer), make_dlink_node(), &support_list_lines);
1498        p = isupportbuffer;
1499        len = 0;
1500        n = tokens = 0;
# Line 1514 | Line 1505 | rebuild_isupport_message_line(void)
1505    {
1506      if (*--p == ' ')
1507        *p = '\0';
1508 <    addto_MessageLine(isupportFile, isupportbuffer);
1508 >    dlinkAddTail(xstrdup(isupportbuffer), make_dlink_node(), &support_list_lines);
1509    }
1510   }

Diff Legend

Removed lines
+ Added lines
< Changed lines (old)
> Changed lines (new)