login skript vorzeitig beenden ?

Post Reply
Message
Author
leereruch

login skript vorzeitig beenden ?

#1 Post by leereruch »

Hallo,

ich würde gerne für bestimmte Benutzer /etc/profile nicht auslesen - egal ob sh, ksh oder bash. Dazu Frage ich am Anfag jener die UID ab:

[ ${UID} = 123 ] && exit 1

Klappt nur nicht, weil nicht nur die /etc/profile verlassen wird, sondern auch der gesamte Loginprozess, was nicht Ziel der Übung ist. Unter Basic hatte ein "Goto Ende" weitergeholfen, aber es gibt ja keine Kultur mehr ;o)

Gibt es eine Möglichkeit, /etc/profile zu verlassen OHNE eine if Anweisung, deren Inhalt über die gesamte Datei geht ? Also kein

if uid = blah; then
100 Zeilen
else
exit 1
fi

weil das empfinde ich als deutlich unelegant.

P.S.: Gibt es eigentlich ein freies Basic für Linux ? Also ein richtiges, mit Zeilennummern, nicht diesen modernen Visual-Basic & Co. Quatsch

uljanow

Re: login skript vorzeitig beenden ?

#2 Post by uljanow »

das profile-script wird "gesourced" aufgerufen und läuft daher in der gleichen shell wie der aufrufer. deshalb beendet das exit die ganze shell und nicht nur das script. mit "return" (statt exit) sollte es eigentlich funktionieren. (bin jetzt aber zu faul zum ausprobieren, also ohne gewähr).

Jochen

Re: login skript vorzeitig beenden ?

#3 Post by Jochen »

Eine andere Möglichkeit als "if user_gueltig ; then normale_profile ;fi" über die ganze Datei sehe ich nicht. Aber Du gehst m.E. auch falsch an die Aufgabe heran: Die /etc/profile ist nun mal für *alle* User der bash gedacht. Anpassungen, die einzelne User betreffen, sollen in deren eigene ~/.bash_profile (oder ~/.profile, falls die bash als "sh" aufgerufen wird).

Bei "useradd" kann man mittels einer Option (man page gucken, hab gerade kein Linux an der Hand), mittels der man das Verzeichnis festlegt, welche .-Dateien ein neuer User kriegen soll. Da kann man ja 2 von haben: Eines für Standard-User, eines für die anderen, deren .bash_profile dann so gut wie leer ist.

> P.S.: Gibt es eigentlich ein freies Basic für Linux ? Also ein richtiges, mit Zeilennummern, nicht diesen modernen Visual-Basic & Co. Quatsch

Örks! Nicht Dein Ernst! <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">

Jochen

leereruch

Re: login skript vorzeitig beenden ?

#4 Post by leereruch »

Danke erstmal für die Antworten. Das Problem ist, das auch die "sh", also die bash-sh die /etc/profile anfasst und so auch Dienstbenutzer (in meinem Fall postgres und cyrus) die profile lesen.
Kurz, allen interactiven Benutzern zwinge ich ein fortune auf und alle sind von profile.d betroffen. Würde ich den Dienstbenutzern gerne erspaaren. Momentan überschreibe ich schon alle Daten in der .profile, bekomme aber z.B. das fortune nicht weg, weil jenes in der profile steht (könnte natürlich hier eine if Abfrage machen).

Werde später "return" nomal testen, ansonsten wechsel ich zu windows ;)

P.S.: Das mit Basic meine ich ernst. Ohne Ironie. Mit Zeilennummern hätte ich das Problem der profile nicht. War eine super Erfindung. Und dann kommt da noch die Nostalgie zu.

uljanow

Re: login skript vorzeitig beenden ?

#5 Post by uljanow »

> Das mit Basic meine ich ernst. Ohne Ironie. Mit Zeilennummern hätte ich das Problem der profile nicht.

lol, dazu brauchst du aber keine zeilennummern, da genügen auch simple sprunglabels wie es sie auch in C gibt.

du könntest auch die eigentlichen einstellungen in eine eigene function auslagern.

<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
function einstellungen ()
{
# 100 zeilen
}

if uid = blah; then
einstellungen ()
else
exit 1
fi
</font><hr></pre></blockquote>sowas in der art.

leereruch

Re: login skript vorzeitig beenden ?

#6 Post by leereruch »

Junger Mann, wenn ich die gesamte /etc/profile in eine function packe, kann ich auch gleich eine if Anweisung über die gesamte Datei machen. Ob ich für "if" oder "{}" einrücke, ist doch einerlei.

Da moderne Skriptsprachen zwar kilometerlange, reguläre Ausdrücke können, aber trotzdem nicht den einfachsten Anfoderungen genügen, habe ich jene Datei jetzt einfach nach profile.d ausgelagert und in der /etc/profile nur noch eine Abfrage drinnen.

Man kann ruhig blöd sein, man muß sich eben nur zu helfen wissen und danke in diesem zusammenhang nochmal an alle beteiligten


P.S.: Statt Zeilennummern gingen auch labels, wie sie cmd.com kennt, in der Art:

if true; then goto ENDE; fi
100 zeilen

:ENDE
exit 0

Das das "goto" oder "gosub" ausgestorben sind ist da sicherste Zeichen für den Verfall der Menschheit !

Post Reply