summaryrefslogtreecommitdiffstats
path: root/term-utils
Commit message (Collapse)AuthorAgeFilesLines
* Remove isascii usageRosen Penev2019-08-082-2/+4
| | | | | | | There is a c_isascii function that can be used. isascii is deprecated and not available with some libcs like uClibc-ng where it can be compile time disabled.
* agetty: simplify code in dolog() preprocessor blocksSami Kerola2019-07-241-26/+20Star
| | | | | | | | Aim is to make dolog() a lot more readable and understandable, with downside of when (rarely?) USE_SYSLOG it not defined the function will use a bit more space from stack. I think that is price well worth paying. Signed-off-by: Sami Kerola <kerolasa@iki.fi>
* agetty: Remove superfluous fflush()Stanislav Brabec2019-06-211-2/+0Star
| | | | | | | | | | | | | | eval_issue_file() contains fflush(stdout). It comes from an old code that used fputs() to write to the console. In the new code, we write to a temporary memstream, and fclose(ie->output) fully replaces possible fflush(ie->output) in this implementation. The new print_issue_file() does not need it as well, as it uses unbuffered write_all(). Signed-off-by: Stanislav Brabec <sbrabec@suse.cz>
* wall: make sure ut_line is not emptyKarel Zak2019-06-061-4/+6
| | | | | Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1711574 Signed-off-by: Karel Zak <kzak@redhat.com>
* mesg: avoid 'ttyname failed: Success' messageKarel Zak2019-05-273-5/+17
| | | | | | | | | | | | | The ttyname(3) can fail to access /dev/ path, and that will cause function to fail without setting errno value with result of rather confusing error message. Lets start setting stdin permission via /proc when this happens as a go-around, with hope kernel following symlink does not fail. Ok, noted, that hopes of symlink follow working are pretty slim. Based on patch from Sami Kerola <kerolasa@iki.fi>. Reference: https://github.com/lxc/lxd/issues/1724 Signed-off-by: Karel Zak <kzak@redhat.com>
* misc: consolidate version printing and close_stdout()Karel Zak2019-04-166-20/+17Star
| | | | Signed-off-by: Karel Zak <kzak@redhat.com>
* setterm: fix --hbcolor descriptionJakub Wilk2019-03-082-2/+2
| | | | | | | --hbcolor is for half-bright characters, which is sort of opposite of bold. Signed-off-by: Jakub Wilk <jwilk@jwilk.net>
* setterm: update comments about -ulcolor/-hbcolor syntaxJakub Wilk2019-03-071-2/+2
| | | | Signed-off-by: Jakub Wilk <jwilk@jwilk.net>
* setterm: fix bright colors for --ulcolor/--hbcolorJakub Wilk2019-03-071-0/+3
| | | | | | | The "bright" keyword was parsed, but it didn't actually affect the color that was set. Signed-off-by: Jakub Wilk <jwilk@jwilk.net>
* setterm: disallow "default" for --ulcolor/--hbcolorJakub Wilk2019-03-071-1/+1
| | | | | | | Passing "default" to --ulcolor or --hbcolor worked, but it set the color to bright red. This was not a documented syntax, so let's forbid it. Signed-off-by: Jakub Wilk <jwilk@jwilk.net>
* agetty: Switch to 8-bit processing in get_logname() for UTF-8 terminalsStanislav Brabec2019-03-041-1/+1
| | | | | | | | | If the terminal is in the UTF-8 mode, get_logname() should use 8-bit processing. Signed-off-by: Stanislav Brabec <sbrabec@suse.cz> Cc: Lubomir Rintel <lkundrak@v3.sk> Tested-by: Lubomir Rintel <lkundrak@v3.sk>
* agetty: Fix input of non-ASCII characters in get_logname()Stanislav Brabec2019-03-041-2/+0Star
| | | | | | | | | | | | | | | | | As login supports non-ASCII characters in the logname, agetty should be consistent. 8b58ffdd re-activated old and ASCII-only get_logname(), which restricted the input to ASCII only. As the code does not read whole characters, isascii(ascval) and isprint(ascval) returns nonsenses after entering a non-ASCII character. As keyboard maps don't contain unprintable non-control characters, it seems to be relatively safe to remove both checks. Signed-off-by: Stanislav Brabec <sbrabec@suse.cz> Cc: Lubomir Rintel <lkundrak@v3.sk> Tested-by: Lubomir Rintel <lkundrak@v3.sk>
* docs: fix typos [codespell]Sami Kerola2019-02-181-1/+1
| | | | | Reference: https://github.com/codespell-project/codespell Signed-off-by: Sami Kerola <kerolasa@iki.fi>
* hardlink, wall: fix variable shadowingSami Kerola2019-02-181-6/+6
| | | | | | | | | | | | | misc-utils/hardlink.c:91:65: warning: declaration shadows a variable in the global scope [-Wshadow] misc-utils/hardlink.c:73:5: note: previous declaration is here int content_only = 0; term-utils/wall.c:114:40: warning: declaration shadows a variable in the global scope [-Wshadow] term-utils/wall.c:129:65: warning: declaration shadows a variable in the global scope [-Wshadow] /usr/include/bits/getopt_core.h:36:14: note: previous declaration is here extern char *optarg; Signed-off-by: Sami Kerola <kerolasa@iki.fi>
* wall: remove unnecessary warningKarel Zak2019-02-141-1/+0Star
| | | | | | | | | wall(1) may be used in scripts or in pipe. In this case report failed ttyname() does not make sense, especially if the code does not depend on on this function. Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1608176 Signed-off-by: Karel Zak <kzak@redhat.com>
* agetty: Return old behavior with empty lognameStanislav Brabec2018-11-211-1/+1
| | | | | | | | c094fcd37 introduced a behavior change: When Return is entered with empty logname, nothing happens. As it confuses users, return back the old behavior: re-prompt. Signed-off-by: Stanislav Brabec <sbrabec@suse.cz>
* agetty: fix output of escaped charactersChristian Hesse2018-11-121-1/+1
| | | | Signed-off-by: Christian Hesse <mail@eworm.de>
* agetty: fix portability issuesSamuel Thibault2018-11-121-1/+5
| | | | Signed-off-by: Karel Zak <kzak@redhat.com>
* agetty: when logname is erased, re-enable reloadsStanislav Brabec2018-10-311-0/+3
| | | | | | | | | | | | | When user starts to enter logname, 8b58ffdd blocks issue reloads. Reloads remain blocked even if user deletes all typed characters. Make things visually consistent: If no characters are entered, re-enable reloads. Signed-off-by: Stanislav Brabec <sbrabec@suse.cz> Signed-off-by: Karel Zak <kzak@redhat.com> Reviewed-by: Lubomir Rintel <lkundrak@v3.sk> Tested-by: Lubomir Rintel <lkundrak@v3.sk>
* agetty: don't put the VC into canonical modeLubomir Rintel2018-10-221-8/+18
| | | | | | | | | | | | | | | | | The wait_for_term_input()'s select() needs to be tripped when the user starts typing. Otherwise the reloads can abort an already in-progress login. Coupled with \4 and \6 expansions that happen to be there on Fedora Server, this means reload on every netlink event. With a couple of IPv6 routers announcing their networks and temporary addresses in use can make it sometimes virtually impossible to log in. Seems like zero lflags do the job just fine on a Linux VT. Reset it to canonical mode before running login. Signed-off-by: Lubomir Rintel <lkundrak@v3.sk> Signed-off-by: Stanislav Brabec <sbrabec@suse.cz> Signed-off-by: Karel Zak <kzak@redhat.com>
* agetty: don't use __u32Karel Zak2018-10-111-1/+1
| | | | Signed-off-by: Karel Zak <kzak@redhat.com>
* agetty: make output more robustKarel Zak2018-10-111-1/+6
| | | | Signed-off-by: Karel Zak <kzak@redhat.com>
* agetty: cleanup issue output change, remove boolKarel Zak2018-10-111-16/+14Star
| | | | Signed-off-by: Karel Zak <kzak@redhat.com>
* agetty: move all issue variables to structKarel Zak2018-10-111-79/+101
| | | | Signed-off-by: Karel Zak <kzak@redhat.com>
* agetty: Reload only if it is really neededStanislav Brabec2018-10-111-41/+100
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If netlink event arrives and related escapes are part of issue, agetty reloads and re-display the prompt. Reload is triggered not only by IP address change, but also by IPv6 RAs. In some environments it causes reload several times in a minute, and even complicates the login. To prevent this, reload only if a real change appears. This consists of: split print_issue_file() to several functions: eval_issue_file() prints issue to memory. It does not affect terminal in any way. print_issue_file() prints issue file from memory. cmp_issue_file() compares the issue file and returns true, if reload is needed. The implementation requires additional change: do_prompt() does not evaluate the issue file. It is responsibility of calling function. Test suite: Use issue that contais \4 and/or \6 escape. After installing new instance, restart agetty by typing a letter and then Enter 6 times. To check whether reload happens, type a letter. When reload happens, letter disappears. 1. Unplug network cable. Wait a while and re-plug network cable. You should see 2 reloads on single stack and 3 reloads on dual stack. 2. Run a loop while : ; do sed -i '$areload_test' /etc/issue agetty --reload sleep 3 sed -i '/reload_test/d' /etc/issue agetty --reload sleep 3 done You should see regular reload every 3 seconds. 3. Run a loop while : ; do agetty --reload sleep 3 done Before: You see regular reload every 3 seconds. After: No reloads. 4. Run a loop while : ; do ifconfig lo 127.0.0.1 netmask 255.0.0.0 sleep 3 ifconfig lo 127.0.0.2 netmask 255.0.0.0 sleep 3 done Before: You see regular reload every 3 seconds. After: No reloads. Signed-off-by: Stanislav Brabec <sbrabec@suse.cz>
* agetty: Watch only protocol requested by issue escapesStanislav Brabec2018-10-111-5/+14
| | | | | | | To decrease number of reloads, watch only protocol requested by \4 and \6 escapes in issue file. Signed-off-by: Stanislav Brabec <sbrabec@suse.cz>
* agetty: rename variable changed to triggeredStanislav Brabec2018-10-111-5/+5
| | | | | | | | changed variable name is not correct. It does not say that network interface changed its address. It just says that the netlink message processing was triggered. Signed-off-by: Stanislav Brabec <sbrabec@suse.cz>
* agetty: cleanup code to copy to log stringsKarel Zak2018-10-031-5/+5
| | | | | | | | man utmp: String fields are terminated by a null byte ('\0') if they are shorter than the size of the field. Signed-off-by: Karel Zak <kzak@redhat.com>
* wall: make sure line is zero terminatedKarel Zak2018-10-031-1/+1
| | | | Signed-off-by: Karel Zak <kzak@redhat.com>
* script: be sensitive to another SIGCHLD ssi_codesKarel Zak2018-09-051-2/+8
| | | | | | | | | The current signalfd handler cares on CLD_EXITED only. It's pretty insufficient as there is more situations (and codes) when child no more running. Addresses: https://github.com/karelzak/util-linux/issues/686 Signed-off-by: Karel Zak <kzak@redhat.com>
* agetty.8: Avoid a warning about an unbreakable lineBjarni Ingi Gislason2018-08-061-1/+2
| | | | | | Make the indent depend on the formatting command, nroff or troff. Signed-off-by: Bjarni Ingi Gislason <bjarniig@rhi.hi.is>
* mesg: do not print 'ttyname failed' message unless --verbose requestedSami Kerola2018-08-032-0/+14
| | | | | | | | | | | | | | | Lots of people are confused why mesg(1) is priting this message. Usual cause seems to be an uninteractive shell trying to turn running 'mesg n' from a /root/.profile where command invocation is by default on debian based systems. This might be rare case when failing silently is better. [kzak@redhat.com: - add note to the man page - fix if(isatty()) logic] Reference: https://www.google.com/search?q=mesg+ttyname+failed Review: https://marc.info/?l=util-linux-ng&m=153319988631233&w=2 Signed-off-by: Sami Kerola <kerolasa@iki.fi> Signed-off-by: Karel Zak <kzak@redhat.com>
* setterm: fix compiler warnings [-Wcast-qual]Karel Zak2018-07-231-1/+1
| | | | Signed-off-by: Karel Zak <kzak@redhat.com>
* agetty: keep c_iflags unmodified on --autologinKarel Zak2018-06-062-4/+17
| | | | | | | | | | | | | | | agetty sets c_iflags according to interaction with serial line in get_logname(). For --autologin it does not read from the line, so we have no clue how to set the flags. The current behavior is to zeroize the flags. Unfortunately, it seems like bad idea, because the line may be already properly initialized by kernel (or systemd, etc.). The new behavior is not touch the flags on --autologin. Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1252764 Signed-off-by: Karel Zak <kzak@redhat.com>
* man: Change the only argument to two for the two-fonts macrosBjarni Ingi Gislason2018-05-231-1/+1
| | | | | | | Punctuation marks have been left in the only argument of two-fonts macros, instead of being separated from it to make the second one. Signed-off-by: Bjarni Ingi Gislason <bjarniig@rhi.hi.is>
* man: Use the correct macro for a font change of one argumentBjarni Ingi Gislason2018-05-231-1/+1
| | | | | | | | Use the correct macro (I, B) for the font change of one argument, not those that are used for alternating two fonts, like "BR", "IR", "RB", or "RI". Signed-off-by: Bjarni Ingi Gislason <bjarniig@rhi.hi.is>
* script: fix printf format specifiersRuediger Meier2018-05-161-2/+2
| | | | | | Noticed on 32bit builds. Types changed in 0da73643. Signed-off-by: Ruediger Meier <ruediger.meier@ga-group.nl>
* iscript: s/COLS/COLUMNS/ in start messageKarel Zak2018-05-141-1/+1
| | | | Signed-off-by: Karel Zak <kzak@redhat.com>
* script: record exit codeKarel Zak2018-05-142-18/+38
| | | | Signed-off-by: Karel Zak <kzak@redhat.com>
* script: add more info to script headerKarel Zak2018-05-141-5/+33
| | | | | | | | | | | | | | | | This patch introduces [...] to store extra information about terminal to the typescript header. For example: Script started on 2018-05-14 12:52:32+02:00 [TERM="xterm-256color" TTY="/dev/pts/3" COLS="190" LINES="53"] or Script started on 2018-05-14 12:54:01+02:00 [<not executed on terminal>] if stdout is not terminal. Addresses: https://github.com/karelzak/util-linux/issues/583 Signed-off-by: Karel Zak <kzak@redhat.com>
* script: cleanup done timestamp messageKarel Zak2018-05-141-6/+9
| | | | | | | * always save "done" timestamp to typescript (use done() for this) * use FORMAT_TIMESTAMP_MAX as buffer size Signed-off-by: Karel Zak <kzak@redhat.com>
* script: use uint64_t for file sizesKarel Zak2018-05-141-2/+2
| | | | Signed-off-by: Karel Zak <kzak@redhat.com>
* script: add the -o/--output-limit option. Fix race test.Fred Mora2018-05-142-6/+40
| | | | | | | | | | | | | | | | | | | | | | | | | | When script is used on a host with a relatively small free disk space, it is sometimes desirable to limit the size of the captured output. This can now be enforced with the --output-limit option. The --output-limit option lets the user specify a maximum size. The program uses the size parsing from strutils and thus supports the usual multiplicative suffixes (kiB, KB, MiB, MB, etc.). After the specified number of bytes have been written to the output file, the script program will terminate the child process. Due to buffering, the size of the output file might exceed the specified limit. This limit also does not include the start and done messages. The race test was throwing an error dur to a variable being "" in some cases. Quoting the variable in the equal test took care of that test. [kzak@redhat.com: - use done() to stop script - count also timing file - remove unnamed member initialization in ctl struct - add to bash-completion] Signed-off-by: Fred Mora <fmora@datto.com> Signed-off-by: Karel Zak <kzak@redhat.com>
* misc: fix typos using codespellRuediger Meier2018-02-161-1/+1
| | | | | | Some more funny typos, please review carefully. Signed-off-by: Ruediger Meier <ruediger.meier@ga-group.nl>
* include/debug: introduce __UL_INIT_DEBUG_FROM_STRING()Karel Zak2018-01-171-1/+1
| | | | | | | Let's make it possible to use debug.h without environment variables. Suggested-by: J William Piggott <elseifthen@gmx.com> Signed-off-by: Karel Zak <kzak@redhat.com>
* agetty: Fix a use of uninitialised memory in an agetty error path.Steven Smith2017-11-211-6/+19
| | | | | | | | | | | | | | get_logname() assumes that when it calls read() it initializes c and errno, which isn't always true if we hit a whitelisted error or end of file. This occasionally shows up as agetty going into an infinite loop. Fix it by just delaying ten seconds and exiting when things go wrong, similarly to the behavior after a non-whitelisted error. [kzak@redhat.com: - interpret readres == 0 as c = 0 - ignore speed configurations for VCONSOLE] Signed-off-by: Steven Smith <sos22@srcf.ucam.org> Signed-off-by: Karel Zak <kzak@redhat.com>
* lib/timeutils: add common ISO timestamp masksJ William Piggott2017-11-101-6/+2Star
| | | | | | | | | | | | | | | | | | | | | | * Start the ISO format flags at bit 0 instead of bit 1. * Remove unnecessary _8601 from ISO format flag names to avoid line wrapping and to ease readability. * ISO timestamps have date-time-timzone in common, so move the TIMEZONE flag to bit 2 causing all timestamp masks to have the first three bits set and the last four bits as timestamp 'options'. * Change the 'SPACE' flag to a 'T' flag, because it makes the code and comments more concise. * Add common ISO timestamp masks. * Implement the ISO timestamp masks in all applicable code using the strxxx_iso() functions. Signed-off-by: J William Piggott <elseifthen@gmx.com>
* agetty: add support for /etc/issue.dKarel Zak2017-11-072-30/+169
| | | | | | | | | | | | | | | | | | | | | | | | | The /etc/issue file has been originally designed to inform users about the system (version, name, etc.). In last years is growing number of additional tools (containers, maintenance tools and interfaces, ...) and many admins and downstream maintainer want to add some tool specific hints to the issue file, but it mess to share one file between more packages and/or scripts. The solution is /etc/issue.d directory. The directory is extension to the standard system /etc/issue. The /etc/issue file has to exist, otherwise the directory will be ignored. It means "rm /etc/issue" (or --onissue) is still the way how keep our system silent independently on 3rd-party installed files in the /etc/issue.d directory. The content of the files in the directory are printed after content of the /etc/issue. The files are printed in version-sort order and .issue file extension is required (00-foo.issue 01-bar.issue ...). The change is backwardly compatible. Signed-off-by: Karel Zak <kzak@redhat.com>
* agetty: remove unused flagKarel Zak2017-11-061-2/+1Star
| | | | Signed-off-by: Karel Zak <kzak@redhat.com>
* agetty: fix /etc/os-release parsingKarel Zak2017-10-051-0/+6
| | | | | | | | | | | | | | | | For example /etc/os-release: VERSION="26 (Twenty Six)" VERSION_ID=26 agetty for \S{VERSION} returns _ID=26 because the parser does nor check for '=' after variable name. Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1498462 Signed-off-by: Karel Zak <kzak@redhat.com>