source: MondoRescue/branches/2.2.5/mindi-busybox/libbb/login.c

Last change on this file was 1765, checked in by Bruno Cornec, 16 years ago

Update to busybox 1.7.2

File size: 1.9 KB
Line 
1/* vi: set sw=4 ts=4: */
2/*
3 * issue.c: issue printing code
4 *
5 * Copyright (C) 2003 Bastian Blank <waldi@tuxbox.org>
6 *
7 * Optimize and correcting OCRNL by Vladimir Oleynik <dzo@simtreas.ru>
8 *
9 * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
10 */
11
12#include <sys/param.h> /* MAXHOSTNAMELEN */
13#include <sys/utsname.h>
14#include "libbb.h"
15
16#define LOGIN " login: "
17
18static const char fmtstr_d[] ALIGN1 = "%A, %d %B %Y";
19static const char fmtstr_t[] ALIGN1 = "%H:%M:%S";
20
21void print_login_issue(const char *issue_file, const char *tty)
22{
23 FILE *fd;
24 int c;
25 char buf[256+1];
26 const char *outbuf;
27 time_t t;
28 struct utsname uts;
29
30 time(&t);
31 uname(&uts);
32
33 puts("\r"); /* start a new line */
34
35 fd = fopen(issue_file, "r");
36 if (!fd)
37 return;
38 while ((c = fgetc(fd)) != EOF) {
39 outbuf = buf;
40 buf[0] = c;
41 buf[1] = '\0';
42 if (c == '\n') {
43 buf[1] = '\r';
44 buf[2] = '\0';
45 }
46 if (c == '\\' || c == '%') {
47 c = fgetc(fd);
48 switch (c) {
49 case 's':
50 outbuf = uts.sysname;
51 break;
52 case 'n':
53 outbuf = uts.nodename;
54 break;
55 case 'r':
56 outbuf = uts.release;
57 break;
58 case 'v':
59 outbuf = uts.version;
60 break;
61 case 'm':
62 outbuf = uts.machine;
63 break;
64 case 'D':
65 case 'o':
66 c = getdomainname(buf, sizeof(buf) - 1);
67 buf[c >= 0 ? c : 0] = '\0';
68 break;
69 case 'd':
70 strftime(buf, sizeof(buf), fmtstr_d, localtime(&t));
71 break;
72 case 't':
73 strftime(buf, sizeof(buf), fmtstr_t, localtime(&t));
74 break;
75 case 'h':
76 gethostname(buf, sizeof(buf) - 1);
77 buf[sizeof(buf) - 1] = '\0';
78 break;
79 case 'l':
80 outbuf = tty;
81 break;
82 default:
83 buf[0] = c;
84 }
85 }
86 fputs(outbuf, stdout);
87 }
88 fclose(fd);
89 fflush(stdout);
90}
91
92void print_login_prompt(void)
93{
94 char buf[MAXHOSTNAMELEN+1];
95
96 if (gethostname(buf, MAXHOSTNAMELEN) == 0)
97 fputs(buf, stdout);
98
99 fputs(LOGIN, stdout);
100 fflush(stdout);
101}
Note: See TracBrowser for help on using the repository browser.