Browse Source

ssh: hail the user on a successful auth

Sergey Alirzaev 5 years ago
parent
commit
df7d39a739
3 changed files with 52 additions and 49 deletions
  1. 50 49
      modules/SSH_Server/cli.c
  2. 1 0
      modules/SSH_Server/cli.h
  3. 1 0
      modules/SSH_Server/server.c

+ 50 - 49
modules/SSH_Server/cli.c

@@ -53,7 +53,7 @@ void SensorInfoTimerCallback(TimerHandle_t pxTimer) {
 	xTimerStart(cli_states[num_timer].RepeatSensorInfoTimer, 0);
 	xTimerStart(cli_states[num_timer].RepeatSensorInfoTimer, 0);
 }
 }
 
 
-static portBASE_TYPE FreeRTOS_CLIAuthProcess( int8_t * pcWriteBuffer, cli_state_t *s  )
+static portBASE_TYPE FreeRTOS_CLIAuthProcess( int8_t * pcWriteBuffer, cli_state_t *s)
 {
 {
 	portBASE_TYPE xReturn = pdTRUE;
 	portBASE_TYPE xReturn = pdTRUE;
 	uint32_t len;
 	uint32_t len;
@@ -102,14 +102,14 @@ static portBASE_TYPE FreeRTOS_CLIAuthProcess( int8_t * pcWriteBuffer, cli_state_
 				strcpy( ( char * ) pcWriteBuffer, "\r\nАвторизация успешно пройдена\r\n>" );
 				strcpy( ( char * ) pcWriteBuffer, "\r\nАвторизация успешно пройдена\r\n>" );
 				s->input_state = CLI_CMD;
 				s->input_state = CLI_CMD;
 				switch (user_id) {
 				switch (user_id) {
-				  case 0:
-					  snprintf(name_login_telnet, sizeof(name_login_telnet), "Администратор");
-					  break;
-				  case 1:
-					  snprintf(name_login_telnet, sizeof(name_login_telnet), "Пользователь");
-					  break;
-				  default:
-					  break;
+					case 0:
+						snprintf(name_login_telnet, sizeof(name_login_telnet), "Администратор");
+						break;
+					case 1:
+						snprintf(name_login_telnet, sizeof(name_login_telnet), "Пользователь");
+						break;
+					default:
+						break;
 				}
 				}
 
 
 				log_event_data(LOG_LOGIN_TELNET, name_login_telnet);
 				log_event_data(LOG_LOGIN_TELNET, name_login_telnet);
@@ -145,7 +145,7 @@ static portBASE_TYPE FreeRTOS_CLIAuthProcess( int8_t * pcWriteBuffer, cli_state_
 	return xReturn;
 	return xReturn;
 }
 }
 
 
-static portBASE_TYPE FreeRTOS_ChangePWDProcess( int8_t * pcWriteBuffer, cli_state_t *s  )
+static portBASE_TYPE FreeRTOS_ChangePWDProcess( int8_t * pcWriteBuffer, cli_state_t *s)
 {
 {
 	portBASE_TYPE xReturn = pdTRUE;
 	portBASE_TYPE xReturn = pdTRUE;
 	uint32_t len;
 	uint32_t len;
@@ -215,7 +215,7 @@ static void cli_input(cli_state_t *s)
 			}
 			}
 			break;
 			break;
 		case CLI_CMD:
 		case CLI_CMD:
-			/* The input string has been terminated.  Was the
+			/* The input string has been terminated.	Was the
 			input a quit command? */
 			input a quit command? */
 			if( strcmp( "quit", ( const char * ) s->buf ) == 0 )
 			if( strcmp( "quit", ( const char * ) s->buf ) == 0 )
 			{
 			{
@@ -248,7 +248,7 @@ static void cli_input(cli_state_t *s)
 					/* Ensure there is not a string lingering in
 					/* Ensure there is not a string lingering in
 					the output buffer. */
 					the output buffer. */
 					cOutputBuffer[ 0 ] = 0x00;
 					cOutputBuffer[ 0 ] = 0x00;
-                                        // FIXME telnetState should go into the command processor
+					// FIXME telnetState should go into the command processor
 					//input_state = s->input_state;
 					//input_state = s->input_state;
 					xReturned = FreeRTOS_CLIProcessCommand(s, s->buf, cOutputBuffer, configCOMMAND_INT_MAX_OUTPUT_SIZE );
 					xReturned = FreeRTOS_CLIProcessCommand(s, s->buf, cOutputBuffer, configCOMMAND_INT_MAX_OUTPUT_SIZE );
 					//s->input_state = input_state;
 					//s->input_state = input_state;
@@ -260,11 +260,9 @@ static void cli_input(cli_state_t *s)
 					strcpy( s->prev_cmd, s->buf );
 					strcpy( s->prev_cmd, s->buf );
 					memset( s->buf, 0x00, cmdMAX_INPUT_SIZE );
 					memset( s->buf, 0x00, cmdMAX_INPUT_SIZE );
 					xTimerStart(s->RepeatSensorInfoTimer, 0);
 					xTimerStart(s->RepeatSensorInfoTimer, 0);
-				}
-				else{
-
+				} else {
 					/* All the strings generated by the input
 					/* All the strings generated by the input
-					command have been sent.  Clear the input
+					command have been sent.	Clear the input
 					string ready to receive the next command.
 					string ready to receive the next command.
 					Remember the command that was just processed
 					Remember the command that was just processed
 					first in case it is to be processed again. */
 					first in case it is to be processed again. */
@@ -300,50 +298,53 @@ void cli_getchar(cli_state_t *s, char incoming_char)
 	}
 	}
 
 
 
 
-  if(s->buf[s->bufptr] == ISO_nl ||
-	s->buf[s->bufptr] == 0) {
-	s->bufptr = 0;
-    return;
-  }
-
-  if(s->buf[s->bufptr] == ISO_cr ||
-     s->bufptr == sizeof(s->buf) - 1) {
-    if(s->bufptr > 0) {
-      s->buf[s->bufptr] = 0;
-    }
-    cli_input(s);
-    s->bufptr = 0;
-  } else if( s->buf[s->bufptr] == '\b' || s->buf[s->bufptr] == 0x7f)
-	{
-		/* Backspace was pressed.  Erase the last
+	if(s->buf[s->bufptr] == ISO_nl || s->buf[s->bufptr] == 0) {
+		s->bufptr = 0;
+		return;
+	}
+
+	if(s->buf[s->bufptr] == ISO_cr || s->bufptr == sizeof(s->buf) - 1) {
+		if(s->bufptr > 0) {
+			s->buf[s->bufptr] = 0;
+		}
+		cli_input(s);
+		s->bufptr = 0;
+	} else if( s->buf[s->bufptr] == '\b' || s->buf[s->bufptr] == 0x7f) {
+		/* Backspace was pressed.	Erase the last
 		character in the string - if any. */
 		character in the string - if any. */
-	  	s->buf[s->bufptr] = '\0';
+			s->buf[s->bufptr] = '\0';
 		if( s->bufptr > 0 )
 		if( s->bufptr > 0 )
 		{
 		{
 			s->bufptr--;
 			s->bufptr--;
 			s->buf[s->bufptr] = '\0';
 			s->buf[s->bufptr] = '\0';
 		}
 		}
+	} else if (s->buf[s->bufptr] == 0x03){
+		xTimerStop(s->RepeatSensorInfoTimer, 0);
+		s->flag_telnet_ip_option = true;
+		if(s->input_state != CLI_CHANGE_PWD && s->input_state != CLI_CHANGE_PWD_ACK)
+			s->send( s->num_connect, pcEndOfCommandOutputString, strlen( ( const char * ) pcEndOfCommandOutputString ));
+	} else {
+		++s->bufptr;
 	}
 	}
-  else if (s->buf[s->bufptr] == 0x03){
-	  xTimerStop(s->RepeatSensorInfoTimer, 0);
-	  s->flag_telnet_ip_option = true;
-	  if(s->input_state != CLI_CHANGE_PWD && s->input_state != CLI_CHANGE_PWD_ACK)
-	  	s->send( s->num_connect, pcEndOfCommandOutputString, strlen( ( const char * ) pcEndOfCommandOutputString ));
-  }
-  else {
-    ++s->bufptr;
-  }
 }
 }
 
 
 #define array_len(x) (sizeof(x)/sizeof(x[0]))
 #define array_len(x) (sizeof(x)/sizeof(x[0]))
 
 
 cli_state_t *alloc_state(void)
 cli_state_t *alloc_state(void)
 {
 {
-  for (unsigned i = 0; i < array_len(cli_states); ++i) {
-    if (cli_states[i].state == STATE_UNUSED) {
-      cli_states[i].state = STATE_CLOSE;
-      return &cli_states[i];
-    }
-  }
-  return 0;
+	for (unsigned i = 0; i < array_len(cli_states); ++i) {
+		if (cli_states[i].state == STATE_UNUSED) {
+			cli_states[i].state = STATE_CLOSE;
+			return &cli_states[i];
+		}
+	}
+	return 0;
+}
+
+void cli_hello(cli_state_t *cli_state)
+{
+	cli_state->state = STATE_NORMAL;
+
+	const char hello[] = "hello\r\n>";
+	cli_state->send(cli_state->num_connect, hello, sizeof(hello));
 }
 }

+ 1 - 0
modules/SSH_Server/cli.h

@@ -56,5 +56,6 @@ typedef struct {
 
 
 void cli_getchar(cli_state_t *s, char incoming_char);
 void cli_getchar(cli_state_t *s, char incoming_char);
 cli_state_t *alloc_state(void);
 cli_state_t *alloc_state(void);
+void cli_hello(cli_state_t *cli_state);
 
 
 #endif
 #endif

+ 1 - 0
modules/SSH_Server/server.c

@@ -164,6 +164,7 @@ static void *server_worker(void* vArgs)
         cli_state->num_connect = threadCtx->ssh;
         cli_state->num_connect = threadCtx->ssh;
         cli_state->input_state = CLI_CMD;
         cli_state->input_state = CLI_CMD;
         cli_state->send = cli_send;
         cli_state->send = cli_send;
+        cli_hello(cli_state);
         cli_state->state = STATE_NORMAL;
         cli_state->state = STATE_NORMAL;
 
 
         bool stop = false;
         bool stop = false;