Einzelnen Beitrag anzeigen

omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#1

Apachemodul C -> Delphi

  Alt 19. Jan 2012, 22:07
Hallo,

ich möchte gern ein Apachemodul erstellen. Ich möchte dafür die Prozedur ap_register_provider aufrufen. Allerdings ergibt das immer eine Access Violation.

Folgende Strukturinformation habe ich gefunden...
Delphi-Quellcode:
{
* This function is used to register a provider with the global
* provider pool.
* @param pool The pool to create any storage from
* @param provider_group The group to store the provider in
* @param provider_name The name for this provider
* @param provider_version The version for this provider
* @param provider Opaque structure for this provider
* @return APR_SUCCESS if all went well
}

function ap_register_provider(
  const pool: Papr_pool_t;
  const provider_group, provider_name, provider_version: PAnsiChar;
  const provider: Pointer): apr_status_t;
  {$IFDEF WINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}
Was ich aber nicht genau weiss, wie ist die Struktur von provider?

Hier wird die Struktur in C erklärt.

Die Struktur habe ich wie folgt umgesetzt...
Delphi-Quellcode:
type
  Tauthn_status = (
    AUTH_DENIED, AUTH_GRANTED, AUTH_USER_FOUND, AUTH_USER_NOT_FOUND,
    AUTH_GENERAL_ERROR
  );
Delphi-Quellcode:
function authn_external_check_password(r: Prequest_rec;
                                       const user:PAnsiChar;
                                       const password:PAnsiChar):Tauthn_status; cdecl;
begin
  result:=AUTH_USER_FOUND;
end;
Aufruf...
Delphi-Quellcode:
procedure RegisterHooks(p: Papr_pool_t); cdecl;
begin
  ap_register_provider(
    p,
    PAnsiChar(AUTHN_PROVIDER_GROUP),
    PAnsiChar('external'),
    PAnsiChar(AUTHN_PROVIDER_VERSION),
    @authn_external_check_password
  );
end;
Oder muss die Struktur ein Record / variantes Record sein?

Eigentlich möchte ich ap_register_auth_provider aufrufen. Aber wo ist das deklariert bzw. in welcher DLL ist diese Prozedur zufinden?

Hier sind die Informationen dazu zu finden.

So in mod_auth.h habe ich jetzt folgendes gefunden...
Code:
typedef enum {
    AUTH_DENIED,
    AUTH_GRANTED,
    AUTH_USER_FOUND,
    AUTH_USER_NOT_FOUND,
    AUTH_GENERAL_ERROR
} authn_status;

typedef enum {
    AUTHZ_DENIED,
    AUTHZ_GRANTED,
    AUTHZ_NEUTRAL,
    AUTHZ_GENERAL_ERROR,
    AUTHZ_DENIED_NO_USER,     /* denied because r->user == NULL */
} authz_status;

typedef struct {
    /* Given a username and password, expected to return AUTH_GRANTED
     * if we can validate this user/password combination.
     */
    authn_status (*check_password)(request_rec *r, const char *user,
                                   const char *password);

    /* Given a user and realm, expected to return AUTH_USER_FOUND if we
     * can find a md5 hash of 'user:realm:password'
     */
    authn_status (*get_realm_hash)(request_rec *r, const char *user,
                                   const char *realm, char **rethash);
} authn_provider;
Vielleicht habt ihr ja noch eine Idee für mich.

Geändert von omata (19. Jan 2012 um 23:10 Uhr)
  Mit Zitat antworten Zitat