Перегенерация регистрационных паролей

Обсуждение вопросов, связанных с системой проведения турниров ejudge.
Post Reply
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:

Re: Перегенерация регистрационных паролей

Post by cher » 21 January 2015, 15:34

Генерация паролей должна поменяться. Возможно, вы не сделали make или make install или не перезапустили ejudge

rimidal
Posts:17
Joined:19 November 2007, 19:29

Re: Перегенерация регистрационных паролей

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

Re: Перегенерация регистрационных паролей

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:

Re: Перегенерация регистрационных паролей

Post by cher » 22 January 2015, 13:15

Обратите внимание, что пароль получается в результате BASE64 преобразования, поэтому из неалфавитно-цифровых символов в нем могут встречаться только /, = и +

rimidal
Posts:17
Joined:19 November 2007, 19:29

Re: Перегенерация регистрационных паролей

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;
    }
  }

Post Reply