Update getty

This commit is contained in:
Pascal Vizeli 2018-03-28 23:56:03 +02:00
parent 615bb9c370
commit ba8284d2bd
9 changed files with 195 additions and 3 deletions

View File

@ -0,0 +1 @@
source "$BR2_EXTERNAL_HASSIO_PATH/package/mingetty/Config.in"

View File

@ -24,6 +24,7 @@ BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y
BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
# BR2_PACKAGE_BUSYBOX is not set
BR2_PACKAGE_ALSA_UTILS=y
BR2_PACKAGE_JQ=y
BR2_PACKAGE_DOSFSTOOLS=y
BR2_PACKAGE_E2FSPROGS=y
BR2_PACKAGE_SQUASHFS=y
@ -50,8 +51,6 @@ BR2_PACKAGE_RAUC_NETWORK=y
# BR2_PACKAGE_SYSTEMD_NETWORKD is not set
BR2_PACKAGE_SYSTEMD_RANDOMSEED=y
# BR2_PACKAGE_SYSTEMD_RESOLVED is not set
BR2_PACKAGE_UTIL_LINUX_AGETTY=y
BR2_PACKAGE_UTIL_LINUX_KILL=y
BR2_PACKAGE_VIM=y
# BR2_PACKAGE_VIM_RUNTIME is not set
BR2_TARGET_ROOTFS_SQUASHFS=y
@ -66,3 +65,4 @@ BR2_PACKAGE_HOST_E2FSPROGS=y
BR2_PACKAGE_HOST_GPTFDISK=y
BR2_PACKAGE_HOST_MTOOLS=y
BR2_PACKAGE_HOST_RAUC=y
BR2_PACKAGE_MINGETTY=y

View File

