Author: brane
Date: Sun Jun  8 01:33:45 2025
New Revision: 1926227

URL: http://svn.apache.org/viewvc?rev=1926227&view=rev
Log:
On the user-defined-auth branch: Don't "subclass" a private struct.
Next time, save some of those overactiv neurons for actual thinking.

* auth/auth.h
  (serf__user_authn_scheme_t): Remove. Move its contents to ...
  (serf__authn_scheme_t): ... here.
* auth/auth.c
  (serf_authn_register_scheme): Deal with the struct merge.

* auth/auth_basic.c,
  auth/auth_spnego.c,
  auth/auth_spnego.c: Explicitly initialize serf__authn_scheme_t::magic,
   even though it's not really necessary for static objects.

* auth/auth_user_defined.c
  (validate_user_authn): New; replaces safe_cast_scheme.
  (serf__authn_user__init_conn,
   serf__authn_user__handler,
   serf__authn_user__setup_request,
   serf__authn_user__validate_response): Use validate_user_authn.

Modified:
    serf/branches/user-defined-authn/auth/auth.c
    serf/branches/user-defined-authn/auth/auth.h
    serf/branches/user-defined-authn/auth/auth_basic.c
    serf/branches/user-defined-authn/auth/auth_digest.c
    serf/branches/user-defined-authn/auth/auth_spnego.c
    serf/branches/user-defined-authn/auth/auth_user_defined.c

Modified: serf/branches/user-defined-authn/auth/auth.c
URL: 
http://svn.apache.org/viewvc/serf/branches/user-defined-authn/auth/auth.c?rev=1926227&r1=1926226&r2=1926227&view=diff
==============================================================================
--- serf/branches/user-defined-authn/auth/auth.c (original)
+++ serf/branches/user-defined-authn/auth/auth.c Sun Jun  8 01:33:45 2025
@@ -627,7 +627,7 @@ apr_status_t serf_authn_register_scheme(
                                         apr_pool_t *result_pool,
                                         int *type)
 {
-    serf__user_authn_scheme_t *user_scheme;
+    serf__authn_scheme_t *authn_scheme;
     apr_status_t lock_status;
     apr_status_t status;
     unsigned int scheme_type;
@@ -636,9 +636,7 @@ apr_status_t serf_authn_register_scheme(
     int index;
 
     *type = SERF_AUTHN_NONE;
-    user_scheme = apr_palloc(result_pool, sizeof(*user_scheme));
-    user_scheme->magic = serf__authn_user__magic;
-    user_scheme->baton = baton;
+    authn_scheme = apr_palloc(result_pool, sizeof(*authn_scheme));
 
     /* Generate a lower-case key for the scheme. */
     key = cp = apr_pstrdup(result_pool, name);
@@ -646,13 +644,17 @@ apr_status_t serf_authn_register_scheme(
         *cp = apr_tolower(*cp);
         ++cp;
     }
-    user_scheme->authn_scheme.name = apr_pstrdup(result_pool, name);
-    user_scheme->authn_scheme.key = key;
-    /* user_scheme->authn_scheme.type = ?; Will be updated later, under lock. 
*/
-    user_scheme->authn_scheme.init_conn_func = serf__authn_user__init_conn;
-    user_scheme->authn_scheme.handle_func = serf__authn_user__handler;
-    user_scheme->authn_scheme.setup_request_func = 
serf__authn_user__setup_request;
-    user_scheme->authn_scheme.validate_response_func = 
serf__authn_user__validate_response;
+    authn_scheme->name = apr_pstrdup(result_pool, name);
+    authn_scheme->key = key;
+    /* user_scheme->type = ?; Will be updated later, under lock. */
+    authn_scheme->init_conn_func = serf__authn_user__init_conn;
+    authn_scheme->handle_func = serf__authn_user__handler;
+    authn_scheme->setup_request_func = serf__authn_user__setup_request;
+    authn_scheme->validate_response_func = serf__authn_user__validate_response;
+
+    /* User-defined scheme data. */
+    authn_scheme->magic = serf__authn_user__magic;
+    authn_scheme->baton = baton;
 
     lock_status = lock_autn_schemes(NULL /* TODO: whence cometh config? */);
     if (lock_status)
@@ -687,8 +689,8 @@ apr_status_t serf_authn_register_scheme(
     }
 
     /* Insert into the slot, and add the sentinel. */
-    user_scheme->authn_scheme.type = scheme_type;
-    serf_authn_schemes[index] = &user_scheme->authn_scheme;
+    authn_scheme->type = scheme_type;
+    serf_authn_schemes[index] = authn_scheme;
     serf_authn_schemes[index + 1] = NULL;
     *type = scheme_type;
 

Modified: serf/branches/user-defined-authn/auth/auth.h
URL: 
http://svn.apache.org/viewvc/serf/branches/user-defined-authn/auth/auth.h?rev=1926227&r1=1926226&r2=1926227&view=diff
==============================================================================
--- serf/branches/user-defined-authn/auth/auth.h (original)
+++ serf/branches/user-defined-authn/auth/auth.h Sun Jun  8 01:33:45 2025
@@ -108,6 +108,16 @@ struct serf__authn_scheme_t {
 
     /* Function to validate the authentication header of a response */
     serf__validate_response_func_t validate_response_func;
+
+    /*
+     * Additional data for user-defined authentication schemes.
+     */
+
+    /* The magic number that helps verify the user-defined scheme data. */
+    apr_uint64_t magic;
+
+    /* The baton used by the callbacks.  */
+    void *baton;
 };
 
 
@@ -141,22 +151,6 @@ extern const serf__authn_scheme_t serf__
 
 /** User-defined authentication scheme handlers */
 
-/* This struct extends serf__authn_scheme_t with info needed for
-   the user-defined scheme implementation. It's essentially a subclass;
-   per C semantics, the address of the struct is also the address of
-   its first member, so we can safely put a pointer to this struct
-   into serf_authn_schemes. */
-typedef struct serf__user_authn_scheme_t serf__user_authn_scheme_t;
-struct serf__user_authn_scheme_t {
-    serf__authn_scheme_t authn_scheme;
-
-    /* The magic number that helps identify this struct. */
-    apr_uint64_t magic;
-
-    /* The baton used by the callbacks.  */
-    void *baton;
-};
-
 #ifndef SERF__AUTHN__HAVE_UNREGISTER
 /* Declare the prototype for the internal unregister implementation */
 apr_status_t serf__authn__unregister_scheme(int type,

Modified: serf/branches/user-defined-authn/auth/auth_basic.c
URL: 
http://svn.apache.org/viewvc/serf/branches/user-defined-authn/auth/auth_basic.c?rev=1926227&r1=1926226&r2=1926227&view=diff
==============================================================================
--- serf/branches/user-defined-authn/auth/auth_basic.c (original)
+++ serf/branches/user-defined-authn/auth/auth_basic.c Sun Jun  8 01:33:45 2025
@@ -198,4 +198,6 @@ const serf__authn_scheme_t serf__basic_a
     serf__handle_basic_auth,
     serf__setup_request_basic_auth,
     validate_response_func,
+
+    0                           /* user-defined scheme magic */
 };

Modified: serf/branches/user-defined-authn/auth/auth_digest.c
URL: 
http://svn.apache.org/viewvc/serf/branches/user-defined-authn/auth/auth_digest.c?rev=1926227&r1=1926226&r2=1926227&view=diff
==============================================================================
--- serf/branches/user-defined-authn/auth/auth_digest.c (original)
+++ serf/branches/user-defined-authn/auth/auth_digest.c Sun Jun  8 01:33:45 2025
@@ -566,4 +566,6 @@ const serf__authn_scheme_t serf__digest_
     serf__handle_digest_auth,
     serf__setup_request_digest_auth,
     serf__validate_response_digest_auth,
+
+    0                           /* user-defined scheme magic */
 };

Modified: serf/branches/user-defined-authn/auth/auth_spnego.c
URL: 
http://svn.apache.org/viewvc/serf/branches/user-defined-authn/auth/auth_spnego.c?rev=1926227&r1=1926226&r2=1926227&view=diff
==============================================================================
--- serf/branches/user-defined-authn/auth/auth_spnego.c (original)
+++ serf/branches/user-defined-authn/auth/auth_spnego.c Sun Jun  8 01:33:45 2025
@@ -663,6 +663,8 @@ const serf__authn_scheme_t serf__spnego_
     serf__handle_spnego_auth,
     serf__setup_request_spnego_auth,
     serf__validate_response_spnego_auth,
+
+    0                           /* user-defined scheme magic */
 };
 
 #ifdef WIN32
