From daf79e33c7e8873345fb4a251f1e880fd767df19 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Thu, 9 Jun 2011 11:18:15 +1000 Subject: server_id: Change format to vnn:pid.task_id, pid.task_id or pid This helps ensure the string cannot be ambiguous, while also ensuring that it remains simple in the non-cluster case. The asymmetry of reading get_my_vnn() but writing based on NONCLUSTER_VNN is acceptable because in the non-clustered case, they are equal, and in the clustered case we will print the full string. Andrew Bartlett --- lib/util/server_id.c | 7 ++++++- source3/lib/util.c | 18 ++++++++++++++---- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/lib/util/server_id.c b/lib/util/server_id.c index a67c40eb19..195deeac7c 100644 --- a/lib/util/server_id.c +++ b/lib/util/server_id.c @@ -26,9 +26,14 @@ char *server_id_str(TALLOC_CTX *mem_ctx, const struct server_id *id) return talloc_asprintf(mem_ctx, "%llu", (unsigned long long)id->pid); + } else if (id->vnn == NONCLUSTER_VNN) { + return talloc_asprintf(mem_ctx, + "%llu.%u", + (unsigned long long)id->pid, + (unsigned)id->task_id); } else { return talloc_asprintf(mem_ctx, - "%u:%llu:%u", + "%u:%llu.%u", (unsigned)id->vnn, (unsigned long long)id->pid, (unsigned)id->task_id); diff --git a/source3/lib/util.c b/source3/lib/util.c index 5fb8a41dae..499f5f7f6b 100644 --- a/source3/lib/util.c +++ b/source3/lib/util.c @@ -1971,16 +1971,26 @@ struct server_id interpret_pid(const char *pid_string) ZERO_STRUCT(result); - /* We accept either the 2 or 3 componet form for backwards compatability in the smbstatus command line tool */ - if (sscanf(pid_string, "%u:%llu:%u", &vnn, &pid, &task_id) >= 2) { + /* We accept various forms with 1, 2 or 3 component forms + * because the server_id_str() can print different forms, and + * we want backwards compatibility for scripts that may call + * smbclient. */ + if (sscanf(pid_string, "%u:%llu.%u", &vnn, &pid, &task_id) == 3) { result.vnn = vnn; result.pid = pid; result.task_id = task_id; + } else if (sscanf(pid_string, "%u:%llu", &vnn, &pid) == 2) { + result.vnn = vnn; + result.pid = pid; + result.task_id = 0; + } else if (sscanf(pid_string, "%llu.%u", &pid, &task_id) == 2) { + result.vnn = get_my_vnn(); + result.pid = pid; + result.task_id = task_id; } else if (sscanf(pid_string, "%d", &pid) == 1) { result.vnn = get_my_vnn(); result.pid = pid; - } - else { + } else { result.vnn = NONCLUSTER_VNN; result.pid = (uint64_t)-1; } -- cgit