From 6addb47d7d38de0185456688d08a94aba10e396c Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Thu, 31 Oct 2013 11:57:53 +0100 Subject: add got-diminished, no pun intended MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- got-diminished | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100755 got-diminished diff --git a/got-diminished b/got-diminished new file mode 100755 index 0000000..ff1d8d1 --- /dev/null +++ b/got-diminished @@ -0,0 +1,92 @@ +#!/usr/bin/env bash + +# gates-of-tartaros – Minimal replacement for agetty with SSH support +# +# Copyright © 2013 Mattias Andrée (maandree@member.fsf.org) +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +# Read the parameters: the first is the tty, the rest are exports +tty="$1" +shift 1 +if [ ! $# = 0 ]; then + export "$@" +fi + +# Change TTY +exec 0<>"@dev@/${tty}" +exec 1>&0 +exec 2>&0 + + +# This is required if you want to use dash (and ash, since dash +# [dash not ash] does not recognise $''). +echo () +{ + @echo@ "$@" +} + + +# Function used for printing information on the terminal for the user +display_function=_display +_display () +{ + echo -en '\e[H\e[2J' + echo -e "\e[${ANSI_COLOR}m${NAME} (${tty})\e[00m" + echo + echo -n 'Login: ' +} + +# Function for reading the username form the terminal +read_function=_read +_read () +{ + read user +} + +# Function for logging in the user +login_function=_login +_login () +{ + if [ ! "${user%@*}" = "${user}" ]; then + exec setsid -c @ssh@ ${user} || sleep 3 + # The sleep allows you to see any error you made + elif [ ! "${user}" = "" ] && [ "${user%%-*}" = "" ]; then + tty_settings="$(stty --save)" + stty -icanon -echo -isig -ixon -ixoff -ixany + echo -e '\e[01;31mNice try! Sleeping for 10 minutes...\e[00m' + sleep 600 + stty "${tty_settings}" + else + exec setsid -c login -- "${user}" + fi +} + + +# Load OS information and extensions +NAME="$(uname -o)" +ANSI_COLOR='01;34' # must be exactly ANSI_COLOR as it is defined in /etc/os-release +if [ -f "@etc@/os-release" ]; then + . "@etc@/os-release" +fi +if [ -f "@etc@/@command@rc" ]; then + . "@etc@/@command@rc" +fi + +# Let the user log in +$display_function +$read_function +$login_function + -- cgit v1.2.3-70-g09d2