This will be needed to validate peer application's privileges in cynara
Change-Id: Id5c2dab311d3707a9c4cccf38623496bb5111826
Signed-off-by: Jan Cybulski <j.cybulski@samsung.com>
#include <dpl/log/log.h>
#include <dpl/serialization.h>
#include <dpl/log/log.h>
#include <dpl/serialization.h>
#include "protocols.h"
#include "service.h"
#include "protocols.h"
#include "service.h"
-static bool getPeerID(int sock, uid_t &uid, pid_t &pid) {
+static bool getPeerID(int sock, uid_t &uid, pid_t &pid, std::string &smackLabel)
+{
struct ucred cr;
socklen_t len = sizeof(cr);
if (!getsockopt(sock, SOL_SOCKET, SO_PEERCRED, &cr, &len)) {
struct ucred cr;
socklen_t len = sizeof(cr);
if (!getsockopt(sock, SOL_SOCKET, SO_PEERCRED, &cr, &len)) {
+ char *smk;
+ ssize_t ret = smack_new_label_from_socket(sock, &smk);
+ if (ret < 0)
+ return false;
+ smackLabel = smk;
uid = cr.uid;
pid = cr.pid;
uid = cr.uid;
pid = cr.pid;
+ std::string smackLabel;
- if (!getPeerID(conn.sock, uid, pid)) {
- LogError("Closing socket because of error: unable to get peer's uid and pid");
+ if (!getPeerID(conn.sock, uid, pid, smackLabel)) {
+ LogError("Closing socket because of error: unable to get peer's uid, pid or smack label");
m_serviceManager->Close(conn);
return false;
}
m_serviceManager->Close(conn);
return false;
}