Print /etc/motd before login shell. Closes #190.

This commit is contained in:
Keith Winstein
2012-04-16 18:19:45 -04:00
parent b4263b354e
commit 68825dccde
+34
View File
@@ -83,6 +83,8 @@ void print_usage( const char *argv0 )
fprintf( stderr, "Usage: %s new [-s] [-v] [-i LOCALADDR] [-p PORT] [-c COLORS] [-l NAME=VALUE] [-- COMMAND...]\n", argv0 ); fprintf( stderr, "Usage: %s new [-s] [-v] [-i LOCALADDR] [-p PORT] [-c COLORS] [-l NAME=VALUE] [-- COMMAND...]\n", argv0 );
} }
void print_motd( void );
/* Simple spinloop */ /* Simple spinloop */
void spin( void ) void spin( void )
{ {
@@ -355,6 +357,11 @@ int run_server( const char *desired_ip, const char *desired_port,
setsid(); /* may fail */ setsid(); /* may fail */
/* reopen stdio */
stdin = fdopen( STDIN_FILENO, "r" );
stdout = fdopen( STDOUT_FILENO, "w" );
stderr = fdopen( STDERR_FILENO, "w" );
/* unblock signals */ /* unblock signals */
sigset_t signals_to_block; sigset_t signals_to_block;
fatal_assert( sigemptyset( &signals_to_block ) == 0 ); fatal_assert( sigemptyset( &signals_to_block ) == 0 );
@@ -384,6 +391,8 @@ int run_server( const char *desired_ip, const char *desired_port,
exit( 1 ); exit( 1 );
} }
print_motd();
if ( execvp( command_path.c_str(), command_argv ) < 0 ) { if ( execvp( command_path.c_str(), command_argv ) < 0 ) {
perror( "execvp" ); perror( "execvp" );
_exit( 1 ); _exit( 1 );
@@ -665,3 +674,28 @@ void serve( int host_fd, Terminal::Complete &terminal, ServerConnection &network
} }
} }
} }
/* OpenSSH prints the motd on startup, so we will too */
void print_motd( void )
{
FILE *motd = fopen( "/etc/motd", "r" );
if ( !motd ) {
return; /* don't report error on missing or forbidden motd */
}
const int BUFSIZE = 256;
char buffer[ BUFSIZE ];
while ( 1 ) {
size_t bytes_read = fread( buffer, 1, BUFSIZE, motd );
if ( bytes_read == 0 ) {
break; /* don't report error */
}
size_t bytes_written = fwrite( buffer, 1, bytes_read, stdout );
if ( bytes_written == 0 ) {
break;
}
}
fclose( motd );
}