s3:lib/ctdb_conn make sure we are root before connecting to CTDB
authorChristian Ambach <ambi@samba.org>
Thu, 16 May 2013 13:07:44 +0000 (15:07 +0200)
committerChristian Ambach <ambi@samba.org>
Fri, 17 May 2013 11:16:37 +0000 (13:16 +0200)
CTDB socket is only reachable for root, make sure we are root when trying to connect to it

Signed-off-by: Christian Ambach <ambi@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
Autobuild-User(master): Christian Ambach <ambi@samba.org>
Autobuild-Date(master): Fri May 17 13:16:37 CEST 2013 on sn-devel-104

source3/lib/ctdb_conn.c

index d7bf6a575513284ef8a67e5631f66bee39406eb6..90930eb86b0193890f7c3a82599e05694270c442 100644 (file)
@@ -35,6 +35,18 @@ struct ctdb_conn_init_state {
        struct ctdb_conn *conn;
 };
 
+/*
+ * use the callbacks of async_connect_send to make sure
+ * we are connecting to CTDB as root
+ */
+static void before_connect_cb(void *private_data) {
+       become_root();
+}
+
+static void after_connect_cb(void *private_data) {
+       unbecome_root();
+}
+
 static void ctdb_conn_init_done(struct tevent_req *subreq);
 static int ctdb_conn_destructor(struct ctdb_conn *conn);
 
@@ -83,7 +95,8 @@ struct tevent_req *ctdb_conn_init_send(TALLOC_CTX *mem_ctx,
 
        subreq = async_connect_send(state, ev, state->conn->fd,
                                    (struct sockaddr *)&state->addr,
-                                   sizeof(state->addr), NULL, NULL, NULL);
+                                   sizeof(state->addr), before_connect_cb,
+                                   after_connect_cb, NULL);
        if (tevent_req_nomem(subreq, req)) {
                return tevent_req_post(req, ev);
        }