X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=libbb%2Flogin.c;h=b3e199ce42e8c120de68437edf9c9de35b28ed48;hb=1fd1ea4395e520694bd9f8b1dc9e60af6442946d;hp=d1f5d6498e07be26f674c739ba4cbf46e6958b88;hpb=c9ca0a32745a43eaa6cb6b7b460718de8ccb84f2;p=oweals%2Fbusybox.git diff --git a/libbb/login.c b/libbb/login.c index d1f5d6498..b3e199ce4 100644 --- a/libbb/login.c +++ b/libbb/login.c @@ -18,9 +18,9 @@ static const char fmtstr_d[] ALIGN1 = "%A, %d %B %Y"; static const char fmtstr_t[] ALIGN1 = "%H:%M:%S"; -void print_login_issue(const char *issue_file, const char *tty) +void FAST_FUNC print_login_issue(const char *issue_file, const char *tty) { - FILE *fd; + FILE *fp; int c; char buf[256+1]; const char *outbuf; @@ -32,10 +32,10 @@ void print_login_issue(const char *issue_file, const char *tty) puts("\r"); /* start a new line */ - fd = fopen(issue_file, "r"); - if (!fd) + fp = fopen_for_read(issue_file); + if (!fp) return; - while ((c = fgetc(fd)) != EOF) { + while ((c = fgetc(fp)) != EOF) { outbuf = buf; buf[0] = c; buf[1] = '\0'; @@ -44,12 +44,13 @@ void print_login_issue(const char *issue_file, const char *tty) buf[2] = '\0'; } if (c == '\\' || c == '%') { - c = fgetc(fd); + c = fgetc(fp); switch (c) { case 's': outbuf = uts.sysname; break; case 'n': + case 'h': outbuf = uts.nodename; break; case 'r': @@ -63,8 +64,7 @@ void print_login_issue(const char *issue_file, const char *tty) break; case 'D': case 'o': - c = getdomainname(buf, sizeof(buf) - 1); - buf[c >= 0 ? c : 0] = '\0'; + outbuf = uts.domainname; break; case 'd': strftime(buf, sizeof(buf), fmtstr_d, localtime(&t)); @@ -72,10 +72,6 @@ void print_login_issue(const char *issue_file, const char *tty) case 't': strftime(buf, sizeof(buf), fmtstr_t, localtime(&t)); break; - case 'h': - gethostname(buf, sizeof(buf) - 1); - buf[sizeof(buf) - 1] = '\0'; - break; case 'l': outbuf = tty; break; @@ -85,19 +81,18 @@ void print_login_issue(const char *issue_file, const char *tty) } fputs(outbuf, stdout); } - fclose(fd); + fclose(fp); fflush(stdout); } -void print_login_prompt(void) +void FAST_FUNC print_login_prompt(void) { - char buf[MAXHOSTNAMELEN+1]; - - if (gethostname(buf, MAXHOSTNAMELEN) == 0) - fputs(buf, stdout); + char *hostname = safe_gethostname(); + fputs(hostname, stdout); fputs(LOGIN, stdout); fflush(stdout); + free(hostname); } /* Clear dangerous stuff, set PATH */ @@ -116,7 +111,7 @@ static const char forbid[] ALIGN1 = "LD_NOWARN" "\0" "LD_KEEPDIR" "\0"; -int sanitize_env_if_suid(void) +int FAST_FUNC sanitize_env_if_suid(void) { const char *p;