Passwort-Eingabe

Post Reply
Message
Author
pcAlko
Posts: 70
Joined: 14. May 2007 19:27

Passwort-Eingabe

#1 Post by pcAlko »

Hallo Leute!

habe das Problem dass ich von meinem Programm aus ein Passwort abfragen will
welches der User eingeben soll.
Jedoch wird das Passwort am screen ausgegeben, was ich nicht möchte.

Habe es mit getchar(), getc(), getline(), scanf() versucht
aber immer wird das Zeichen am Bildschirm ausgegeben.

wie kann ich jetzt das stdout im programm umleiten ins nirvana?

8) pcAlko

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#2 Post by Janka »

Das geht über die Terminaloptionen.

Code: Select all

$ stty -F /proc/$$/fd/0 -echo
und du siehst nicht mehr, was in der Shell getippt wird.

Code: Select all

$ stty -F /proc/$$/fd/0 echo
Damit geht das Echo wieder an. /proc/$$/fd/0 löst auf die von der aktuellen Shell verwendete Standardeingabe auf, das ist üblicherweise /dev/pts/1234 oder sowas (im Framebuffer ist es /dev/tty0 oder so).
In einem C-Programm kannst du das Echo mit termios einstellen. man termios.
Oder du nimmst ncurses, da kann man mit noecho das Echo abstellen. man noecho.

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

pcAlko
Posts: 70
Joined: 14. May 2007 19:27

#3 Post by pcAlko »

Hallo Janka!

Danke, hat super funktioniert,
ich hab mich für termios entschieden.

Aber nun gleich zur nächsten Frage.
die ich zwar schon selbst gelöst habe, aber mir nicht klar ist ob diese Lösung auch sauber ist.


ich möchte natürlich nicht dass man das Passwort in der command line eingeben kann
zb.

Code: Select all

myapp <passwort>
da man dieses bei

Code: Select all

ps -ef | grep myapp
ja dann sieht.

Um, das ganze jetzt aber doch automatisieren zu können,
zb. durch ein script
schreibe ich das pwd in eine Datei und mach sie mit chmod nur für die uid in dem das script läuft lesend.

somit kann ich schreiben

Code: Select all

myapp < Datei
wenn ich nun beim ersten tcgetattr() einen Fehler bekomme
setze ich mit tcsetattr() gar nicht mehr das c_lflag auf ~ECHO

funktioniert super
jedoch ist das sauber? oder gibt es da eine bessere Lösung?
mir ist nicht klar ob ich nur in diesem Fall, wenn ich eine Umleitung mache, eben bei tcgetattr() einen Fehler bekomme.

8) pcAlko

[edit]
ok, jetzt hab ich auch noch eine abfrage beim Fehler hinzugefügt dass er mir
dieses Vorgehen nur macht wenn errno 25 ist (Inappropriate ioctl for device)
hoffe das ist ok so

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#4 Post by Janka »

Deine Lösung mit der Pipe ist natürlich so ok, und ja, einfach den Fehler -ENOTTY zu ignorieren ist in dem Fall auch ok.

Die Frage ist, warum du für deine Applikation überhaupt einen solchen Passwort-Mechanismus einbauen willst. Willst du su oder sudo nachprogrammieren?

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

pcAlko
Posts: 70
Joined: 14. May 2007 19:27

#5 Post by pcAlko »

Nein möchte ich eigentlich nicht!

Wenn Du Dich errinnern kannst -> Ich bin der, der Dich mit dem DS2408 lange Zeit genervt hat. :)
Naja, jetzt hat mein Server mit der Zeit auch schon einen Zugangs-Berechtigung
und eben dafür brauche ich dieses Vorgehen.

Danke für Deine Antwort
8) pcAlko

pferdefreund
Posts: 35
Joined: 17. Apr 2007 16:55

#6 Post by pferdefreund »

Ein Trick, den ich auch schon probiert habe und der auch funktioniert,

programm password kann man aufrufen und muß dann im Programm gleich
am Anfang argv[] in der Laenge des Passwords auf Space setzen. Dann erscheint es
nicht mehr in ps und Konsorten - ist sicherlich nicht die feine pferdige Art - aber bei
meiner Anwendung funktionierts prima. Man sollte nur nicht über die
Länge des PW spacen

Post Reply