Обсуждение вопросов, связанных с системой проведения турниров ejudge.
-
rimidal - Posts:17
- Joined:19 November 2007, 19:29
Перегенерация регистрационных паролей
Post
by rimidal » 21 January 2015, 12:43
При пегенерации регистрационных паролей для обычных пользователей турнира
система выдает пароли вида:
3c^^3VJ4
-7-2DYc!
XgyS*^ix
Что можно сделать чтобы при генерации использовались только буквы и цифры?
Пробовал править код функции generate_random_password
(файлы genpasswd.c и userlist-server.c), не помогло.
Code: Select all
base64_encode(rnd_buf, rand_bytes, b64_buf);
b64_buf[size] = 0;
for (p = b64_buf; *p; p++) {
// мои исправления начало
if ( '!' <= *p && *p <= '/') *p = '2';
if ( ':' <= *p && *p <= '@') *p = '9';
if ( 'Z' < *p && *p < 'a') *p = '4';
if ( *p > 'z') *p='N';
// мои исправления конец
/* rename: l, I, 1, O, 0*/
switch (*p) {
case 'l': *p = 'E'; break;
case 'I': *p = 'R'; break;
case '1': *p = 'F'; break;
case 'O': *p = 'Q'; break;
case '0': *p = 'M'; break;
}
}
-
cher - Posts:1153
- Joined:13 March 2004, 17:00
-
Contact:
Post
by cher » 21 January 2015, 15:34
Генерация паролей должна поменяться. Возможно, вы не сделали make или make install или не перезапустили ejudge
-
rimidal - Posts:17
- Joined:19 November 2007, 19:29
Post
by rimidal » 22 January 2015, 09:32
Я внес изменения перед установкой.
Попробовал сделать:
Code: Select all
make clean
make
make install
ejduge-control stop
ejduge-control start
Может надо в другом месте изменить?
-
rimidal - Posts:17
- Joined:19 November 2007, 19:29
Post
by rimidal » 22 January 2015, 12:23
Все разобрался. Не до конца поправил функцию в файле userlist-server.c.
Итого: чтобы в генерируемых паролях использовались только буквы и цифры надо
поравить функцию generate_random_password (файлы genpasswd.c и userlist-server.c)
Найти
Code: Select all
// convert to base64
base64_encode(rnd_buf, rand_bytes, b64_buf);
b64_buf[size] = 0;
for (p = b64_buf; *p; p++) {
/* rename: l, I, 1, O, 0*/
switch (*p) {
case 'l': *p = '!'; break;
case 'I': *p = '@'; break;
case '1': *p = '^'; break;
case 'O': *p = '*'; break;
case '0': *p = '-'; break;
}
}
и заменить на
Code: Select all
// convert to base64
base64_encode(rnd_buf, rand_bytes, b64_buf);
b64_buf[size] = 0;
for (p = b64_buf; *p; p++) {
/* rename: l, I, 1, O, 0*/
if ( '!' <= *p && *p <= '/') *p = '2';
if ( ':' <= *p && *p <= '@') *p = '9';
if ( 'Z' < *p && *p < 'a') *p = '4';
if ( *p > 'z') *p='N';
switch (*p) {
case 'l': *p = 'E'; break;
case 'I': *p = 'R'; break;
case '1': *p = 'F'; break;
case 'O': *p = 'Q'; break;
case '0': *p = 'M'; break;
}
}
После чего сделать:
Code: Select all
make clean
make
ejduge-control stop
make install
ejduge-control start
-
cher - Posts:1153
- Joined:13 March 2004, 17:00
-
Contact:
Post
by cher » 22 January 2015, 13:15
Обратите внимание, что пароль получается в результате BASE64 преобразования, поэтому из неалфавитно-цифровых символов в нем могут встречаться только /, = и +
-
rimidal - Posts:17
- Joined:19 November 2007, 19:29
Post
by rimidal » 22 January 2015, 14:19
Тогда еще проще:
Code: Select all
// convert to base64
base64_encode(rnd_buf, rand_bytes, b64_buf);
b64_buf[size] = 0;
for (p = b64_buf; *p; p++) {
/* rename: l, I, 1, O, 0, /, +, = */
switch (*p) {
case 'l': *p = 'E'; break;
case 'I': *p = '7'; break;
case '1': *p = 'F'; break;
case 'O': *p = '6'; break;
case '0': *p = 'M'; break;
case '/': *p = 'v'; break;
case '+': *p = 'M'; break;
case '=': *p = 'u'; break;
}
}