Autor Beitrag
krischan
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mi 04.06.03 12:37 
Hallo liebe deutschsprechende Delphi-Gemeinschaft.

Ich bin eine Anfänger, wenn es um Programmierung geht.
Also ich nutze die FTP-Server-Software Serv-U und habe die Quellcodes
für eine dll bekommen, welche eine Schnittstelle zu DDE herstellen soll.
Ich möchte euch den schon geänderten Code zeigen.
-----
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
library servuirc;

uses
  SysUtils,
  Classes,
  ddeman,
  inifiles;

const
     mIRCDDEServer : String  = 'mIRC';

     ExcludeOperator : Boolean = True;
     NickExclude : String = '';

     mIRCNotifySuccess : Boolean = True;
     mIRCNotifyFault : Boolean = True;


     SRVU_LoginMesFile   =       1;  // get login message file
     SRVU_HomeDir   =       2;  // get home dir
     SRVU_Password   =       3;  // verify password
     SRVU_IPAccess   =       4;  // verify IP access
     SRVU_WriteFile   =       5;  // verify write access
     SRVU_ReadFile   =       6;  // verify read access
     SRVU_ModifyFile   =       7;  // verify mod./del. file access
     SRVU_ExecProg   =       8;  // verify execute access
     SRVU_ListDir   =       9;  // verify dir listing access
     SRVU_ChangeDir   =       10;  // verify dir change access
     SRVU_DeleteDir   =       11;  // verify dir delete access
     SRVU_CreateDir   =       12;  // verify dir create access
     SRVU_HideHidden   =       13;  // get setting for 'hide hidden files'
     SRVU_RelPaths   =       14;  // get setting for 'relative paths'
     SRVU_RatioType   =       15;  // get setting for type of ratios
     SRVU_RatioDown   =       16;  // get setting for download ratio
     SRVU_RatioUp     =       17;  // get setting for upload ratio
     SRVU_RatioCredit   =       18;  // get/adjust ratio credit setting
     SRVU_RatioFree   =       19;  // verify if file is free for ratios
     SRVU_QuotaEnable   =       20;  // verify if disk quota is enabled
     SRVU_QuotaChange   =       21;  // change in disk quota
     SRVU_QuotaMax   =       22;  // maximum disk quota
     SRVU_AlwaysLogin   =       23;  // always allow login
     SRVU_OneLoginPerIP =  24;  // allow one login per user/IP pair
     SRVU_LogClientIP   =       25;  // log client from this IP address
     SRVU_SpeedLimit   =       26;  // maximum transfer speed
     SRVU_PassChange   =       27;  // change user's password
     SRVU_TimeOut   =       28;  // get user time-out value
     SRVU_MaxUsers   =       29;  // max. no. of users for account
     SRVU_PassChallenge =  30;  // get password challenge if needed
     SRVU_Connect   =       31;  // information only: client connected
     SRVU_Close   =       32;  // information only: client disconnected
     SRVU_MaxLoginPerIP =  33;  // max. no. of logins from same IP for user
     SRVU_VerifyPasswd   =       34;  // verify old password before changing it
     SRVU_AppendFile   =       35;  // verify append file access
     SRVU_SignOnMes   =       36;  // get signon message file
     SRVU_SignOffMes   =       37;  // get signoff message file
     SRVU_Maintenance   =       38;  // switch to maintenance mode
     SRVU_SessionTimeOut=   39;  // session time-out

     

