Automatische Autorisierung mit LogonUser + ImpersonateLoggedOnUser, aufräumen mit RevertToSelf + Closehandle ???
-
Hallo erst einmal
und danke für den Klick
Ich wollte euch folgendes fragen, da ich hier zu nichts finde und auch gar nicht weiß wie man das umsetzen kann.
Und zwar:
Ich wollte eine Datei (mit log-daten eines Servers) öffnen um diese in vorgegebenen Zeitabständen zu kopieren.(also automatisches öffen und autorisieren alle z.B. 10 min.)Nun habe ich aber volgendes Problem. Diese Datei befindet sich auf meinem Server und ich will von extern darauf zugreifen. Nun habe ich aber das problem, dass ich mich erst für den zugriff auf den server über das netzwerk autorisieren muss per PW und USER.
Leider habe ich nichts gefunden, und der große king im Programmieren bin ich leider auch nicht
Aber wollte einmal neue sachen ausprobieren um mehr zu lernen.
Könnt ihr mir sagen ob dies überhaupt mit c++ geht, dass sich PW und USER automatisch beim Verbindungsversuch eintragen. Dabei ist es nicht von Bedeutung, dass PW oder USER sicherheitsrelevant sind, diese könnten auch direkt im Programm stehen, so dass diese auch jeder lesen könnte (ich weiß für was benötigt man dann PW und USER)
Also über ein paar Gedankengänge
oder lösungsvorschläge würde ich mich dennoch saumäsig freuen..
Herzliche Grüße FIll
#include "stdafx.h" #include <string> // Für ausgeblendete copy Funktion #include <iostream> // " " " " #include <iterator> // " " " " #include <fstream> // " " " " using namespace std; int main (void) { // Öffnen der Datei mit Passwort und Benutzername? // ? ? ? PW: 123qwe ifstream f1("test.txt"); // ? ? ? BN: qwe123 // ? ? ? PFAD: \\te-us-ee2\glassfish\glassfish\domains\domain1\logs // ? ? ? ofstream f2("test_neu.txt"); // neuanlegen if( !f1.is_open() || !f2.is_open()) // 1. Test { // " cerr << "Fehler beim Oeffnen" << endl; // " system("PAUSE"); // " return -2; // " } else // 2. Test { // " cerr << "Alle geoeffnet" << endl; // " getchar(); // " } // " // copy(); // Kopieren der Einen in die andere Datei f1.close(); // Schließen f2.close(); // " return 0; }
-
Du schreibst wirr.
Was genau willst du machen?Eine Datei über's Netzwerk (SMB?) mit einem anderen Usernamen+Passwort aufmachen?
Also so wie wenn du in Windows im Explorer den Pfad eingibst, und der Explorer dann nachfragt welchen Usernamen/Passwort er verwenden soll?Falls du das willst, dann kannst du LogonUser + ImpersonateLoggedOnUser verwenden. (Und dann aufräumen mit RevertToSelf + CloseHandle).
Wenn du den Account nur für Zugriffe über's Netzwerk verwenden willst übergibst du an LogonUser einfach LOGON32_LOGON_NEW_CREDENTIALS - dann bleiben lokale Berechtigungen (lokale Files, evtl. vorhandene weitere Berechtigungen auf dem lokalen System etc.) unverändert.
Du musst übrigens mit dem Aufräumen nicht warten bis du mit dem geöffneten File fertig bist. Sobald das File geöffnet wurde kannst du jederzeit RevertToSelf + CloseHandle machen.
ps: du kannst aber auch einfach Usernamen und Passwort in Windows hinterlegen. Control Panel > User Accounts > Credential Manager
Add a Windows credential
Servername, Username & Passwort eingeben
ferdich.
(Dabei musst du natürlich mit dem Account angemeldet sein unter dem das Programm dann ausgeführt wird)
Und logischerweise kann dann jedes Programm das unter dem Account läuft mit dem eingetragenen Usernamen & Passwort auf den anderen Server zugreifen.
-
Hallo und Danke ersteinmal,
tut mir leid wenn ich etwas wirr geschrieben habe. Das zeigt, dass ich mir sher unsicher bin und nicht genau wusste was ich genau machen muss.
-> Das Programm greift alle 5 min auf den Server zu und soll dann automatisch PW und USERname übergeben, also keine Manuelle eingabe.
Also so wie wenn du in Windows im Explorer den Pfad eingibst, und der Explorer dann nachfragt welchen Usernamen/Passwort er verwenden soll?
GENAU DASS
Super, genau so was habe ich gesucht. Danke für die 2 Lösungsmöglichkeiten. Ich werde es erstmal mit LogonUser + ImpersonateLoggedOnUser versuchen, wenn dass nicht klappt doch das allgemeine Windows credential.
Herzlichen Dank auch
-
Nur mal so als Frage in den Raum...
hätte man das auch mit Netzwerkprogrammierung und Cross-Platform-Entwicklung realisieren können in dem man einen Sochet schreibt?
Ok wäre umständlicher als der vorherige Lösungsvorschlag, aber machbar?
Grets
-
Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ (auch C++0x und C++11) in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.