AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Benutzer einer Gruppe zu ordnen

Ein Thema von Luckie · begonnen am 28. Jan 2003 · letzter Beitrag vom 29. Jan 2003
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

Benutzer einer Gruppe zu ordnen

  Alt 28. Jan 2003, 02:41
So es geht in die letzte Runde des User-Managers. Wenn das Problem gelöst ist. Kann ich ihn veröffentlichen bzw. als Alpha-Release zum Testen freigeben und dann das große Geld damit machen.

Es geht jetzt darum einem Benutzer einer Gruppe zu zuordnen. Folgender Code läßt sich prima kompilieren (beide Versionen):
Delphi-Quellcode:
{ 1. Version }
      {dwEntries := 0;
      if IsDlgButtonChecked(hApp, IDC_CHKISADMIN) = BST_CHECKED then
      begin
        Inc(dwEntries);
        setlength(sGroupArray, dwEntries);
        sGroupArray[dwEntries-1] := 'Administratoren';
      end;
      if IsDlgButtonChecked(hApp, IDC_CHKISPOWERUSER) = BST_CHECKED then
      begin
        Inc(dwEntries);
        setlength(sGroupArray, dwEntries);
        sGroupArray[dwEntries-1] := 'Hauptbenutzer';
      end

      GetMem(gui0, dwEntries*sizeof(Pointer));
      for i := 0 to dwEntries-1 do
      begin
        Inc(Integer(gui0), sizeof(Pointer));
        PGroupInfo0(gui0)^.grpi0_name := PWideChar(WideString(sGroupArray[i]));
      end;

      dwError := NetUserSetGroups(nil, PWideChar(WideString(sUser)), 0, gui0, dwEntries); }

      //NetAPIBufferFree(gui0); // <- mag er nicht
      //FreeMem(gui0, dwEntries*sizeof(Pointer)); // <- mag er auch nicht :o(

      { 2. Version }
      if IsDlgButtonChecked(hApp, IDC_CHKISPOWERUSER) = BST_CHECKED then
        dwError := NetGroupAddUser(nil, PWideChar(WideString('Hauptbenutzer')), PWideChar(WideString(sUser)))
      else
        dwError := NetGroupDelUser(nil, PWideChar(WideString('Hauptbenutzer')), PWideChar(WideString(sUser)));

      case dwError of
        ERROR_ACCESS_DENIED : s := 'Zugriff verweigert.';
        ERROR_INVALID_PARAMETER : s := 'Ungültiger Parameter.';
        NERR_InvalidComputer : s := 'Ungültiger Computer';
        NERR_NotPrimary : s := 'Operation darf nur auf dem Domain-Controller ausgeführt werden.';
        NERR_SpeGroupOp : s := 'Operation darf nicht auf diese Gruppe angewandt werden.';
        NERR_LastAdmin : s := 'Der letzte macht das Licht aus, aber nicht bei Windows. :o)'
                                    +#13#10+'Der letzte Administrator Account kann nicht gelöscht werden';
        NERR_BadPassword,
        NERR_PasswordTooShort : s := 'Ungültiges Passwort';
        NERR_UserNotFound : s := 'Ungültiger Benutzer.';
        NERR_GroupNotFound : s := 'Gruppe nicht gefunden.';
        NERR_Success : s := 'Konto erfolgreich geändert.';
      end;
Das Problem ist nur, ich bekomme jedes mal "Gruppe nicht gefunden". Obwohl das auslesen so geht:
Delphi-Quellcode:
if sUser <> 'then
  begin
    if NetUserGetLocalGroups(nil, PWideChar(WideString(sUser)), 0, 0, gui0, MAX_PREFERRED_LENGTH,
      dwEntriesRead, dwEntriesTotal) = NERR_SUCCESS then
    tmp := gui0;
    begin
      for i := 0 to dwEntriesRead-1 do
      begin
        s := String(PGroupInfo0(gui0)^.grpi0_name);
        if s = 'Administratorenthen
          CheckDlgButton(hApp, IDC_CHKISADMIN, Integer(TRUE));
        if s = 'Hauptbenutzerthen
          CheckDlgButton(hApp, IDC_CHKISPOWERUSER, Integer(TRUE));
        if s = 'Benutzerthen
          CheckDlgButton(hApp, IDC_CHKISUSER, Integer(TRUE));
        if s = 'Sicherungs-Operatorenthen
          CheckDlgButton(hApp, IDC_CHKISBACKUPOP, Integer(TRUE));
        if s = 'Replikations-Operatorthen
          CheckDlgButton(hApp, IDC_CHKISREPOP, Integer(TRUE));
        if s = 'Gästethen
          CheckDlgButton(hApp, IDC_CHKISGUEST, Integer(TRUE));
        Inc(Integer(gui0), sizeof(pointer));
      end;
        //Messagebox(0, pointer(s), '', 0);
    end;
    NetAPIBufferFree(tmp);
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2
  Alt 28. Jan 2003, 04:37
So:
Delphi-Quellcode:
GetMem(lgrmi, dwEntries*sizeof(Pointer));
      for i := 0 to dwEntries-1 do
      begin
        Inc(Integer(gui0), sizeof(Pointer));
        PLocalGroupInfo0(lgrmi)^.lgrpi0_name := PWideChar(WideString(sGroupArray[i]));
      end;

      dwError := NetLocalGroupAddMembers(nil, PWideChar(WideString(sUser)), 0, lgrmi, dwEntries);
