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