1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-02 09:47:23 +03:00

notifyd: Factor out notifyd_parse_entry() into its own file

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>
This commit is contained in:
Volker Lendecke 2020-10-21 17:26:30 +02:00 committed by Jeremy Allison
parent 4dac4859db
commit 3e648e9d61
4 changed files with 102 additions and 39 deletions

View 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,

View File

@ -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;
}

View File

@ -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

View 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',