diff --git a/logname.c b/logname.c index 6f082d9..cb76f20 100644 --- a/logname.c +++ b/logname.c @@ -105,12 +105,14 @@ char * ln_escape_prompt _P1( (ep), char * ep ) switch ( *ep ) { case 'n': p[i++] = '\n'; break; - case 'r': p[i++] = '\r'; break; case 'g': p[i++] = '\007'; break; + case 'f': p[i++] = '\f'; break; +#ifndef ESCAPE_LIKE_AGETTY + case 'r': p[i++] = '\r'; break; case 'b': p[i++] = '\010'; break; case 'v': p[i++] = '\013'; break; - case 'f': p[i++] = '\f'; break; case 't': p[i++] = '\t'; break; +#endif case 's': /* Operating System */ if ( i + strlen(un.sysname) +1 > MAX_PROMPT_LENGTH ) break; i += strappnd( &p[i], un.sysname ); @@ -119,10 +121,16 @@ char * ln_escape_prompt _P1( (ep), char * ep ) if ( i + strlen(un.machine) +1 > MAX_PROMPT_LENGTH ) break; i += strappnd( &p[i], un.machine ); break; +#ifdef ESCAPE_LIKE_AGETTY + case 'r': /* OS release */ +#endif case 'R': /* OS release */ if ( i + strlen(un.release) +1 > MAX_PROMPT_LENGTH ) break; i += strappnd( &p[i], un.release ); break; +#ifdef ESCAPE_LIKE_AGETTY + case 'v': /* OS version */ +#endif case 'V': /* OS version */ if ( i + strlen(un.version) +1 > MAX_PROMPT_LENGTH ) break; i += strappnd( &p[i], un.version ); @@ -134,6 +142,12 @@ char * ln_escape_prompt _P1( (ep), char * ep ) i += strappnd( &p[i], CallerId ); break; } +#ifdef ESCAPE_LIKE_AGETTY + case 'l': /* this doesn't cause */ + /* conflicts between */ + /* mgetty and agetty */ + /* maybe unconditionalize? */ +#endif case 'P': /* port name */ case 'L': /* tty line */ { @@ -155,13 +169,16 @@ char * ln_escape_prompt _P1( (ep), char * ep ) i += strappnd( &p[i], Connect); break; } - case 'N': /* numer of */ + case 'N': /* number of */ case 'U': /* users */ { sprintf( &p[i], "%d", get_current_users() ); i = strlen(p); break; } +#ifdef ESCAPE_LIKE_AGETTY + case 'b': /* baud rate */ +#endif case 'S': /* port speed */ { /* ugly, I know. */ TIO temp_t; @@ -170,6 +187,10 @@ char * ln_escape_prompt _P1( (ep), char * ep ) i = strlen(p); } break; +#ifdef ESCAPE_LIKE_AGETTY + case 'd': + case 't': +#endif case 'D': /* fallthrough */ case 'T': if ( i + 30 > MAX_PROMPT_LENGTH ) @@ -183,7 +204,7 @@ char * ln_escape_prompt _P1( (ep), char * ep ) if ( tm == NULL ) break; - if ( *ep == 'D' ) + if ( ( *ep == 'D' ) || ( *ep == 'd' ) ) sprintf( &p[i], "%d/%d/%d", tm->tm_mon+1, tm->tm_mday, tm->tm_year + 1900 ); else diff --git a/policy.h b/policy.h index 7946e02..57ccfdb 100644 --- a/policy.h +++ b/policy.h @@ -238,6 +238,14 @@ */ #define NOLOGIN_FILE "/etc/nologin.%s" +/* How to handle escape sequences in /etc/issue and friends. + * + * If ESCAPE_LIKE_AGETTY is defined, escape sequences (stored as backslashes + * followed by some character) will be interpreted in a manner consistent + * with agetty. Not defining ESCAPE_LIKE_AGETTY will cause the default + * behavior to be utilized. + */ +#define ESCAPE_LIKE_AGETTY /* misc */