]> git.ipfire.org Git - thirdparty/krb5.git/commitdiff
Pass full local address to dispatch functions
authorAndreas Schneider <asn@samba.org>
Fri, 19 May 2017 08:51:34 +0000 (10:51 +0200)
committerGreg Hudson <ghudson@mit.edu>
Mon, 5 Jun 2017 15:57:01 +0000 (11:57 -0400)
In net-server.c, pass a krb5_fulladdr representation of the local
address to dispatch.  This representation is more convenient for
kadmind, and will make it more convenient for the KDC to pass the
local address to the DAL audit_as_req.

[ghudson@mit.edu: rewrote commit message]

src/include/net-server.h
src/kadmin/server/schpw.c
src/kdc/dispatch.c
src/kdc/kdc_util.h
src/lib/apputils/net-server.c

index 37721e7f17a09bf2ff90cb76d763de031697c4c7..e5edcc49d5a1938e03fe71342767c67f821125ca 100644 (file)
@@ -86,7 +86,7 @@ void loop_free(verto_ctx *ctx);
  */
 typedef void (*loop_respond_fn)(void *arg, krb5_error_code code,
                                 krb5_data *response);
-void dispatch(void *handle, struct sockaddr *local_addr,
+void dispatch(void *handle, const krb5_fulladdr *local_addr,
               const krb5_fulladdr *remote_addr, krb5_data *request,
               int is_tcp, verto_ctx *vctx, loop_respond_fn respond, void *arg);
 krb5_error_code make_toolong_error (void *handle, krb5_data **);
index 101be9c9e64d50a40afb861244211f51a9291603..d46261620acbe169b747da60390c90047dc56d2a 100644 (file)
@@ -436,20 +436,15 @@ bailout:
 
 /* Dispatch routine for set/change password */
 void
-dispatch(void *handle, struct sockaddr *local_saddr,
+dispatch(void *handle, const krb5_fulladdr *local_addr,
          const krb5_fulladdr *remote_addr, krb5_data *request, int is_tcp,
          verto_ctx *vctx, loop_respond_fn respond, void *arg)
 {
     krb5_error_code ret;
     krb5_keytab kt = NULL;
     kadm5_server_handle_t server_handle = (kadm5_server_handle_t)handle;
-    krb5_fulladdr local_faddr;
-    krb5_address local_kaddr_buf;
     krb5_data *response = NULL;
 
-    local_faddr.address = &local_kaddr_buf;
-    init_addr(&local_faddr, local_saddr);
-
     ret = krb5_kt_resolve(server_handle->context, "KDB:", &kt);
     if (ret != 0) {
         krb5_klog_syslog(LOG_ERR, _("chpw: Couldn't open admin keytab %s"),
@@ -465,7 +460,7 @@ dispatch(void *handle, struct sockaddr *local_saddr,
                                handle,
                                server_handle->params.realm,
                                kt,
-                               &local_faddr,
+                               local_addr,
                                remote_addr,
                                request,
                                response);
index b501fb869d717e6ebad59c16bcdac9254031bcee..57f0865ac864669528f1c20c9ed900d3f9d176f6 100644 (file)
@@ -119,7 +119,7 @@ reseed_random(krb5_context kdc_err_context)
 }
 
 void
-dispatch(void *cb, struct sockaddr *local_saddr,
+dispatch(void *cb, const krb5_fulladdr *local_addr,
          const krb5_fulladdr *remote_addr, krb5_data *pkt, int is_tcp,
          verto_ctx *vctx, loop_respond_fn respond, void *arg)
 {
index 2f08ca14164354ab95106354f5e91740e542147f..1c183de85ce322fdf0d4afe951f87543fbe9075c 100644 (file)
@@ -151,7 +151,7 @@ process_tgs_req (struct server_handle *, krb5_data *,
 /* dispatch.c */
 void
 dispatch (void *,
-          struct sockaddr *,
+          const krb5_fulladdr *,
           const krb5_fulladdr *,
           krb5_data *,
           int,
index 227b4d51e550ca0236c36d97a787db70684d15c1..a40da927ef16ccfe179c4855f232806f311a0316 100644 (file)
@@ -953,6 +953,8 @@ struct udp_dispatch_state {
     int port_fd;
     krb5_address remote_addr_buf;
     krb5_fulladdr remote_addr;
+    krb5_address local_addr_buf;
+    krb5_fulladdr local_addr;
     socklen_t saddr_len;
     socklen_t daddr_len;
     struct sockaddr_storage saddr;
@@ -1088,8 +1090,11 @@ process_packet(verto_ctx *ctx, verto_ev *ev)
     state->remote_addr.address = &state->remote_addr_buf;
     init_addr(&state->remote_addr, ss2sa(&state->saddr));
 
+    state->local_addr.address = &state->local_addr_buf;
+    init_addr(&state->local_addr, ss2sa(&state->daddr));
+
     /* This address is in net order. */
-    dispatch(state->handle, ss2sa(&state->daddr), &state->remote_addr,
+    dispatch(state->handle, &state->local_addr, &state->remote_addr,
              &state->request, 0, ctx, process_packet_response, state);
 }
 
@@ -1211,6 +1216,8 @@ accept_tcp_connection(verto_ctx *ctx, verto_ev *ev)
 
 struct tcp_dispatch_state {
     struct sockaddr_storage local_saddr;
+    krb5_address local_addr_buf;
+    krb5_fulladdr local_addr;
     struct connection *conn;
     krb5_data request;
     verto_ctx *ctx;
@@ -1357,10 +1364,10 @@ process_tcp_connection_read(verto_ctx *ctx, verto_ev *ev)
                              error_message(errno));
             goto kill_tcp_connection;
         }
-
-        dispatch(state->conn->handle, ss2sa(&state->local_saddr),
-                 &conn->remote_addr, &state->request, 1, ctx,
-                 process_tcp_response, state);
+        state->local_addr.address = &state->local_addr_buf;
+        init_addr(&state->local_addr, ss2sa(&state->local_saddr));
+        dispatch(state->conn->handle, &state->local_addr, &conn->remote_addr,
+                 &state->request, 1, ctx, process_tcp_response, state);
     }
 
     return;