@@ -674,6 +676,8 @@ const serf__authn_scheme_t serf__ntlm_au
     serf__handle_spnego_auth,
     serf__setup_request_spnego_auth,
     serf__validate_response_spnego_auth,
+
+    0                           /* user-defined scheme magic */
 };
 #endif /* #ifdef WIN32 */
 

Modified: serf/branches/user-defined-authn/auth/auth_user_defined.c
URL: 
http://svn.apache.org/viewvc/serf/branches/user-defined-authn/auth/auth_user_defined.c?rev=1926227&r1=1926226&r2=1926227&view=diff
==============================================================================
--- serf/branches/user-defined-authn/auth/auth_user_defined.c (original)
+++ serf/branches/user-defined-authn/auth/auth_user_defined.c Sun Jun  8 
01:33:45 2025
@@ -25,14 +25,11 @@
 #include "auth.h"
 
 
-static const serf__user_authn_scheme_t *
-safe_cast_scheme(const serf__authn_scheme_t *scheme)
+static const bool
+validate_user_authn(const serf__authn_scheme_t *scheme)
 {
-    const serf__user_authn_scheme_t *const user_scheme = (const void *)scheme;
-    if (scheme->type & *serf__authn_user__type_mask
-        && user_scheme->magic == serf__authn_user__magic)
-        return user_scheme;
-    return NULL;
+    return (scheme->type & *serf__authn_user__type_mask
+            && scheme->magic == serf__authn_user__magic);
 }
 
 apr_status_t
@@ -41,7 +38,7 @@ serf__authn_user__init_conn(const serf__
                             serf_connection_t *conn,
                             apr_pool_t *pool)
 {
-    if (!safe_cast_scheme(scheme))
+    if (!validate_user_authn(scheme))
         return APR_EINVAL;
 
     return APR_ENOTIMPL;
@@ -56,7 +53,7 @@ serf__authn_user__handler(const serf__au
                           const char *auth_attr,
                           apr_pool_t *pool)
 {
-    if (!safe_cast_scheme(scheme))
+    if (!validate_user_authn(scheme))
         return APR_EINVAL;
 
     return APR_ENOTIMPL;
@@ -72,7 +69,7 @@ serf__authn_user__setup_request(const se
                                 const char *uri,
                                 serf_bucket_t *hdrs_bkt)
 {
-    if (!safe_cast_scheme(scheme))
+    if (!validate_user_authn(scheme))
         return APR_EINVAL;
 
     return APR_ENOTIMPL;
@@ -87,7 +84,7 @@ serf__authn_user__validate_response(cons
                                     serf_bucket_t *response,
                                     apr_pool_t *pool)
 {
-    if (!safe_cast_scheme(scheme))
+    if (!validate_user_authn(scheme))
         return APR_EINVAL;
 
     return APR_ENOTIMPL;


Reply via email to