diff options
author | Keith Packard <keithp@keithp.com> | 2011-03-03 13:42:07 -0800 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2011-03-03 13:42:07 -0800 |
commit | 8e4c3ce55b0f186bc6ba4039e30629669b6087b7 (patch) | |
tree | c8cd39e320d50f8c5570bc7c0e57a40854868d2e /Xext | |
parent | f3d19c0cf3327cceb90f7378f5d8fc0c3e327400 (diff) | |
parent | 296561506a91742cc150a0fb6fc0df5dbe98c780 (diff) |
Merge remote branch 'rjy/clientids'
Diffstat (limited to 'Xext')
-rw-r--r-- | Xext/xselinux_hooks.c | 32 |
1 files changed, 16 insertions, 16 deletions
diff --git a/Xext/xselinux_hooks.c b/Xext/xselinux_hooks.c index 560e1e9bf..f1d8e5d2f 100644 --- a/Xext/xselinux_hooks.c +++ b/Xext/xselinux_hooks.c @@ -40,6 +40,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include "propertyst.h" #include "extnsionst.h" #include "xacestr.h" +#include "client.h" #include "../os/osdep.h" #define _XSELINUX_NEED_FLASK_MAP #include "xselinuxint.h" @@ -129,26 +130,25 @@ SELinuxLabelClient(ClientPtr client) /* For local clients, try and determine the executable name */ if (XaceIsLocal(client)) { - struct ucred creds; - socklen_t len = sizeof(creds); - char path[PATH_MAX + 1]; - size_t bytes; - - memset(&creds, 0, sizeof(creds)); - if (getsockopt(fd, SOL_SOCKET, SO_PEERCRED, &creds, &len) < 0) - goto finish; + /* Get cached command name if CLIENTIDS is enabled. */ + const char *cmdname = GetClientCmdName(client); + Bool cached = (cmdname != NULL); + /* If CLIENTIDS is disabled, figure out the command name from + * scratch. */ + if (!cmdname) + { + pid_t pid = DetermineClientPid(client); + if (pid != -1) + DetermineClientCmd(pid, &cmdname, NULL); + } - snprintf(path, PATH_MAX + 1, "/proc/%d/cmdline", creds.pid); - fd = open(path, O_RDONLY); - if (fd < 0) + if (!cmdname) goto finish; - bytes = read(fd, path, PATH_MAX + 1); - close(fd); - if (bytes <= 0) - goto finish; + strncpy(subj->command, cmdname, COMMAND_LEN - 1); - strncpy(subj->command, path, COMMAND_LEN - 1); + if (!cached) + free((void *) cmdname); /* const char * */ } finish: |