client: handle UID rollover. ircd-ratbox r28917
This commit is contained in:
parent
65f2c0a263
commit
428f9bc117
1 changed files with 13 additions and 4 deletions
|
@ -1860,19 +1860,21 @@ init_uid(void)
|
||||||
char *
|
char *
|
||||||
generate_uid(void)
|
generate_uid(void)
|
||||||
{
|
{
|
||||||
|
static int flipped = 0;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
uid_restart:
|
||||||
for(i = 8; i > 3; i--)
|
for(i = 8; i > 3; i--)
|
||||||
{
|
{
|
||||||
if(current_uid[i] == 'Z')
|
if(current_uid[i] == 'Z')
|
||||||
{
|
{
|
||||||
current_uid[i] = '0';
|
current_uid[i] = '0';
|
||||||
return current_uid;
|
goto out;
|
||||||
}
|
}
|
||||||
else if(current_uid[i] != '9')
|
else if(current_uid[i] != '9')
|
||||||
{
|
{
|
||||||
current_uid[i]++;
|
current_uid[i]++;
|
||||||
return current_uid;
|
goto out;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
current_uid[i] = 'A';
|
current_uid[i] = 'A';
|
||||||
|
@ -1882,11 +1884,18 @@ generate_uid(void)
|
||||||
if(current_uid[3] == 'Z')
|
if(current_uid[3] == 'Z')
|
||||||
{
|
{
|
||||||
current_uid[i] = 'A';
|
current_uid[i] = 'A';
|
||||||
s_assert(0);
|
flipped = 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
current_uid[i]++;
|
current_uid[i]++;
|
||||||
|
out:
|
||||||
|
/* if this happens..well, i'm not sure what to say, but lets handle it correctly */
|
||||||
|
if(rb_unlikely(flipped))
|
||||||
|
{
|
||||||
|
/* this slows down uid generation a bit... */
|
||||||
|
if(find_id(current_uid) != NULL)
|
||||||
|
goto uid_restart;
|
||||||
|
}
|
||||||
return current_uid;
|
return current_uid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue