The branch, v3-4-test has been updated via 86c1dbb473323ef9480cb57584be9e02363e80af (commit) from 6fb3222504a0d2b42cd9292f9e11b2ff246d5c19 (commit)
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-4-test - Log ----------------------------------------------------------------- commit 86c1dbb473323ef9480cb57584be9e02363e80af Author: Olaf Flebbe <fle...@nix.science-computing.de> Date: Mon Aug 17 17:31:01 2009 +0200 make smbcontrol smbd ping work proper checking for arguments handle short pid_t correctly Fixes bug #6655. (cherry picked from commit 5359e397ff190c35414f6961be61a5110e237dd5) ----------------------------------------------------------------------- Summary of changes: source3/lib/util.c | 22 ++++++++++++++++------ source3/utils/smbcontrol.c | 13 +++++-------- 2 files changed, 21 insertions(+), 14 deletions(-) Changeset truncated at 500 lines: diff --git a/source3/lib/util.c b/source3/lib/util.c index 61a73e6..3d7336f 100644 --- a/source3/lib/util.c +++ b/source3/lib/util.c @@ -2743,14 +2743,15 @@ bool procid_is_me(const struct server_id *pid) struct server_id interpret_pid(const char *pid_string) { -#ifdef CLUSTER_SUPPORT - unsigned int vnn, pid; struct server_id result; - if (sscanf(pid_string, "%u:%u", &vnn, &pid) == 2) { + int pid; +#ifdef CLUSTER_SUPPORT + unsigned int vnn; + if (sscanf(pid_string, "%u:%d", &vnn, &pid) == 2) { result.vnn = vnn; result.pid = pid; } - else if (sscanf(pid_string, "%u", &pid) == 1) { + else if (sscanf(pid_string, "%d", &pid) == 1) { result.vnn = get_my_vnn(); result.pid = pid; } @@ -2758,10 +2759,19 @@ struct server_id interpret_pid(const char *pid_string) result.vnn = NONCLUSTER_VNN; result.pid = -1; } - return result; #else - return pid_to_procid(atoi(pid_string)); + if (sscanf(pid_string, "%d", &pid) != 1) { + result.pid = -1; + } else { + result.pid = pid; + } #endif + /* Assigning to result.pid may have overflowed + Map negative pid to -1: i.e. error */ + if (result.pid < 0) { + result.pid = -1; + } + return result; } char *procid_str(TALLOC_CTX *mem_ctx, const struct server_id *pid) diff --git a/source3/utils/smbcontrol.c b/source3/utils/smbcontrol.c index fc7d0aa..7fab6eb 100644 --- a/source3/utils/smbcontrol.c +++ b/source3/utils/smbcontrol.c @@ -1247,15 +1247,12 @@ static struct server_id parse_dest(const char *dest) dest = "winbindd"; } - if (!(strequal(dest, "winbindd") || strequal(dest, "nmbd"))) { - /* Check for numeric pid number */ + /* Check for numeric pid number */ + result = interpret_pid(dest); - result = interpret_pid(dest); - - /* Zero isn't valid if not smbd. */ - if (result.pid && procid_valid(&result)) { - return result; - } + /* Zero isn't valid if not "all". */ + if (result.pid && procid_valid(&result)) { + return result; } /* Look up other destinations in pidfile directory */ -- Samba Shared Repository