Ver código fonte

ssh: hail the user on a successful auth

Sergey Alirzaev 5 anos atrás
pai
commit
df7d39a739
3 arquivos alterados com 52 adições e 49 exclusões
  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);
 }
 
-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;
 	uint32_t len;
@@ -102,14 +102,14 @@ static portBASE_TYPE FreeRTOS_CLIAuthProcess( int8_t * pcWriteBuffer, cli_state_
 				strcpy( ( char * ) pcWriteBuffer, "\r\nАвторизация успешно пройдена\r\n>" );
 				s->input_state = CLI_CMD;
 				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);
@@ -145,7 +145,7 @@ static portBASE_TYPE FreeRTOS_CLIAuthProcess( int8_t * pcWriteBuffer, cli_state_
 	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;
 	uint32_t len;
@@ -215,7 +215,7 @@ static void cli_input(cli_state_t *s)
 			}
 			break;
 		case CLI_CMD:
-			/* The input string has been terminated.  Was the
+			/* The input string has been terminated.	Was the
 			input a quit command? */
 			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
 					the output buffer. */
 					cOutputBuffer[ 0 ] = 0x00;
-                                        // FIXME telnetState should go into the command processor
+					// FIXME telnetState should go into the command processor
 					//input_state = s->input_state;
 					xReturned = FreeRTOS_CLIProcessCommand(s, s->buf, cOutputBuffer, configCOMMAND_INT_MAX_OUTPUT_SIZE );
 					//s->input_state = input_state;
@@ -260,11 +260,9 @@ static void cli_input(cli_state_t *s)
 					strcpy( s->prev_cmd, s->buf );
 					memset( s->buf, 0x00, cmdMAX_INPUT_SIZE );
 					xTimerStart(s->RepeatSensorInfoTimer, 0);
-				}
-				else{
-
+				} else {
 					/* 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.
 					Remember the command that was just processed
 					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. */
-	  	s->buf[s->bufptr] = '\0';
+			s->buf[s->bufptr] = '\0';
 		if( s->bufptr > 0 )
 		{
 			s->bufptr--;
 			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]))
 
 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);
 cli_state_t *alloc_state(void);
+void cli_hello(cli_state_t *cli_state);
 
 #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->input_state = CLI_CMD;
         cli_state->send = cli_send;
+        cli_hello(cli_state);
         cli_state->state = STATE_NORMAL;
 
         bool stop = false;