[PATCH] s4:kdc/smbd - Merged kdc_tcp_accept() and kpasswdd_tcp_accept().
Endi S. Dewata
edewata at redhat.com
Tue Nov 24 00:00:45 MST 2009
---
source4/kdc/kdc.c | 43 +++++++++++++---------------------------
source4/smbd/service_stream.h | 1 +
2 files changed, 15 insertions(+), 29 deletions(-)
diff --git a/source4/kdc/kdc.c b/source4/kdc/kdc.c
index 5700e5b..9d61915 100644
--- a/source4/kdc/kdc.c
+++ b/source4/kdc/kdc.c
@@ -355,7 +355,7 @@ static bool kdc_process(struct kdc_server *kdc,
/*
called when we get a new connection
*/
-static void kdc_tcp_generic_accept(struct stream_connection *conn, kdc_process_fn_t process_fn)
+static void kdc_tcp_accept(struct stream_connection *conn)
{
struct kdc_server *kdc = talloc_get_type(conn->private_data, struct kdc_server);
struct kdc_tcp_connection *kdcconn;
@@ -367,7 +367,7 @@ static void kdc_tcp_generic_accept(struct stream_connection *conn, kdc_process_f
}
kdcconn->conn = conn;
kdcconn->kdc = kdc;
- kdcconn->process = process_fn;
+ kdcconn->process = (kdc_process_fn_t)conn->ops->private_data;
conn->private_data = kdcconn;
kdcconn->packet = packet_init(kdcconn);
@@ -385,30 +385,6 @@ static void kdc_tcp_generic_accept(struct stream_connection *conn, kdc_process_f
packet_set_serialise(kdcconn->packet);
}
-static void kdc_tcp_accept(struct stream_connection *conn)
-{
- kdc_tcp_generic_accept(conn, kdc_process);
-}
-
-static const struct stream_server_ops kdc_tcp_stream_ops = {
- .name = "kdc_tcp",
- .accept_connection = kdc_tcp_accept,
- .recv_handler = kdc_tcp_recv_handler,
- .send_handler = kdc_tcp_send
-};
-
-static void kpasswdd_tcp_accept(struct stream_connection *conn)
-{
- kdc_tcp_generic_accept(conn, kpasswdd_process);
-}
-
-static const struct stream_server_ops kpasswdd_tcp_stream_ops = {
- .name = "kpasswdd_tcp",
- .accept_connection = kpasswdd_tcp_accept,
- .recv_handler = kdc_tcp_recv_handler,
- .send_handler = kdc_tcp_send
-};
-
/*
start listening on the given address
*/
@@ -417,11 +393,11 @@ static NTSTATUS kdc_add_socket(struct kdc_server *kdc,
const char *name,
const char *address,
uint16_t port,
- const struct stream_server_ops *tcp_stream_ops,
kdc_process_fn_t process)
{
struct kdc_socket *kdc_socket;
struct socket_address *socket_address;
+ struct stream_server_ops *tcp_stream_ops;
NTSTATUS status;
kdc_socket = talloc(kdc, struct kdc_socket);
@@ -455,6 +431,17 @@ static NTSTATUS kdc_add_socket(struct kdc_server *kdc,
return status;
}
+ tcp_stream_ops = talloc(kdc_socket, struct stream_server_ops);
+ NT_STATUS_HAVE_NO_MEMORY_AND_FREE(tcp_stream_ops, kdc_socket);
+
+ tcp_stream_ops->name = talloc_asprintf(kdc_socket, "%s_tcp", name);
+ NT_STATUS_HAVE_NO_MEMORY_AND_FREE(tcp_stream_ops->name, kdc_socket);
+
+ tcp_stream_ops->accept_connection = kdc_tcp_accept;
+ tcp_stream_ops->recv_handler = kdc_tcp_recv_handler;
+ tcp_stream_ops->send_handler = kdc_tcp_send;
+ tcp_stream_ops->private_data = process;
+
status = stream_setup_socket(kdc->task->event_ctx,
kdc->task->lp_ctx,
model_ops,
@@ -504,7 +491,6 @@ static NTSTATUS kdc_startup_interfaces(struct kdc_server *kdc, struct loadparm_c
if (kdc_port) {
status = kdc_add_socket(kdc, model_ops,
"kdc", address, kdc_port,
- &kdc_tcp_stream_ops,
kdc_process);
NT_STATUS_NOT_OK_RETURN(status);
}
@@ -512,7 +498,6 @@ static NTSTATUS kdc_startup_interfaces(struct kdc_server *kdc, struct loadparm_c
if (kpasswd_port) {
status = kdc_add_socket(kdc, model_ops,
"kpasswd", address, kpasswd_port,
- &kpasswdd_tcp_stream_ops,
kpasswdd_process);
NT_STATUS_NOT_OK_RETURN(status);
}
diff --git a/source4/smbd/service_stream.h b/source4/smbd/service_stream.h
index 5d577d4..90e2abb 100644
--- a/source4/smbd/service_stream.h
+++ b/source4/smbd/service_stream.h
@@ -68,6 +68,7 @@ struct stream_server_ops {
void (*accept_connection)(struct stream_connection *);
void (*recv_handler)(struct stream_connection *, uint16_t);
void (*send_handler)(struct stream_connection *, uint16_t);
+ void *private_data;
};
#endif /* __SERVICE_STREAM_H__ */
--
1.6.0.6
------=_Part_21159_1503209990.1259047362063--
More information about the samba-technical
mailing list