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.