type //pEventStruc = RClientEventStr;
     RClientEventStr = record
       Event : integer; // event code
       Flag : integer; // flag, meaning depends on event
       User : Array[0..39of char; // user name
       Aux : Array[0..511of char; // auxiliary area, usage depends on event
       HostIP : Array[0..15of char; // server IP home
   end;


Function VerifyPassword ( Var EventStruc : RClientEventStr ): integer;
var ddeconv : TDdeClientConv;
    str1, str2, MyNick : String;
begin
 result:=0;
 if EventStruc.Aux[0] <> #0 then begin
  ddeconv:=TDdeClientConv.Create(nil);
  ddeconv.ConnectMode:=ddeAutomatic;
  if ddeconv.SetLink(mIRCDDEServer,'COMMAND'then
    ddeconv.PokeData('COMMAND',PChar('/echo 5 -st FTP-Access validating L='+StrPas(EventStruc.User)+' P='+StrPas(EventStruc.Aux)));

  ddeconv.SetLink(mIRCDDEServer,'CONNECTED');
  if StrComp(ddeconv.RequestData('CONNECTED'),'connected') = 0 then begin
    ddeconv.SetLink(mIRCDDEServer,'NICKNAME');
    MyNick:=StrPas(ddeconv.RequestData('NICKNAME'));
    if (StrIComp(PChar(MyNick),EventStruc.User) <> 0or (ExcludeOperator = false) then begin
      ddeconv.SetLink(mIRCDDEServer,'USERS');
      Str1:=UpperCase(StrPas(ddeconv.RequestData('#'+UpperCase(StrPas(EventStruc.Aux)))));
      while Pos('@',Str1) <> 0 do
        Delete(Str1,Pos('@',Str1),1);
      while Pos('+',Str1) <> 0 do
        Delete(Str1,Pos('+',Str1),1);
      Str1:=Str1+' ';
      Str2:=EventStruc.User;

      if Pos(' '+Str2+' ',Str1) <> 0 then begin //if pass ok
        EventStruc.Flag:=1;
        result:=1;
        if mIRCNotifySuccess then begin // if notify success in mirc
          if ddeconv.SetLink(mIRCDDEServer,'COMMAND'then
            ddeconv.PokeData('COMMAND',PChar('/echo 7 -at FTP-Access Granted: L='+StrPas(EventStruc.User)+' P='+StrPas(EventStruc.Aux)));
        end;
      end
      else begin //if pass not ok
        EventStruc.Flag:=1;
        result:=0;
        if mIRCNotifyFault then begin // if notify fault in mirc
          if ddeconv.SetLink(mIRCDDEServer,'COMMAND'then
            ddeconv.PokeData('COMMAND',PChar('/echo 7 -at FTP-Access Denied: L='+StrPas(EventStruc.User)+' P='+StrPas(EventStruc.Aux)+' (wrong or not in channel)'));
        end;
      end;
    end;
  end;
  ddeconv.Free;
 end;
end;


Function HandleClientEvent ( Var EventStruc: RclientEventStr ): Integer cdecl;
var INIF : TIniFile;
begin
  INIF:=TIniFile.Create(ExtractFilePath(ParamStr(0))+'SERVUIRC.INI');
  mIRCDDEServer:=INIF.ReadString('mIRC','DDEServer','mIRC');
  ExcludeOperator:=INIF.ReadBool('mIRC','ExcludeOperator',True);
  mIRCNotifySuccess:=INIF.ReadBool('mIRC','mIRCNotifySuccess',True);
  mIRCNotifyFault:=INIF.ReadBool('mIRC','mIRCNotifyFault',False);
  NickExclude:=INIF.ReadString('mIRC','NickExclude','');
  INIF.Free;

  case EventStruc.Event of
    SRVU_Password : result:=VerifyPassword(EventStruc);
  else
    result:=0;
  end;
end;

exports
     HandleClientEvent;

begin
  IsMultiThread:=True;
end.

------
Serv-U sartet mit dieser dll, aber stürtzt irgendwann ab. Leider kann ich es nicht an einem Event klar machen, soll heißen, ich weiß nicht warum er abstürtzt.
Vielleicht kennt sich jemand mit DDE aus und kann sich diesen Abschnitt angucken.
Ich bitte um jegliche Unterstützung.
Mit Dank im Vorraus.

Gruß
Krischan =)

Moderiert von user profile icon%UGrohne: Delphi-Tags hinzugefügt
patrick
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1481

WIN2k, WIN XP
D6 Personal, D2005 PE
BeitragVerfasst: Mi 04.06.03 12:46 
gibt es fehlermeldungen irgendwelcher art?
-egal ob system oder programm

_________________
Patrick
im zweifelsfall immer das richtige tun!!!
krischan Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mi 04.06.03 18:21 
richtig...!! :oops: hatte ich vergessen mitzugeben.
Ich werde die beim nächsten Mal notieren und dann hier posten!

Aber ich habe noch nen Auszug aus meinem FTP-log:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
[8] Wed 04Jun03 18:06:05 - (000001) Access DLL event=SRVU_Password DLL=ServUIRC.dll
[8] Wed 04Jun03 18:06:05 -                Domain IP=192.168.1.101 Domain port=21 Domain ID=1 Flag=FALSE User="EVERWOOD"
[8] Wed 04Jun03 18:06:05 -                First  Aux[] parameter="******"
[8] Wed 04Jun03 18:06:05 -                Second Aux[] parameter="Everwood"
[8] Wed 04Jun03 18:06:05 -                Not handled
[8] Wed 04Jun03 18:06:05 - (000001) Access DLL event=SRVU_PassChallenge DLL=ServUIRC.dll
[8] Wed 04Jun03 18:06:05 -                Domain IP=192.168.1.101 Domain port=21 Domain ID=1 Flag=FALSE User="EVERWOOD"
[8] Wed 04Jun03 18:06:05 -                Not handled
[6] Wed 04Jun03 18:06:05 - (000001) 331 User name okay, need password.
[5] Wed 04Jun03 18:06:05 - (000001) IP-Name: 17.123-200-80.ADSL.SKYNET.BE
[2] Wed 04Jun03 18:06:05 - (000001) PASS xxxxx
[8] Wed 04Jun03 18:06:05 - (000001) Access DLL event=SRVU_IPAccess DLL=ServUIRC.dll
[8] Wed 04Jun03 18:06:05 -                Domain IP=192.168.1.101 Domain port=21 Domain ID=1 Flag=FALSE User="EVERWOOD"
[8] Wed 04Jun03 18:06:05 -                First  Aux[] parameter="80.200.123.17"
[8] Wed 04Jun03 18:06:05 -                Second Aux[] parameter="17.123-200-80.adsl.skynet.be"
[8] Wed 04Jun03 18:06:05 -                Not handled
[8] Wed 04Jun03 18:06:05 - (000001) Access DLL event=SRVU_SessionTimeOut DLL=ServUIRC.dll
[8] Wed 04Jun03 18:06:05 -                Domain IP=192.168.1.101 Domain port=21 Domain ID=1 Flag=FALSE User="EVERWOOD"
[8] Wed 04Jun03 18:06:05 -                Not handled
[5] Wed 04Jun03 18:06:05 - (000001) User EVERWOOD logged in
[8] Wed 04Jun03 18:06:05 - (000001) Access DLL event=SRVU_RatioType DLL=ServUIRC.dll
[8] Wed 04Jun03 18:06:05 -                Domain IP=192.168.1.101 Domain port=21 Domain ID=1 Flag=FALSE User="EVERWOOD"
[8] Wed 04Jun03 18:06:05 -                Not handled


Serv-U unterstütz das loggen von DLL-Zugrriffen. Vielleicht hilft es bei der DDE-Sache.

Danke
Krischan =)

P.S.: Ich hatte nach den Abstürtzen noch eine Änderung vorgenommen.

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
Auszug......

Function VerifyPassword ( Var EventStruc : RClientEventStr ): integer cdecl; 
var ddeconv : TDdeClientConv; 
    str1, str2, MyNick : String; 
begin

Die Zeile sach vorher so aus und im ersten Betrag dieses Postes ist die jetzige Version zu sehn.

Was sagt der Ausdruck "cdecl" aus? :?:
krischan Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Do 05.06.03 09:00 
Als ich heutemorgen auf meinen Desktop geschaut habe, fand ich folgende Fehlermeldungen:

user defined image
user defined image
user defined image

Die Meldungen treten nacheinander, so wie hier gepostet, auf.
Danach ist Serv-U gestoppt!

Zu dem Auszug aus meiner Logdatei möchte ich noch dieses Stück hinzufügen.
ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
[8] Wed 04Jun03 18:26:25 - (000003) Access DLL event=SRVU_QuotaChange DLL=ServUIRC.dll
[8] Wed 04Jun03 18:26:25 -                Domain IP=192.168.1.101 Domain port=21 Domain ID=1 Flag=FALSE User="EVERWOOD"
[8] Wed 04Jun03 18:26:25 -                First  Aux[] parameter="0"
[8] Wed 04Jun03 18:26:25 -                Not handled
[8] Wed 04Jun03 18:26:25 - (000003) Access DLL event=SRVU_QuotaMax DLL=ServUIRC.dll
[8] Wed 04Jun03 18:26:25 -                Domain IP=192.168.1.101 Domain port=21 Domain ID=1 Flag=FALSE User="EVERWOOD"
[8] Wed 04Jun03 18:26:25 -                Not handled
[8] Wed 04Jun03 18:26:26 - (000003) Access DLL event=SRVU_QuotaChange DLL=ServUIRC.dll
[8] Wed 04Jun03 18:26:26 -                Domain IP=192.168.1.101 Domain port=21 Domain ID=1 Flag=FALSE User="EVERWOOD"
[8] Wed 04Jun03 18:26:26 -                First  Aux[] parameter="0"
[8] Wed 04Jun03 18:26:26 -                Not handled
[8] Wed 04Jun03 18:26:26 - (000003) Access DLL event=SRVU_QuotaMax DLL=ServUIRC.dll
[8] Wed 04Jun03 18:26:26 -                Domain IP=192.168.1.101 Domain port=21 Domain ID=1 Flag=FALSE User="EVERWOOD"
[8] Wed 04Jun03 18:26:26 -                Not handled
[8] Wed 04Jun03 18:26:27 - (000003) Access DLL event=SRVU_QuotaChange DLL=ServUIRC.dll
[8] Wed 04Jun03 18:26:27 -                Domain IP=192.168.1.101 Domain port=21 Domain ID=1 Flag=FALSE User="EVERWOOD"
[8] Wed 04Jun03 18:26:27 -                First  Aux[] parameter="0"
[8] Wed 04Jun03 18:26:27 -                Not handled
[8] Wed 04Jun03 18:26:27 - (000003) Access DLL event=SRVU_QuotaMax DLL=ServUIRC.dll
[8] Wed 04Jun03 18:26:27 -                Domain IP=192.168.1.101 Domain port=21 Domain ID=1 Flag=FALSE User="EVERWOOD"
[8] Wed 04Jun03 18:26:27 -                Not handled
[8] Wed 04Jun03 18:26:28 - (000003) Access DLL event=SRVU_QuotaChange DLL=ServUIRC.dll
[8] Wed 04Jun03 18:26:28 -                Domain IP=192.168.1.101 Domain port=21 Domain ID=1 Flag=FALSE User="EVERWOOD"
[8] Wed 04Jun03 18:26:28 -                First  Aux[] parameter="0"
[8] Wed 04Jun03 18:26:28 -                Not handled
[8] Wed 04Jun03 18:26:28 - (000003) Access DLL event=SRVU_QuotaMax DLL=ServUIRC.dll
[8] Wed 04Jun03 18:26:28 -                Domain IP=192.168.1.101 Domain port=21 Domain ID=1 Flag=FALSE User="EVERWOOD"
[8] Wed 04Jun03 18:26:28 -                Not handled
[8] Wed 04Jun03 18:26:29 - (000003) Access DLL event=SRVU_QuotaChange DLL=ServUIRC.dll
[8] Wed 04Jun03 18:26:29 -                Domain IP=192.168.1.101 Domain port=21 Domain ID=1 Flag=FALSE User="EVERWOOD"
[8] Wed 04Jun03 18:26:29 -                First  Aux[] parameter="0"
[8] Wed 04Jun03 18:26:29 -                Not handled
[8] Wed 04Jun03 18:26:29 - (000003) Access DLL event=SRVU_QuotaMax DLL=ServUIRC.dll
[8] Wed 04Jun03 18:26:29 -                Domain IP=192.168.1.101 Domain port=21 Domain ID=1 Flag=FALSE User="EVERWOOD"
[8] Wed 04Jun03 18:26:29 -                Not handled


Dieses Hin und Her hat er gestern über eine Stunde getan. Dann wurde es unterbrochen, da sich ein neuer Nutzer anmeldete und trat danach laut der Log-Datei nicht mehr auf.

Der letzte Eintarg in der Log ist
ausblenden Quelltext
1:
2:
3:
4:
[8] Thu 05Jun03 04:57:47 - (000010) Access DLL event=SRVU_Password DLL=ServUIRC.dll
[8] Thu 05Jun03 04:57:47 -                Domain IP=192.168.1.101 Domain port=21 Domain ID=1 Flag=FALSE User="EVERWOOD"
[8] Thu 05Jun03 04:57:47 -                First  Aux[] parameter="******"
[8] Thu 05Jun03 04:57:47 -                Second Aux[] parameter="Everwood"

Danach muss er gestoppt worden sein, was soviel heißt das die SerUDaemon.exe abstürtzt.

Krischan =)