From mboxrd@z Thu Jan 1 00:00:00 1970 From: nils.carlson@ericsson.com (Nils Carlson) Date: Fri, 1 Apr 2011 09:17:34 +0200 Subject: [ltt-dev] [UST PATCH 6/6] Make root able to connect to any traceable app In-Reply-To: <1301643140-6880-6-git-send-email-nils.carlson@ericsson.com> References: <1301643140-6880-1-git-send-email-nils.carlson@ericsson.com> <1301643140-6880-6-git-send-email-nils.carlson@ericsson.com> Message-ID: <4D957C0E.8070001@ericsson.com> merged. On 04/01/2011 09:32 AM, Nils Carlson wrote: > Make root able to connect to any traceable app, checking > (geteuid == 0). > > Signed-off-by: Nils Carlson > --- > libustcomm/ustcomm.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++- > 1 files changed, 53 insertions(+), 1 deletions(-) > > diff --git a/libustcomm/ustcomm.c b/libustcomm/ustcomm.c > index e401c42..dcf8cd8 100644 > --- a/libustcomm/ustcomm.c > +++ b/libustcomm/ustcomm.c > @@ -18,6 +18,7 @@ > /* API used by UST components to communicate with each other via sockets. */ > > #define _GNU_SOURCE > +#include > #include > #include > #include > @@ -556,7 +557,7 @@ char *ustcomm_user_sock_dir(void) > * -1: error > */ > > -int ustcomm_connect_app(pid_t pid, int *app_fd) > +static int connect_app_non_root(pid_t pid, int *app_fd) > { > int result; > int retval = 0; > @@ -588,6 +589,57 @@ free_dir_name: > return retval; > } > > + > + > +static int connect_app_root(pid_t pid, int *app_fd) > +{ > + DIR *tmp_dir; > + struct dirent *dirent; > + char *sock_name; > + int result; > + > + tmp_dir = opendir(USER_TMP_DIR); > + if (!tmp_dir) { > + return -1; > + } > + > + while ((dirent = readdir(tmp_dir))) { > + if (!strncmp(dirent->d_name, USER_SOCK_DIR_BASE, > + strlen(USER_SOCK_DIR_BASE))) { > + > + if (asprintf(&sock_name, USER_TMP_DIR "/%s/%u", > + dirent->d_name, pid)< 0) { > + goto close_tmp_dir; > + } > + > + result = ustcomm_connect_path(sock_name, app_fd); > + > + free(sock_name); > + > + if (result == 0) { > + goto close_tmp_dir; > + } > + } > + } > + > +close_tmp_dir: > + closedir(tmp_dir); > + > + return result; > +} > + > +int ustcomm_connect_app(pid_t pid, int *app_fd) > +{ > + *app_fd = 0; > + > + if (geteuid()) { > + return connect_app_non_root(pid, app_fd); > + } else { > + return connect_app_root(pid, app_fd); > + } > + > +} > + > int ensure_dir_exists(const char *dir, mode_t mode) > { > struct stat st;