Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Apachemodul C -> Delphi (https://www.delphipraxis.net/165891-apachemodul-c-delphi.html)

omata 19. Jan 2012 22:07

Apachemodul C -> Delphi
 
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:09 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