@ -1 +1 @@
#include $(sort $(wildcard $(BR2_EXTERNAL_HASSIO_PATH)/package/*/*.mk))
include $(sort $(wildcard $(BR2_EXTERNAL_HASSIO_PATH)/package/*/*.mk))

View File

@ -0,0 +1,3 @@
[Service]
ExecStart=
ExecStart=-/sbin/mingetty --noclear %I

View File

@ -0,0 +1,2 @@
[Service]
TTYVTDisallocate=no

View File

@ -0,0 +1,156 @@
diff -Nru mingetty-1.07.orig/mingetty.c mingetty-1.07/mingetty.c
--- mingetty-1.07.orig/mingetty.c 2004-01-03 15:15:56.000000000 +0200
+++ mingetty-1.07/mingetty.c 2006-11-22 22:13:26.967910100 +0200
@@ -16,10 +16,15 @@
* - autologin only at first login
* - /etc/mingetty.conf that can be used instead of /etc/inittab for
* command line options
- * - Can UTF-8 setup be done within mingetty?
+ * - Can UTF-8 setup be done within mingetty? Let's try now :-) (VinzC)
* - Also add /bin/login-type functionality in here?
*/
+/* Additional comments: Vincent Cadet <vcadet@hotmail.com> (2006-11-21)
+ * - Attempt to make mingetty support UTF-8. Modifications were imported
+ * from Suse migetty.c 0.9.6s.
+ */
+
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
@@ -39,6 +44,19 @@
#include <syslog.h>
#include <sys/utsname.h>
#include <time.h>
+#include <locale.h>
+#include <iconv.h>
+#include <wctype.h>
+#include <sys/kd.h>
+#include <sys/ttydefaults.h>
+
+#ifndef IUTF8
+# ifndef ASM_IUTF8
+# error ASM_IUTF8 input flag not defined - Cannot define IUTF8
+# else
+# define IUTF8 ASM_IUTF8
+# endif
+#endif
/* name of this program (argv[0]) */
static char *progname;
@@ -74,6 +92,8 @@
static char *autologin = NULL;
/* try to read a char before dropping to login prompt */
static int loginpause = 0;
+/* terminal mode */
+static int mode = K_RAW;
/* error() - output error messages */
static void error (const char *fmt, ...)
@@ -187,10 +207,21 @@
if (fd > 2)
close (fd);
+ /* Detect mode of current keyboard setup, e.g. for UTF-8 */
+ if (ioctl(0, KDGKBMODE, &mode) < 0)
+ mode = K_RAW;
+
/* Write a reset string to the terminal. This is very linux-specific
and should be checked for other systems. */
if (noclear == 0)
- write (0, "\033c", 2);
+ /* don't write a full reset (ESC c) because this leaves the
+ unicode mode again if the terminal was in unicode mode
+ and also undos the ESC sequences in CONSOLE_MAGIC which
+ are needed for some languages/console-fonts.
+ Just put the cursor to the home position (ESC [ H),
+ erase everything below the cursor (ESC [ J), and set the
+ scrolling region to the full window (ESC [ r) */
+ write (0, "\033[r\033[H\033[J", 9);
sigaction (SIGHUP, &sa_old, NULL);
}
@@ -292,32 +323,75 @@
static char *get_logname (void)
{
- static char logname[40];
+ static char logname[4*UT_NAMESIZE];
char *bp;
unsigned char c;
+ int ascii;
+ iconv_t ic;
tcflush (0, TCIFLUSH); /* flush pending input */
+
+ /* Check for UTF-8 mode */
+ switch(mode) {
+ case K_UNICODE:
+ ascii = 0;
+ setlocale(LC_CTYPE, "en_US.UTF-8");
+ break;
+ case K_RAW:
+ case K_MEDIUMRAW:
+ case K_XLATE:
+ default:
+ ascii = 1;
+ setlocale(LC_CTYPE, "POSIX");
+ break;
+ }
+
for (*logname = 0; *logname == 0;) {
do_prompt (1);
for (bp = logname;;) {
if (read (0, &c, 1) < 1) {
- if (errno == EINTR || errno == EIO
- || errno == ENOENT)
+ if (errno == EINTR || errno == EAGAIN) {
+ usleep(1000);
+ continue;
+ }
+ if (errno == EIO || errno == ENOENT)
exit (EXIT_SUCCESS);
error ("%s: read: %s", tty, strerror (errno));
}
if (c == '\n' || c == '\r') {
*bp = 0;
break;
- } else if (!isprint (c))
- error ("%s: invalid character 0x%x in login"
- " name", tty, c);
+ }
+
+ if (ascii && !isprint (c))
+ error ("%s: invalid character 0x%x in login name", tty, c);
else if ((size_t)(bp - logname) >= sizeof (logname) - 1)
error ("%s: too long login name", tty);
- else
- *bp++ = c;
+
+ *bp++ = c;
}
}
+
+ if (!ascii && (ic = iconv_open("WCHAR_T", "UTF-8"))) {
+ char tmpbuf[4*sizeof(logname)], *op, *lp;
+ size_t len = bp - logname;
+ size_t out = sizeof(tmpbuf) - 1;
+ size_t wcl;
+ wint_t *wcp;
+
+ op = tmpbuf;
+ lp = logname;
+ if ((wcl = iconv(ic , &lp, &len, &op, &out)) == (size_t)-1)
+ error ("%s: invalid character conversion for login name", tty);
+ iconv_close(ic);
+
+ wcp = (wint_t*)tmpbuf;
+ wcp[wcl] = (wint_t)0;
+ while (*wcp) {
+ if (!iswprint(*wcp++))
+ error ("%s: invalid character for login name found", tty);
+ }
+ }
return logname;
}

View File

@ -0,0 +1,7 @@
config BR2_PACKAGE_MINGETTY
bool "mingetty"
help
mingetty is a minimal getty for use on virtual consoles and is not
suitable for use on serial lines.
http://sourceforge.net/projects/mingetty/

View File

@ -0,0 +1 @@
sha1 283acd3dc9da2c9eb71d5d7cc01d1bd178254523 mingetty-1.08.tar.gz

View File

@ -0,0 +1,22 @@
#############################################################
#
# mingetty
#
#############################################################
MINGETTY_VERSION = 1.08
MINGETTY_SOURCE = mingetty-$(MINGETTY_VERSION).tar.gz
MINGETTY_SITE = http://downloads.sourceforge.net/project/mingetty/mingetty/$(MINGETTY_VERSION)
define MINGETTY_BUILD_CMDS
$(MAKE) CC=$(TARGET_CC) -C $(@D)
endef
define MINGETTY_INSTALL_TARGET_CMDS
$(INSTALL) -D -m 0755 $(@D)/mingetty $(TARGET_DIR)/sbin
endef
define MINGETTY_CLEAN_CMDS
$(MAKE) -C $(@D) clean
endef
$(eval $(generic-package))