Revert "smbd: implement smbd_impersonate_{conn_vuid,conn_sess,root,guest}_create...
[samba.git] / source3 / smbd / scavenger.c
index baf71d8b93ec79b4946d4eef71904e0e462fb955..a9fda7f06415c9db72553f87cdbee5190d85672e 100644 (file)
 */
 
 #include "includes.h"
-
 #include "messages.h"
 #include "serverid.h"
 #include "smbd/globals.h"
 #include "smbd/scavenger.h"
 #include "locking/proto.h"
+#include "lib/util/server_id.h"
 #include "lib/util/util_process.h"
-#include "lib/sys_rw.h"
+#include "lib/util/sys_rw_data.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_SCAVENGER
@@ -138,27 +138,22 @@ static bool smbd_scavenger_running(struct smbd_scavenger_state *state)
 
 static int smbd_scavenger_server_id_destructor(struct server_id *id)
 {
-       serverid_deregister(*id);
        return 0;
 }
 
 static bool scavenger_say_hello(int fd, struct server_id self)
 {
-       const uint8_t *msg = (const uint8_t *)&self;
-       size_t remaining = sizeof(self);
-       size_t ofs = 0;
+       ssize_t ret;
        struct server_id_buf tmp;
 
-       while (remaining > 0) {
-               ssize_t ret;
-
-               ret = sys_write(fd, msg + ofs, remaining);
-               if (ret == -1) {
-                       DEBUG(2, ("Failed to write to pipe: %s\n",
-                                 strerror(errno)));
-                       return false;
-               }
-               remaining -= ret;
+       ret = write_data(fd, &self, sizeof(self));
+       if (ret == -1) {
+               DEBUG(2, ("Failed to write to pipe: %s\n", strerror(errno)));
+               return false;
+       }
+       if (ret < sizeof(self)) {
+               DBG_WARNING("Could not write serverid\n");
+               return false;
        }
 
        DEBUG(4, ("scavenger_say_hello: self[%s]\n",
@@ -168,21 +163,18 @@ static bool scavenger_say_hello(int fd, struct server_id self)
 
 static bool scavenger_wait_hello(int fd, struct server_id *child)
 {
-       uint8_t *msg = (uint8_t *)child;
-       size_t remaining = sizeof(*child);
-       size_t ofs = 0;
        struct server_id_buf tmp;
+       ssize_t ret;
 
-       while (remaining > 0) {
-               ssize_t ret;
-
-               ret = sys_read(fd, msg + ofs, remaining);
-               if (ret == -1) {
-                       DEBUG(2, ("Failed to read from pipe: %s\n",
-                                 strerror(errno)));
-                       return false;
-               }
-               remaining -= ret;
+       ret = read_data(fd, child, sizeof(struct server_id));
+       if (ret == -1) {
+               DEBUG(2, ("Failed to read from pipe: %s\n",
+                         strerror(errno)));
+               return false;
+       }
+       if (ret < sizeof(struct server_id)) {
+               DBG_WARNING("Could not read serverid\n");
+               return false;
        }
 
        DEBUG(4, ("scavenger_say_hello: child[%s]\n",
@@ -196,7 +188,6 @@ static bool smbd_scavenger_start(struct smbd_scavenger_state *state)
        struct tevent_fd *fde = NULL;
        int fds[2];
        int ret;
-       uint64_t unique_id;
        bool ok;
 
        SMB_ASSERT(server_id_equal(&state->parent_id, &self));
@@ -234,8 +225,6 @@ static bool smbd_scavenger_start(struct smbd_scavenger_state *state)
        smb_set_close_on_exec(fds[0]);
        smb_set_close_on_exec(fds[1]);
 
-       unique_id = serverid_get_random_unique_id();
-
        ret = fork();
        if (ret == -1) {
                int err = errno;
@@ -252,8 +241,6 @@ static bool smbd_scavenger_start(struct smbd_scavenger_state *state)
 
                close(fds[0]);
 
-               set_my_unique_id(unique_id);
-
                status = smbd_reinit_after_fork(state->msg, state->ev,
                                                true, "smbd-scavenger");
                if (!NT_STATUS_IS_OK(status)) {
@@ -268,13 +255,6 @@ static bool smbd_scavenger_start(struct smbd_scavenger_state *state)
 
                scavenger_setup_sig_term_handler(state->ev);
 
-               if (!serverid_register(*state->scavenger_id,
-                                      FLAG_MSG_GENERAL)) {
-                       DBG_WARNING("serverid_register failed");
-                       exit_server("serverid_register failed");
-                       return false;
-               }
-
                ok = scavenger_say_hello(fds[1], *state->scavenger_id);
                if (!ok) {
                        DEBUG(2, ("scavenger_say_hello failed\n"));