diff options
-rw-r--r-- | lib/util/server_id.c | 36 | ||||
-rw-r--r-- | lib/util/util.h | 2 | ||||
-rwxr-xr-x | lib/util/wscript_build | 3 | ||||
-rw-r--r-- | librpc/idl/server_id.idl | 7 | ||||
-rw-r--r-- | source3/Makefile.in | 2 | ||||
-rw-r--r-- | source3/include/messages.h | 7 | ||||
-rw-r--r-- | source3/include/proto.h | 1 | ||||
-rw-r--r-- | source3/lib/g_lock.c | 10 | ||||
-rw-r--r-- | source3/lib/util.c | 18 | ||||
-rw-r--r-- | source3/locking/brlock.c | 2 | ||||
-rw-r--r-- | source3/smbd/oplock.c | 10 | ||||
-rw-r--r-- | source3/smbd/sesssetup.c | 2 | ||||
-rw-r--r-- | source3/utils/net_g_lock.c | 2 | ||||
-rw-r--r-- | source3/utils/net_serverid.c | 12 | ||||
-rw-r--r-- | source3/utils/smbcontrol.c | 6 | ||||
-rw-r--r-- | source4/cluster/cluster.c | 11 | ||||
-rw-r--r-- | source4/cluster/cluster.h | 1 | ||||
-rw-r--r-- | source4/cluster/cluster_private.h | 2 | ||||
-rw-r--r-- | source4/cluster/local.c | 11 | ||||
-rw-r--r-- | source4/lib/messaging/messaging.c | 8 | ||||
-rw-r--r-- | source4/smb_server/smb/receive.c | 2 | ||||
-rw-r--r-- | source4/smbd/service_stream.c | 2 |
22 files changed, 77 insertions, 80 deletions
diff --git a/lib/util/server_id.c b/lib/util/server_id.c new file mode 100644 index 0000000000..a67c40eb19 --- /dev/null +++ b/lib/util/server_id.c @@ -0,0 +1,36 @@ +/* + Unix SMB/CIFS implementation. + Samba utility functions + Copyright (C) Andrew Bartlett 2011 + + 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 "includes.h" +#include "librpc/gen_ndr/server_id.h" + +char *server_id_str(TALLOC_CTX *mem_ctx, const struct server_id *id) +{ + if (id->vnn == NONCLUSTER_VNN && id->task_id == 0) { + return talloc_asprintf(mem_ctx, + "%llu", + (unsigned long long)id->pid); + } else { + return talloc_asprintf(mem_ctx, + "%u:%llu:%u", + (unsigned)id->vnn, + (unsigned long long)id->pid, + (unsigned)id->task_id); + } +} diff --git a/lib/util/util.h b/lib/util/util.h index e89c4ac997..e50cc38a2f 100644 --- a/lib/util/util.h +++ b/lib/util/util.h @@ -916,5 +916,7 @@ char *data_path(TALLOC_CTX *mem_ctx, const char *name); **/ const char *shlib_ext(void); +struct server_id; +char *server_id_str(TALLOC_CTX *mem_ctx, const struct server_id *id); #endif /* _SAMBA_UTIL_H_ */ diff --git a/lib/util/wscript_build b/lib/util/wscript_build index 8ce30eb689..6c4bb37884 100755 --- a/lib/util/wscript_build +++ b/lib/util/wscript_build @@ -5,7 +5,8 @@ common_util_sources = '''talloc_stack.c smb_threads.c xfile.c data_blob.c genrand.c fsusage.c blocking.c become_daemon.c signal.c system.c params.c util.c util_id.c util_net.c util_strlist.c util_paths.c idtree.c debug.c fault.c base64.c - util_str.c util_str_common.c substitute.c ms_fnmatch.c''' + util_str.c util_str_common.c substitute.c ms_fnmatch.c + server_id.c''' common_util_headers = 'debug.h' common_util_public_deps = 'talloc pthread LIBCRYPTO CHARSET' diff --git a/librpc/idl/server_id.idl b/librpc/idl/server_id.idl index 51900000ed..414e05a190 100644 --- a/librpc/idl/server_id.idl +++ b/librpc/idl/server_id.idl @@ -4,6 +4,13 @@ interface server_id { + /* + * Virtual Node Numbers are identifying a node within a cluster. + * Ctdbd sets this, we retrieve our vnn from it. + */ + + const int NONCLUSTER_VNN = 0xFFFFFFFF; + /* used to look like the following, note that unique_id was not * marshalled at all... diff --git a/source3/Makefile.in b/source3/Makefile.in index 8165d2585c..a06c8c7c09 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -429,7 +429,7 @@ UTIL_OBJ = ../lib/util/rbtree.o ../lib/util/signal.o ../lib/util/time.o \ ../lib/util/tevent_werror.o \ ../lib/util/smb_threads.o ../lib/util/util_id.o \ ../lib/util/blocking.o ../lib/util/rfc1738.o \ - ../lib/util/select.o ../lib/util/util_pw.o + ../lib/util/select.o ../lib/util/util_pw.o ../lib/util/server_id.o CRYPTO_OBJ = ../lib/crypto/crc32.o ../lib/crypto/md5.o \ ../lib/crypto/hmacmd5.o ../lib/crypto/arcfour.o \ diff --git a/source3/include/messages.h b/source3/include/messages.h index a78599055d..41d5bb19fd 100644 --- a/source3/include/messages.h +++ b/source3/include/messages.h @@ -49,13 +49,6 @@ /* - * Virtual Node Numbers are identifying a node within a cluster. Ctdbd sets - * this, we retrieve our vnn from it. - */ - -#define NONCLUSTER_VNN (0xFFFFFFFF) - -/* * ctdb gives us 64-bit server ids for messaging_send. This is done to avoid * pid clashes and to be able to register for special messages like "all * smbds". diff --git a/source3/include/proto.h b/source3/include/proto.h index c04dc94e20..42c62d2f6f 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -594,7 +594,6 @@ bool cluster_id_equal(const struct server_id *id1, const struct server_id *id2); bool procid_is_me(const struct server_id *pid); struct server_id interpret_pid(const char *pid_string); -char *procid_str(TALLOC_CTX *mem_ctx, const struct server_id *pid); char *procid_str_static(const struct server_id *pid); bool procid_valid(const struct server_id *pid); bool procid_is_local(const struct server_id *pid); diff --git a/source3/lib/g_lock.c b/source3/lib/g_lock.c index f2452919af..006ee3698c 100644 --- a/source3/lib/g_lock.c +++ b/source3/lib/g_lock.c @@ -108,7 +108,7 @@ static bool g_lock_parse(TALLOC_CTX *mem_ctx, TDB_DATA data, DEBUG(10, ("locks:\n")); for (i=0; i<num_locks; i++) { DEBUGADD(10, ("%s: %s %s\n", - procid_str(talloc_tos(), &locks[i].pid), + server_id_str(talloc_tos(), &locks[i].pid), ((locks[i].lock_type & 1) == G_LOCK_READ) ? "read" : "write", (locks[i].lock_type & G_LOCK_PENDING) ? @@ -118,7 +118,7 @@ static bool g_lock_parse(TALLOC_CTX *mem_ctx, TDB_DATA data, && !process_exists(locks[i].pid)) { DEBUGADD(10, ("lock owner %s died -- discarding\n", - procid_str(talloc_tos(), + server_id_str(talloc_tos(), &locks[i].pid))); if (i < (num_locks-1)) { @@ -146,7 +146,7 @@ static void g_lock_cleanup(int *pnum_locks, struct g_lock_rec *locks) continue; } DEBUGADD(10, ("%s does not exist -- discarding\n", - procid_str(talloc_tos(), &locks[i].pid))); + server_id_str(talloc_tos(), &locks[i].pid))); if (i < (num_locks-1)) { locks[i] = locks[num_locks-1]; @@ -496,7 +496,7 @@ static void g_lock_got_retry(struct messaging_context *msg, bool *pretry = (bool *)private_data; DEBUG(10, ("Got retry message from pid %s\n", - procid_str(talloc_tos(), &server_id))); + server_id_str(talloc_tos(), &server_id))); *pretry = true; } @@ -587,7 +587,7 @@ static NTSTATUS g_lock_force_unlock(struct g_lock_ctx *ctx, const char *name, &data_blob_null); if (!NT_STATUS_IS_OK(status)) { DEBUG(1, ("sending retry to %s failed: %s\n", - procid_str(talloc_tos(), + server_id_str(talloc_tos(), &locks[i].pid), nt_errstr(status))); } else { diff --git a/source3/lib/util.c b/source3/lib/util.c index ca30858914..5fb8a41dae 100644 --- a/source3/lib/util.c +++ b/source3/lib/util.c @@ -1987,25 +1987,9 @@ struct server_id interpret_pid(const char *pid_string) return result; } -char *procid_str(TALLOC_CTX *mem_ctx, const struct server_id *pid) -{ - if (pid->vnn == NONCLUSTER_VNN && pid->task_id == 0) { - return talloc_asprintf(mem_ctx, - "%llu", - (unsigned long long)pid->pid); - } - else { - return talloc_asprintf(mem_ctx, - "%u:%llu:%u", - (unsigned)pid->vnn, - (unsigned long long)pid->pid, - (unsigned)pid->task_id); - } -} - char *procid_str_static(const struct server_id *pid) { - return procid_str(talloc_tos(), pid); + return server_id_str(talloc_tos(), pid); } bool procid_valid(const struct server_id *pid) diff --git a/source3/locking/brlock.c b/source3/locking/brlock.c index 52e23ec003..ad0f9d5e52 100644 --- a/source3/locking/brlock.c +++ b/source3/locking/brlock.c @@ -51,7 +51,7 @@ static void print_lock_struct(unsigned int i, struct lock_struct *pls) i, (unsigned long long)pls->context.smblctx, (unsigned int)pls->context.tid, - procid_str(talloc_tos(), &pls->context.pid) )); + server_id_str(talloc_tos(), &pls->context.pid) )); DEBUG(10,("start = %.0f, size = %.0f, fnum = %d, %s %s\n", (double)pls->start, diff --git a/source3/smbd/oplock.c b/source3/smbd/oplock.c index 8482a00f64..56481e9700 100644 --- a/source3/smbd/oplock.c +++ b/source3/smbd/oplock.c @@ -459,7 +459,7 @@ void process_oplock_async_level2_break_message(struct messaging_context *msg_ctx message_to_share_mode_entry(&msg, (char *)data->data); DEBUG(10, ("Got oplock async level 2 break message from pid %s: " - "%s/%lu\n", procid_str(talloc_tos(), &src), + "%s/%lu\n", server_id_str(talloc_tos(), &src), file_id_string_tos(&msg.id), msg.share_file_id)); fsp = initial_break_processing(sconn, msg.id, msg.share_file_id); @@ -510,7 +510,7 @@ static void process_oplock_break_message(struct messaging_context *msg_ctx, message_to_share_mode_entry(&msg, (char *)data->data); DEBUG(10, ("Got oplock break message from pid %s: %s/%lu\n", - procid_str(talloc_tos(), &src), file_id_string_tos(&msg.id), + server_id_str(talloc_tos(), &src), file_id_string_tos(&msg.id), msg.share_file_id)); fsp = initial_break_processing(sconn, msg.id, msg.share_file_id); @@ -617,7 +617,7 @@ static void process_kernel_oplock_break(struct messaging_context *msg_ctx, file_id = (unsigned long)IVAL(data->data, 24); DEBUG(10, ("Got kernel oplock break message from pid %s: %s/%u\n", - procid_str(talloc_tos(), &src), file_id_string_tos(&id), + server_id_str(talloc_tos(), &src), file_id_string_tos(&id), (unsigned int)file_id)); fsp = initial_break_processing(sconn, id, file_id); @@ -704,7 +704,7 @@ static void process_oplock_break_response(struct messaging_context *msg_ctx, message_to_share_mode_entry(&msg, (char *)data->data); DEBUG(10, ("Got oplock break response from pid %s: %s/%lu mid %llu\n", - procid_str(talloc_tos(), &src), file_id_string_tos(&msg.id), + server_id_str(talloc_tos(), &src), file_id_string_tos(&msg.id), msg.share_file_id, (unsigned long long)msg.op_mid)); schedule_deferred_open_message_smb(msg.op_mid); @@ -732,7 +732,7 @@ static void process_open_retry_message(struct messaging_context *msg_ctx, message_to_share_mode_entry(&msg, (char *)data->data); DEBUG(10, ("Got open retry msg from pid %s: %s mid %llu\n", - procid_str(talloc_tos(), &src), file_id_string_tos(&msg.id), + server_id_str(talloc_tos(), &src), file_id_string_tos(&msg.id), (unsigned long long)msg.op_mid)); schedule_deferred_open_message_smb(msg.op_mid); diff --git a/source3/smbd/sesssetup.c b/source3/smbd/sesssetup.c index ee305c478e..98bed880df 100644 --- a/source3/smbd/sesssetup.c +++ b/source3/smbd/sesssetup.c @@ -1223,7 +1223,7 @@ static int shutdown_other_smbds(const struct connections_key *key, struct shutdown_state *state = (struct shutdown_state *)private_data; DEBUG(10, ("shutdown_other_smbds: %s, %s\n", - procid_str(talloc_tos(), &crec->pid), crec->addr)); + server_id_str(talloc_tos(), &crec->pid), crec->addr)); if (!process_exists(crec->pid)) { DEBUG(10, ("process does not exist\n")); diff --git a/source3/utils/net_g_lock.c b/source3/utils/net_g_lock.c index 6ed5d1776a..bfb9a225ab 100644 --- a/source3/utils/net_g_lock.c +++ b/source3/utils/net_g_lock.c @@ -113,7 +113,7 @@ static int net_g_lock_dump_fn(struct server_id pid, enum g_lock_type lock_type, { char *pidstr; - pidstr = procid_str(talloc_tos(), &pid); + pidstr = server_id_str(talloc_tos(), &pid); d_printf("%s: %s (%s)\n", pidstr, (lock_type & 1) ? "WRITE" : "READ", (lock_type & G_LOCK_PENDING) ? "pending" : "holder"); diff --git a/source3/utils/net_serverid.c b/source3/utils/net_serverid.c index 08a1a7f298..2c3320f40e 100644 --- a/source3/utils/net_serverid.c +++ b/source3/utils/net_serverid.c @@ -26,7 +26,7 @@ static int net_serverid_list_fn(const struct server_id *id, uint32_t msg_flags, void *priv) { - char *str = procid_str(talloc_tos(), id); + char *str = server_id_str(talloc_tos(), id); d_printf("%s %llu 0x%x\n", str, (unsigned long long)id->unique_id, (unsigned int)msg_flags); TALLOC_FREE(str); @@ -51,7 +51,7 @@ static int net_serverid_wipe_fn(struct db_record *rec, } status = rec->delete_rec(rec); if (!NT_STATUS_IS_OK(status)) { - char *str = procid_str(talloc_tos(), id); + char *str = server_id_str(talloc_tos(), id); DEBUG(1, ("Could not delete serverid.tdb record %s: %s\n", str, nt_errstr(status))); TALLOC_FREE(str); @@ -75,13 +75,13 @@ static int net_serverid_wipedbs_conn( NTSTATUS status; DEBUG(10, ("Deleting connections.tdb record for pid %s\n", - procid_str(talloc_tos(), &key->pid))); + server_id_str(talloc_tos(), &key->pid))); status = rec->delete_rec(rec); if (!NT_STATUS_IS_OK(status)) { DEBUG(1, ("Could not delete connections.tdb record " "for pid %s: %s\n", - procid_str(talloc_tos(), &key->pid), + server_id_str(talloc_tos(), &key->pid), nt_errstr(status))); } } @@ -97,13 +97,13 @@ static int net_serverid_wipedbs_sessionid(struct db_record *rec, NTSTATUS status; DEBUG(10, ("Deleting sessionid.tdb record for pid %s\n", - procid_str(talloc_tos(), &session->pid))); + server_id_str(talloc_tos(), &session->pid))); status = rec->delete_rec(rec); if (!NT_STATUS_IS_OK(status)) { DEBUG(1, ("Could not delete session.tdb record " "for pid %s: %s\n", - procid_str(talloc_tos(), &session->pid), + server_id_str(talloc_tos(), &session->pid), nt_errstr(status))); } } diff --git a/source3/utils/smbcontrol.c b/source3/utils/smbcontrol.c index 5bf5c5da7b..0a3a94a1df 100644 --- a/source3/utils/smbcontrol.c +++ b/source3/utils/smbcontrol.c @@ -119,7 +119,7 @@ static void print_pid_string_cb(struct messaging_context *msg, { char *pidstr; - pidstr = procid_str(talloc_tos(), &pid); + pidstr = server_id_str(talloc_tos(), &pid); printf("PID %s: %.*s", pidstr, (int)data->length, (const char *)data->data); TALLOC_FREE(pidstr); @@ -433,7 +433,7 @@ static void pong_cb(struct messaging_context *msg, struct server_id pid, DATA_BLOB *data) { - char *src_string = procid_str(NULL, &pid); + char *src_string = server_id_str(NULL, &pid); printf("PONG from pid %s\n", src_string); TALLOC_FREE(src_string); num_replies++; @@ -1143,7 +1143,7 @@ static void winbind_validate_cache_cb(struct messaging_context *msg, struct server_id pid, DATA_BLOB *data) { - char *src_string = procid_str(NULL, &pid); + char *src_string = server_id_str(NULL, &pid); printf("Winbindd cache is %svalid. (answer from pid %s)\n", (*(data->data) == 0 ? "" : "NOT "), src_string); TALLOC_FREE(src_string); diff --git a/source4/cluster/cluster.c b/source4/cluster/cluster.c index 767e6a719f..757489ebce 100644 --- a/source4/cluster/cluster.c +++ b/source4/cluster/cluster.c @@ -56,17 +56,6 @@ struct server_id cluster_id(uint64_t pid, uint32_t task_id) return ops->cluster_id(ops, pid, task_id); } - -/* - return a server_id as a string -*/ -char *cluster_id_string(TALLOC_CTX *mem_ctx, struct server_id id) -{ - cluster_init(); - return ops->cluster_id_string(ops, mem_ctx, id); -} - - /* open a temporary tdb in a cluster friendly manner */ diff --git a/source4/cluster/cluster.h b/source4/cluster/cluster.h index a6f74f956c..3dd9f4ce7c 100644 --- a/source4/cluster/cluster.h +++ b/source4/cluster/cluster.h @@ -41,7 +41,6 @@ typedef void (*cluster_message_fn_t)(struct imessaging_context *, DATA_BLOB); /* prototypes */ struct server_id cluster_id(uint64_t id, uint32_t task_id); -char *cluster_id_string(TALLOC_CTX *mem_ctx, struct server_id id); struct tdb_wrap *cluster_tdb_tmp_open(TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx, const char *dbname, int flags); void *cluster_backend_handle(void); diff --git a/source4/cluster/cluster_private.h b/source4/cluster/cluster_private.h index 5f038dd92f..6f68ad62bd 100644 --- a/source4/cluster/cluster_private.h +++ b/source4/cluster/cluster_private.h @@ -24,8 +24,6 @@ struct cluster_ops { struct server_id (*cluster_id)(struct cluster_ops *ops, uint64_t id, uint32_t id2); - char *(*cluster_id_string)(struct cluster_ops *ops, - TALLOC_CTX *, struct server_id ); struct tdb_wrap *(*cluster_tdb_tmp_open)(struct cluster_ops *, TALLOC_CTX *, struct loadparm_context *, diff --git a/source4/cluster/local.c b/source4/cluster/local.c index e7b648fc9b..833a86b07f 100644 --- a/source4/cluster/local.c +++ b/source4/cluster/local.c @@ -42,16 +42,6 @@ static struct server_id local_id(struct cluster_ops *ops, uint64_t pid, uint32_t /* - return a server_id as a string -*/ -static char *local_id_string(struct cluster_ops *ops, - TALLOC_CTX *mem_ctx, struct server_id id) -{ - return talloc_asprintf(mem_ctx, "%u.%llu.%u", id.vnn, (unsigned long long)id.pid, id.task_id); -} - - -/* 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 */ @@ -98,7 +88,6 @@ static NTSTATUS local_message_send(struct cluster_ops *ops, static struct cluster_ops cluster_local_ops = { .cluster_id = local_id, - .cluster_id_string = local_id_string, .cluster_tdb_tmp_open = local_tdb_tmp_open, .backend_handle = local_backend_handle, .message_init = local_message_init, diff --git a/source4/lib/messaging/messaging.c b/source4/lib/messaging/messaging.c index 3a330d5794..aa1b43308f 100644 --- a/source4/lib/messaging/messaging.c +++ b/source4/lib/messaging/messaging.c @@ -109,7 +109,7 @@ static void irpc_handler(struct imessaging_context *, void *, static void ping_message(struct imessaging_context *msg, void *private_data, uint32_t msg_type, struct server_id src, DATA_BLOB *data) { - char *task_id = cluster_id_string(NULL, src); + char *task_id = server_id_str(NULL, &src); DEBUG(1,("INFO: Received PING message from server %s [%.*s]\n", task_id, (int)data->length, data->data?(const char *)data->data:"")); @@ -134,7 +134,7 @@ static NTSTATUS irpc_uptime(struct irpc_message *msg, static char *imessaging_path(struct imessaging_context *msg, struct server_id server_id) { TALLOC_CTX *tmp_ctx = talloc_new(msg); - const char *id = cluster_id_string(tmp_ctx, server_id); + const char *id = server_id_str(tmp_ctx, &server_id); char *s; if (id == NULL) { return NULL; @@ -284,8 +284,8 @@ static void imessaging_send_handler(struct imessaging_context *msg) if (!NT_STATUS_IS_OK(status)) { TALLOC_CTX *tmp_ctx = talloc_new(msg); DEBUG(1,("messaging: Lost message from %s to %s of type %u - %s\n", - cluster_id_string(tmp_ctx, rec->header->from), - cluster_id_string(tmp_ctx, rec->header->to), + server_id_str(tmp_ctx, &rec->header->from), + server_id_str(tmp_ctx, &rec->header->to), rec->header->msg_type, nt_errstr(status))); talloc_free(tmp_ctx); diff --git a/source4/smb_server/smb/receive.c b/source4/smb_server/smb/receive.c index 1e5d5681f4..1379fe31cf 100644 --- a/source4/smb_server/smb/receive.c +++ b/source4/smb_server/smb/receive.c @@ -502,7 +502,7 @@ static void switch_message(int type, struct smbsrv_request *req) } } - task_id = cluster_id_string(NULL, req->smb_conn->connection->server_id); + task_id = server_id_str(NULL, &req->smb_conn->connection->server_id); DEBUG(5,("switch message %s (task_id %s)\n", smb_fn_name(type), task_id)); talloc_free(task_id); diff --git a/source4/smbd/service_stream.c b/source4/smbd/service_stream.c index efbcfb490a..6e65122063 100644 --- a/source4/smbd/service_stream.c +++ b/source4/smbd/service_stream.c @@ -217,7 +217,7 @@ static void stream_new_connection(struct tevent_context *ev, stream_socket->ops->name, tsocket_address_string(srv_conn->remote_address, tmp_ctx), tsocket_address_string(srv_conn->local_address, tmp_ctx), - cluster_id_string(tmp_ctx, server_id)); + server_id_str(tmp_ctx, &server_id)); if (title) { stream_connection_set_title(srv_conn, title); } |