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:
parent
4dac4859db
commit
3e648e9d61
@ -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,
|
||||
|
42
source3/smbd/notifyd/notifyd_entry.c
Normal file
42
source3/smbd/notifyd/notifyd_entry.c
Normal 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;
|
||||
}
|
49
source3/smbd/notifyd/notifyd_private.h
Normal file
49
source3/smbd/notifyd/notifyd_private.h
Normal 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
|
@ -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',
|
||||
|
Loading…
x
Reference in New Issue
Block a user