Also mit NetLocalGroupAddMembers bekomme ich keine Fehlermeldung, aber er macht es auch nicht.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#3
  Alt 28. Jan 2003, 13:15
Moin Luckie,

wie heute Früh im Chat versprochen hab' ich mir das noch einmal angesehen:

So geht's bei mir:

Delphi-Quellcode:
var
  pGroupname : PWideChar;
  pMember : PLOCALGROUP_MEMBERS_INFO_3;
  dwResult : NET_API_STATUS;

begin
  pGroupName := AllocMem((Length('Hauptbenutzer')+1) shl 1);
  pMember := AllocMem(SizeOf(LOCALGROUP_MEMBERS_INFO_3));
  pMember.lgrmi3_domainandname := AllocMem((Length('<Rechnername>\testuser')+1) shl 1);
  try
    // Kein Length + 1, wegen der abschliessenden #00#00
    StringToWideChar('Hauptbenutzer',pGroupName,Length('Hauptbenutzer') shl 1);
    StringToWideChar('<Rechnername>\testuser',pMember.lgrmi3_domainandname,Length('<Rechnername>\testuser') shl 1);
    dwResult := NetLocalGroupAddMembers(nil,pGroupName,3,pMember,1);
    case dwResult of
      NERR_SUCCESS : ShowMessage('OK');
      NERR_GROUPNOTFOUND : ShowMessage('Group not found');
      else ShowMessage(SysErrorMessage(dwResult)+#13#10+IntToStr(dwResult));
    end;
  finally
    FreeMem(pGroupname,(Length('Hauptbenutzer')+1) shl 1);
    FreeMem(pMember.lgrmi3_domainandname,(Length('<Rechnername>\testuser')+1) shl 1);
    FreeMem(pMember,SizeOf(LOCALGROUP_MEMBERS_INFO_3));
  end;
end;
Achtung:
Eventuell musst Du noch was im Aufruf anpassen, da ich nicht die Jedi Units benutze.

<Rechnername> muss natürlich gegen den Namen des Rechners ausgetauscht werden, auf dem die Funktion aufgerufen wird, aber Du wirst ja eh' nicht drum herumkommen das was ich da als Stringliterale angegeben habe in Form von Stringvariablen zu benutzen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4
  Alt 28. Jan 2003, 13:55
Ich werde mir dan nachher mal ankucken(, ich muß noch etwas von der Nacht nachholen. ) . Wenn es bei dir klappt, aber bei mir nicht, dann war ich zu blöd es einzubauen.

Stichwort Rechnername: Es geht mir erstmal nur um den lokalen Rechner. Und wenn man die NetUserxxx Funktionen mit nil als Rechnernamen aufruft, wird immer der lokale Rechner genommen. Sollte hier nicht anders sein.

Danke für deine Mühe.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Benutzer einer Gruppe zu ordnen

  Alt 28. Jan 2003, 14:30
Zitat von Luckie:
...und dann das große Geld damit machen.

Es geht jetzt darum einem Benutzer einer Gruppe zu zuordnen. Folgender Code läßt sich prima kompilieren (beide Versionen):
Wenn Du dann so viel Kohle hast wie Bill musst Du uns aber zum essen einladen

Aber jetzt die Frage:
Warum nur EINE Gruppe? Ich kann doch Mitglied von verschiedenen Gruppen sein. Besonders von Gruppen die ich selber angelegt habe!
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#6
  Alt 28. Jan 2003, 16:40
Moin Luckie,

an der Stelle, an der ich <Rechername> geschrieben habe, muss der Name des lokalen Rechners stehen, damit die Funktion weiss, von wo sie die Userinformationen ziehen soll.
Es wird an der Stelle die Angabe von Arbeitsgruppe oder Domain erwartet, aus der der User stammt. Ist es ein lokaler User muss hier also der Name des Rechners angegeben werden.
Du könntest hier ja ebensogut einen Domänenuser angeben.

Das Du für den "Server" hier nil eintragen kannst hat damit nichts zu tun. An dieser Stelle wird ja festgelegt, von welchem Rechner die Lokale Gruppe gemeint ist, der der User hinzugefügt werden soll.

Prinzipiell kann diese Funktion ja auch auf anderen Rechnern als dem eigenen, User zu lokalen Gruppen hinzufügen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7
  Alt 28. Jan 2003, 18:10
@Sharky: Das kann man ja auch wenn es fertig ist.

@Christian: Ja stimmt. Hast Recht.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#8
  Alt 28. Jan 2003, 18:16
Ich habe das Programm mit Novell getestet. Das stimmt soweit, aber Alter des Passworts nicht.

Gruß
Hansa
  Mit Zitat antworten Zitat
MadMason

Registriert seit: 9. Nov 2002
Ort: Altenburg
126 Beiträge
 
Delphi 2005 Architect
 
#9

Re: Benutzer einer Gruppe zu ordnen

  Alt 28. Jan 2003, 18:18
Zitat von Luckie:
Kann ich ihn veröffentlichen bzw. als Alpha-Release zum Testen freigeben und dann das große Geld damit machen.
ich kenn mich ja in der lizenzpolitik borlands nicht 100% aus aber ich glaube mit ner Personal darfst du deine Software nicht verkaufen sondern nur als freeware weitergeben.
korigier mich wenn ich mich irre
Einstein ist tot
Newton ist tot
und mir ist auch schon ganz schlecht
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10
  Alt 28. Jan 2003, 18:25
Das stimmt, aber was spricht dagegen sich das von einem Freund kompilieren zu lassen, der Professional oder höher hat?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz