Return the same privilaged winbindd socket as we actually use.
[metze/samba/wb-ndr.git] / source / winbind / wb_server.c
index 9acde4a557cb31bfa2a30f5584c7a99c4e9d20fd..d56a82ea18d872f7b609bc70e0385898e2bfba09 100644 (file)
@@ -136,11 +136,19 @@ static void winbind_task_init(struct task_server *task)
                return;
        }
 
+       /* Make sure the directory for the Samba3 socket exists, and is of the correct permissions */
+       if (!directory_create_or_exist(lp_winbindd_privileged_socket_directory(task->lp_ctx), geteuid(), 0750)) {
+               task_server_terminate(task,
+                                     "Cannot create winbindd privileged pipe directory");
+               return;
+       }
+
        service = talloc_zero(task, struct wbsrv_service);
        if (!service) goto nomem;
        service->task   = task;
 
        service->primary_sid = secrets_get_domain_sid(service,
+                                                     task->event_ctx,
                                                      task->lp_ctx,
                                                      lp_workgroup(task->lp_ctx));
        if (service->primary_sid == NULL) {
@@ -149,6 +157,12 @@ static void winbind_task_init(struct task_server *task)
                return;
        }
 
+       service->idmap_ctx = idmap_init(service, task->event_ctx, task->lp_ctx);
+       if (service->idmap_ctx == NULL) {
+               task_server_terminate(task, "Failed to load idmap database");
+               return;
+       }
+
        /* setup the unprivileged samba3 socket */
        listen_socket = talloc(service, struct wbsrv_listen_socket);
        if (!listen_socket) goto nomem;
@@ -168,9 +182,12 @@ static void winbind_task_init(struct task_server *task)
        /* setup the privileged samba3 socket */
        listen_socket = talloc(service, struct wbsrv_listen_socket);
        if (!listen_socket) goto nomem;
-       listen_socket->socket_path      =
-               smbd_tmp_path(listen_socket, task->lp_ctx, 
-                             WINBINDD_SAMBA3_PRIVILEGED_SOCKET);
+       listen_socket->socket_path 
+               = service->priv_socket_path 
+               = talloc_asprintf(listen_socket, "%s/%s", 
+                                                         lp_winbindd_privileged_socket_directory(task->lp_ctx), 
+                                                         WINBINDD_SAMBA3_SOCKET);
+       if (!listen_socket->socket_path) goto nomem;
        if (!listen_socket->socket_path) goto nomem;
        listen_socket->service          = service;
        listen_socket->privileged       = true;
@@ -201,21 +218,10 @@ nomem:
        return;
 }
 
-/*
-  initialise the winbind server
- */
-static NTSTATUS winbind_init(struct event_context *event_ctx,
-                            struct loadparm_context *lp_ctx,
-                            const struct model_ops *model_ops)
-{
-       return task_server_startup(event_ctx, lp_ctx, "winbind",
-                                  model_ops, winbind_task_init);
-}
-
 /*
   register ourselves as a available server
 */
 NTSTATUS server_service_winbind_init(void)
 {
-       return register_server_service("winbind", winbind_init);
+       return register_server_service("winbind", winbind_task_init);
 }