This fifth patch rewrites lttng-ctl's set_session_daemon_path() to avoid duplicating snippets of code. It also fixes the snprintf return value test so the code works with both GNU C < 2.1 and >= 2.1. With GNU C < 2.1, snprintf returns -1 if the target buffer is too small; with GNU C >= 2.1, snprintf returns the required size (excluding the closing null) under the same conditions.
I do believe it is functionally identical to the version it replaces, but someone should check to make sure. :-) ------------------------------ >From 3d90c8707c362c9ecf0836c25d500c818ba2e2f0 Mon, 30 Jan 2012 16:25:29 -0500 From: Daniel U. Thibault <[email protected]> Date: Mon, 30 Jan 2012 16:25:15 -0500 Subject: [PATCH] Rewrites lttng-ctl's set_session_daemon_path(), fix snprintf() return value tests so the code works with both GNU C < 2.1 and >= 2.1 Signed-off-by: Daniel U. Thibault <[email protected]> diff --git a/lttng2-lttng-tools-2.0-pre18+-5c73c59/src/lib/lttng-ctl/lttng-ctl.c b/lttng2-lttng-tools-2.0-pre18+-5c73c59/src/lib/lttng-ctl/lttng-ctl.c index 537934f..65aa3e3 100644 --- a/lttng2-lttng-tools-2.0-pre18+-5c73c59/src/lib/lttng-ctl/lttng-ctl.c +++ b/lttng2-lttng-tools-2.0-pre18+-5c73c59/src/lib/lttng-ctl/lttng-ctl.c @@ -228,35 +228,31 @@ in_tgroup = check_tracing_group(tracing_group); } - if (uid == 0) { - /* Root */ + if ((uid == 0) || in_tgroup) { copy_string(sessiond_sock_path, DEFAULT_GLOBAL_CLIENT_UNIX_SOCK, sizeof(sessiond_sock_path)); - } else if (in_tgroup) { - /* Tracing group */ - copy_string(sessiond_sock_path, - DEFAULT_GLOBAL_CLIENT_UNIX_SOCK, - sizeof(sessiond_sock_path)); - - ret = try_connect_sessiond(sessiond_sock_path); - if (ret < 0) { - /* Global session daemon not available */ - if (snprintf(sessiond_sock_path, sizeof(sessiond_sock_path), - DEFAULT_HOME_CLIENT_UNIX_SOCK, - getenv("HOME")) < 0) { - return -ENOMEM; - } } - } else { - /* Not in tracing group and not root, default */ - if (snprintf(sessiond_sock_path, PATH_MAX, - DEFAULT_HOME_CLIENT_UNIX_SOCK, - getenv("HOME")) < 0) { + if (uid != 0) { + if (in_tgroup) { + /* Tracing group */ + ret = try_connect_sessiond(sessiond_sock_path); + if (ret >= 0) goto end; + /* Global session daemon not available... */ + } + /* ...or not in tracing group (and not root), default */ + /* + * With GNU C < 2.1, snprintf returns -1 if the target buffer is too small; + * With GNU C >= 2.1, snprintf returns the required size (excluding closing null) + */ + ret = snprintf(sessiond_sock_path, sizeof(sessiond_sock_path), + DEFAULT_HOME_CLIENT_UNIX_SOCK, + getenv("HOME")); + if ((ret < 0) || (ret >= sizeof(sessiond_sock_path))) { return -ENOMEM; } } - +end: return 0; } ------------------------------ Daniel U. Thibault R & D pour la défense Canada - Valcartier (RDDC Valcartier) / Defence R&D Canada - Valcartier (DRDC Valcartier) Système de systèmes (SdS) / System of Systems (SoS) Solutions informatiques et expérimentations (SIE) / Computing Solutions and Experimentations (CSE) 2459 Boul. Pie XI Nord Québec, QC G3J 1X5 CANADA Vox : (418) 844-4000 x4245 Fax : (418) 844-4538 NAC: 918V QSDJ Gouvernement du Canada / Government of Canada <http://www.valcartier.drdc-rddc.gc.ca/> _______________________________________________ lttng-dev mailing list [email protected] http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
