]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
notifyd: Factor out notifyd_parse_entry() into its own file
authorVolker Lendecke <vl@samba.org>
Wed, 21 Oct 2020 15:26:30 +0000 (17:26 +0200)
committerJeremy Allison <jra@samba.org>
Sat, 24 Oct 2020 05:57:31 +0000 (05:57 +0000)
The next step will be to factor out notifyd_parse_db() and and
notify_walk() for consumption outside of smbd. notifyd_parse_db()
needs access to the internal representation of notifyd's database, so
move it into a commonly usable file.

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/smbd/notifyd/notifyd.c
source3/smbd/notifyd/notifyd_entry.c [new file with mode: 0644]
source3/smbd/notifyd/notifyd_private.h [new file with mode: 0644]
source3/smbd/notifyd/wscript_build

index 530e844015dd4e342cc5eabe7edb9a69c38ad5ad..9029e88dc575b9d889f1b67bf2afdf49f8ad101b 100644 (file)
@@ -19,6 +19,7 @@
 
 #include "replace.h"
 #include <tevent.h>
+#include "notifyd_private.h"
 #include "lib/util/server_id.h"
 #include "lib/util/data_blob.h"
 #include "librpc/gen_ndr/notify.h"
@@ -99,22 +100,6 @@ struct notifyd_state {
        struct sys_notify_context *sys_notify_ctx;
 };
 
-/*
- * notifyd's representation of a notify instance
- */
-struct notifyd_instance {
-       struct server_id client;
-       struct notify_instance instance;
-
-       void *sys_watch; /* inotify/fam/etc handle */
-
-       /*
-        * Filters after sys_watch took responsibility of some bits
-        */
-       uint32_t internal_filter;
-       uint32_t internal_subdir_filter;
-};
-
 struct notifyd_peer {
        struct notifyd_state *state;
        struct server_id pid;
@@ -342,28 +327,6 @@ int notifyd_recv(struct tevent_req *req)
        return tevent_req_simple_recv_unix(req);
 }
 
-/*
- * Parse an entry in the notifyd_context->entries database
- */
-
-static bool notifyd_parse_entry(uint8_t *buf, size_t buflen,
-                               struct notifyd_instance **instances,
-                               size_t *num_instances)
-{
-       if ((buflen % sizeof(struct notifyd_instance)) != 0) {
-               DBG_WARNING("invalid buffer size: %zu\n", buflen);
-               return false;
-       }
-
-       if (instances != NULL) {
-               *instances = (struct notifyd_instance *)buf;
-       }
-       if (num_instances != NULL) {
-               *num_instances = buflen / sizeof(struct notifyd_instance);
-       }
-       return true;
-}
-
 static bool notifyd_apply_rec_change(
        const struct server_id *client,
        const char *path, size_t pathlen,
diff --git a/source3/smbd/notifyd/notifyd_entry.c b/source3/smbd/notifyd/notifyd_entry.c
new file mode 100644 (file)
index 0000000..539010d
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "replace.h"
+#include "lib/util/debug.h"
+#include "notifyd_private.h"
+
+/*
+ * Parse an entry in the notifyd_context->entries database
+ */
+
+bool notifyd_parse_entry(
+       uint8_t *buf,
+       size_t buflen,
+       struct notifyd_instance **instances,
+       size_t *num_instances)
+{
+       if ((buflen % sizeof(struct notifyd_instance)) != 0) {
+               DBG_WARNING("invalid buffer size: %zu\n", buflen);
+               return false;
+       }
+
+       if (instances != NULL) {
+               *instances = (struct notifyd_instance *)buf;
+       }
+       if (num_instances != NULL) {
+               *num_instances = buflen / sizeof(struct notifyd_instance);
+       }
+       return true;
+}
diff --git a/source3/smbd/notifyd/notifyd_private.h b/source3/smbd/notifyd/notifyd_private.h
new file mode 100644 (file)
index 0000000..36c08f4
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __NOTIFYD_PRIVATE_H__
+#define __NOTIFYD_PRIVATE_H__
+
+#include "replace.h"
+#include "lib/util/server_id.h"
+#include "notifyd.h"
+
+/*
+ * notifyd's representation of a notify instance
+ */
+struct notifyd_instance {
+       struct server_id client;
+       struct notify_instance instance;
+
+       void *sys_watch; /* inotify/fam/etc handle */
+
+       /*
+        * Filters after sys_watch took responsibility of some bits
+        */
+       uint32_t internal_filter;
+       uint32_t internal_subdir_filter;
+};
+
+/*
+ * Parse an entry in the notifyd_context->entries database
+ */
+
+bool notifyd_parse_entry(
+       uint8_t *buf,
+       size_t buflen,
+       struct notifyd_instance **instances,
+       size_t *num_instances);
+
+#endif
index 55cfd8837c4637c8d579bbe023d281cc11c7c82a..e87421d4202b2243cc2b4bb16f78ea74130116ea 100644 (file)
@@ -1,8 +1,17 @@
 #!/usr/bin/env python
 
+bld.SAMBA3_SUBSYSTEM('notifyd_db',
+                    source='notifyd_entry.c',
+                     deps='samba-debug')
+
 bld.SAMBA3_SUBSYSTEM('notifyd',
                     source='notifyd.c',
-                     deps='util_tdb TDB_LIB messages_util')
+                     deps='''
+                         util_tdb
+                         TDB_LIB
+                         messages_util
+                         notifyd_db
+                     ''')
 
 bld.SAMBA3_BINARY('notifyd-tests',
                   source='tests.c',