Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Passwort-Eingabe

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - C
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
pcAlko



Anmeldungsdatum: 14.05.2007
Beiträge: 70

BeitragVerfasst am: 12. Feb 2009 20:07   Titel: Passwort-Eingabe

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?

Cool pcAlko
 
Benutzer-Profile anzeigen Private Nachricht senden

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst am: 12. Feb 2009 21:43   Titel:

Das geht über die Terminaloptionen.
Code:

$ stty -F /proc/$$/fd/0 -echo

und du siehst nicht mehr, was in der Shell getippt wird.
Code:

$ 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.
 
Benutzer-Profile anzeigen Private Nachricht senden

pcAlko



Anmeldungsdatum: 14.05.2007
Beiträge: 70

BeitragVerfasst am: 13. Feb 2009 19:37   Titel:

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:
myapp <passwort>

da man dieses bei
Code:
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:
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.

Cool 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
 
Benutzer-Profile anzeigen Private Nachricht senden

Janka



Anmeldungsdatum: 11.02.2006
Beiträge: 3569

BeitragVerfasst am: 15. Feb 2009 22:59   Titel:

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.
 
Benutzer-Profile anzeigen Private Nachricht senden

pcAlko



Anmeldungsdatum: 14.05.2007
Beiträge: 70

BeitragVerfasst am: 22. Feb 2009 19:30   Titel:

Nein möchte ich eigentlich nicht!

Wenn Du Dich errinnern kannst -> Ich bin der, der Dich mit dem DS2408 lange Zeit genervt hat. Smile
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
Cool pcAlko
 
Benutzer-Profile anzeigen Private Nachricht senden

pferdefreund



Anmeldungsdatum: 17.04.2007
Beiträge: 35

BeitragVerfasst am: 17. Apr 2009 10:43   Titel:

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
 
Benutzer-Profile anzeigen Private Nachricht senden

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - C Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy