2007-01-19 06:54:01 +03:00
/*
Unix SMB / CIFS implementation .
local ( dummy ) clustering operations
Copyright ( C ) Andrew Tridgell 2006
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
2007-07-10 06:07:03 +04:00
the Free Software Foundation ; either version 3 of the License , or
2007-01-19 06:54:01 +03:00
( 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
2007-07-10 06:07:03 +04:00
along with this program . If not , see < http : //www.gnu.org/licenses/>.
2007-01-19 06:54:01 +03:00
*/
# include "includes.h"
# include "cluster/cluster.h"
# include "cluster/cluster_private.h"
2008-09-16 17:16:31 +04:00
# include "../tdb/include/tdb.h"
2007-11-16 22:12:00 +03:00
# include "tdb_wrap.h"
2007-01-20 03:48:31 +03:00
# include "system/filesys.h"
2007-09-08 16:42:09 +04:00
# include "param/param.h"
2008-12-16 17:36:18 +03:00
# include "librpc/gen_ndr/server_id.h"
2007-01-19 06:54:01 +03:00
/*
server a server_id for the local node
*/
2008-02-04 09:51:38 +03:00
static struct server_id local_id ( struct cluster_ops * ops , uint64_t id , uint32_t id2 )
2007-01-19 06:54:01 +03:00
{
struct server_id server_id ;
ZERO_STRUCT ( server_id ) ;
server_id . id = id ;
2008-02-04 09:51:38 +03:00
server_id . id2 = id2 ;
2007-01-19 06:54:01 +03:00
return server_id ;
}
/*
return a server_id as a string
*/
static const char * local_id_string ( struct cluster_ops * ops ,
TALLOC_CTX * mem_ctx , struct server_id id )
{
2008-02-04 09:51:38 +03:00
return talloc_asprintf ( mem_ctx , " %u.%llu.%u " , id . node , ( unsigned long long ) id . id , id . id2 ) ;
2007-01-19 06:54:01 +03:00
}
2007-01-20 03:48:31 +03:00
/*
open a tmp tdb for the local node . By using smbd_tmp_path ( ) we don ' t need
TDB_CLEAR_IF_FIRST as the tmp path is wiped at startup
*/
static struct tdb_wrap * local_tdb_tmp_open ( struct cluster_ops * ops ,
2007-12-04 02:12:03 +03:00
TALLOC_CTX * mem_ctx ,
2007-12-14 00:46:23 +03:00
struct loadparm_context * lp_ctx ,
2007-12-04 02:12:03 +03:00
const char * dbname , int flags )
2007-01-20 03:48:31 +03:00
{
2007-12-14 00:46:23 +03:00
char * path = smbd_tmp_path ( mem_ctx , lp_ctx , dbname ) ;
2007-01-20 03:48:31 +03:00
struct tdb_wrap * w ;
w = tdb_wrap_open ( mem_ctx , path , 0 , flags ,
O_RDWR | O_CREAT , 0600 ) ;
talloc_free ( path ) ;
return w ;
}
2007-02-08 03:58:17 +03:00
/*
dummy backend handle function
*/
static void * local_backend_handle ( struct cluster_ops * ops )
{
return NULL ;
}
/*
dummy message init function - not needed as all messages are local
*/
static NTSTATUS local_message_init ( struct cluster_ops * ops ,
struct messaging_context * msg ,
struct server_id server ,
cluster_message_fn_t handler )
{
return NT_STATUS_OK ;
}
/*
dummy message send
*/
static NTSTATUS local_message_send ( struct cluster_ops * ops ,
2007-02-09 04:52:13 +03:00
struct server_id server , DATA_BLOB * data )
2007-02-08 03:58:17 +03:00
{
return NT_STATUS_INVALID_DEVICE_REQUEST ;
}
2007-01-19 06:54:01 +03:00
static struct cluster_ops cluster_local_ops = {
2007-01-20 03:48:31 +03:00
. cluster_id = local_id ,
. cluster_id_string = local_id_string ,
. cluster_tdb_tmp_open = local_tdb_tmp_open ,
2007-02-08 03:58:17 +03:00
. backend_handle = local_backend_handle ,
. message_init = local_message_init ,
. message_send = local_message_send ,
2009-02-02 11:36:58 +03:00
. private_data = NULL
2007-01-19 06:54:01 +03:00
} ;
void cluster_local_init ( void )
{
cluster_set_ops ( & cluster_local_ops ) ;
}