diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | 4aed2c8219774f5d797760606b8489a92ddc5163 (patch) | |
tree | 3f8c130f7d269626bf6a9447407ef6c35954426a /kdesu/kdesud/secure.cpp | |
download | tdebase-4aed2c8219774f5d797760606b8489a92ddc5163.tar.gz tdebase-4aed2c8219774f5d797760606b8489a92ddc5163.zip |
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdebase@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kdesu/kdesud/secure.cpp')
-rw-r--r-- | kdesu/kdesud/secure.cpp | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/kdesu/kdesud/secure.cpp b/kdesu/kdesud/secure.cpp new file mode 100644 index 000000000..3abda20bc --- /dev/null +++ b/kdesu/kdesud/secure.cpp @@ -0,0 +1,80 @@ +/* vi: ts=8 sts=4 sw=4 + * + * This file is part of the KDE project, module kdesu. + * Copyright (C) 1999,2000 Geert Jansen <g.t.jansen@stud.tue.nl> + * + * secure.cpp: Peer credentials for a UNIX socket. + */ + +#include <config.h> + +#include <stdio.h> +#include <unistd.h> +#include <fcntl.h> +#include <string.h> +#include <errno.h> + +#include <sys/types.h> +#include <sys/stat.h> +#include <sys/socket.h> + +#include <kdebug.h> +#include <ksockaddr.h> +#include "secure.h" + + +/** + * Under Linux, Socket_security is supported. + */ + +#if defined(SO_PEERCRED) + +SocketSecurity::SocketSecurity(int sockfd) +{ + ksocklen_t len = sizeof(struct ucred); + if (getsockopt(sockfd, SOL_SOCKET, SO_PEERCRED, &cred, &len) < 0) { + kdError() << "getsockopt(SO_PEERCRED) " << perror << endl; + return; + } + + ok = true; +} + +#else +# if defined(HAVE_GETPEEREID) +SocketSecurity::SocketSecurity(int sockfd) +{ + uid_t euid; + gid_t egid; + if (getpeereid(sockfd, &euid, &egid) == 0) { + cred.uid = euid; + cred.gid = egid; + cred.pid = -1; + ok = true; + } +} + +# else + + +/** + * The default version does nothing. + */ + +SocketSecurity::SocketSecurity(int sockfd) +{ + static bool warned_him = FALSE; + + if (!warned_him) { + kdWarning() << "Using void socket security. Please add support for your" << endl; + kdWarning() << "platform to kdesu/kdesud/secure.cpp" << endl; + warned_him = TRUE; + } + + // This passes the test made in handler.cpp + cred.uid = getuid(); + ok = true; +} + +# endif +#endif |