ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/branches/newio/src/s_user.c
(Generate patch)

Comparing ircd-hybrid-7.2/src/s_user.c (file contents):
Revision 528 by michael, Sat Mar 18 15:13:11 2006 UTC vs.
Revision 573 by michael, Mon May 1 09:40:37 2006 UTC

# Line 423 | Line 423 | register_local_user(struct Client *clien
423    if (IsDead(client_p))
424      return;
425  
426 <  if (source_p->id[0] == '\0' && me.id[0])
426 >  if (me.id[0])
427    {
428 <    char *id = (char *)execute_callback(uid_get_cb, source_p);
428 >    const char *id = execute_callback(uid_get_cb, source_p);
429 >
430      while (hash_find_id(id) != NULL)
431        id = uid_get(NULL);
432  
# Line 1113 | Line 1114 | void
1114   send_umode_out(struct Client *client_p, struct Client *source_p,
1115                 unsigned int old)
1116   {
1117 <  char buf[IRCD_BUFSIZE];
1117 >  char buf[IRCD_BUFSIZE] = { '\0' };
1118    dlink_node *ptr = NULL;
1119  
1120    send_umode(NULL, source_p, old, IsOperHiddenAdmin(source_p) ?
1121               SEND_UMODES & ~UMODE_ADMIN : SEND_UMODES, buf);
1122  
1123 <  if (*buf)
1123 >  if (buf[0])
1124    {
1125      DLINK_FOREACH(ptr, serv_list.head)
1126      {
# Line 1325 | Line 1326 | oper_up(struct Client *source_p)
1326    send_message_file(source_p, &ConfigFileEntry.opermotd);
1327   }
1328  
1329 < /*
1329 < * Quick and dirty UID code for new proposed SID on EFnet
1330 < *
1331 < */
1329 > static char new_uid[TOTALSIDUID + 1];     /* allow for \0 */
1330  
1331 < static char new_uid[TOTALSIDUID+1];     /* allow for \0 */
1332 < static void add_one_to_uid(int i);
1331 > int
1332 > valid_sid(const char *sid)
1333 > {
1334 >
1335 >  if (strlen(sid) == IRC_MAXSID)
1336 >    if (IsDigit(*sid))
1337 >      if (IsUpper(*(sid + 1)) && IsUpper(*(sid + 2)))
1338 >        return 1;
1339 >
1340 >  return 0;
1341 > }
1342  
1343   /*
1344   * init_uid()
# Line 1351 | Line 1358 | init_uid(void)
1358  
1359    if (ServerInfo.sid != NULL)
1360    {
1361 <    memcpy(new_uid, ServerInfo.sid, IRCD_MIN(strlen(ServerInfo.sid),
1362 <                                             IRC_MAXSID));
1363 <    memcpy(&me.id, ServerInfo.sid, IRCD_MIN(strlen(ServerInfo.sid),
1357 <                                            IRC_MAXSID));
1361 >    strlcpy(new_uid, ServerInfo.sid, sizeof(new_uid));
1362 >    strlcpy(me.id, ServerInfo.sid, sizeof(me.id));
1363 >
1364      hash_add_id(&me);
1365    }
1366  
# Line 1362 | Line 1368 | init_uid(void)
1368      if (new_uid[i] == '\0')
1369        new_uid[i] = 'A';
1370  
1371 <  /* XXX if IRC_MAXUID != 6, this will have to be rewritten */
1371 >  /* NOTE: if IRC_MAXUID != 6, this will have to be rewritten */
1372    /* Yes nenolod, I have known it was off by one ever since I wrote it
1373     * But *JUST* for you, though, it really doesn't look as *pretty*
1374     * -Dianora
1375     */
1376 <  memcpy(new_uid+IRC_MAXSID, "AAAAA@", IRC_MAXUID);
1376 >  memcpy(new_uid + IRC_MAXSID, "AAAAA@", IRC_MAXUID);
1377  
1378    entering_umode_cb = register_callback("entering_umode", NULL);
1379    umode_cb = register_callback("changing_umode", change_simple_umode);
# Line 1375 | Line 1381 | init_uid(void)
1381   }
1382  
1383   /*
1378 * uid_get
1379 *
1380 * inputs       - struct Client *
1381 * output       - new UID is returned to caller
1382 * side effects - new_uid is incremented by one.
1383 */
1384 static void *
1385 uid_get(va_list args)
1386 {
1387  add_one_to_uid(TOTALSIDUID-1);    /* index from 0 */
1388  return ((void *) new_uid);
1389 }
1390
1391 /*
1384   * add_one_to_uid
1385   *
1386   * inputs       - index number into new_uid
# Line 1408 | Line 1400 | add_one_to_uid(int i)
1400        new_uid[i] = 'A';
1401        add_one_to_uid(i-1);
1402      }
1403 <    else new_uid[i] = new_uid[i] + 1;
1403 >    else
1404 >      ++new_uid[i];
1405    }
1406    else
1407    {
1408 <    /* XXX if IRC_MAXUID != 6, this will have to be rewritten */
1408 >    /* NOTE: if IRC_MAXUID != 6, this will have to be rewritten */
1409      if (new_uid[i] == 'Z')
1410 <      memcpy(new_uid+IRC_MAXSID, "AAAAAA", IRC_MAXUID);
1410 >      memcpy(new_uid + IRC_MAXSID, "AAAAAA", IRC_MAXUID);
1411      else
1412 <      new_uid[i] = new_uid[i] + 1;
1412 >      ++new_uid[i];
1413    }
1414   }
1415  
1416   /*
1417 + * uid_get
1418 + *
1419 + * inputs       - struct Client *
1420 + * output       - new UID is returned to caller
1421 + * side effects - new_uid is incremented by one.
1422 + */
1423 + static void *
1424 + uid_get(va_list args)
1425 + {
1426 +  add_one_to_uid(TOTALSIDUID - 1);    /* index from 0 */
1427 +  return new_uid;
1428 + }
1429 +
1430 + /*
1431   * init_isupport()
1432   *
1433   * input        - NONE

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines