chiark / gitweb /
units: conditionalize audit multicast socket on CAP_AUDIT_READ
[elogind.git] / src / libelogind / sd-login / sd-login.c
index cc0677bdf21c94a72e9ea36d1ac76aebd699f6f4..8ebcbb0dfd5fbb79051b61a841c9d75b446bf622 100644 (file)
@@ -31,6 +31,7 @@
 #include "strv.h"
 #include "fileio.h"
 #include "login-shared.h"
+#include "formats-util.h"
 #include "sd-login.h"
 
 _public_ int sd_pid_get_session(pid_t pid, char **session) {
@@ -46,7 +47,7 @@ _public_ int sd_pid_get_unit(pid_t pid, char **unit) {
         assert_return(pid >= 0, -EINVAL);
         assert_return(unit, -EINVAL);
 
-        return cg_pid_get_unit(pid, unit);
+        return -ESRCH;
 }
 
 _public_ int sd_pid_get_user_unit(pid_t pid, char **unit) {
@@ -54,7 +55,7 @@ _public_ int sd_pid_get_user_unit(pid_t pid, char **unit) {
         assert_return(pid >= 0, -EINVAL);
         assert_return(unit, -EINVAL);
 
-        return cg_pid_get_user_unit(pid, unit);
+        return -ESRCH;
 }
 
 _public_ int sd_pid_get_machine_name(pid_t pid, char **name) {
@@ -62,7 +63,7 @@ _public_ int sd_pid_get_machine_name(pid_t pid, char **name) {
         assert_return(pid >= 0, -EINVAL);
         assert_return(name, -EINVAL);
 
-        return cg_pid_get_machine_name(pid, name);
+        return -ESRCH;
 }
 
 _public_ int sd_pid_get_slice(pid_t pid, char **slice) {
@@ -70,7 +71,15 @@ _public_ int sd_pid_get_slice(pid_t pid, char **slice) {
         assert_return(pid >= 0, -EINVAL);
         assert_return(slice, -EINVAL);
 
-        return cg_pid_get_slice(pid, slice);
+        return -ESRCH;
+}
+
+_public_ int sd_pid_get_user_slice(pid_t pid, char **slice) {
+
+        assert_return(pid >= 0, -EINVAL);
+        assert_return(slice, -EINVAL);
+
+        return cg_pid_get_user_slice(pid, slice);
 }
 
 _public_ int sd_pid_get_owner_uid(pid_t pid, uid_t *uid) {
@@ -78,7 +87,7 @@ _public_ int sd_pid_get_owner_uid(pid_t pid, uid_t *uid) {
         assert_return(pid >= 0, -EINVAL);
         assert_return(uid, -EINVAL);
 
-        return cg_pid_get_owner_uid(pid, uid);
+        return -ESRCH;
 }
 
 _public_ int sd_peer_get_session(int fd, char **session) {
@@ -106,7 +115,7 @@ _public_ int sd_peer_get_owner_uid(int fd, uid_t *uid) {
         if (r < 0)
                 return r;
 
-        return cg_pid_get_owner_uid(ucred.pid, uid);
+        return -ESRCH;
 }
 
 _public_ int sd_peer_get_unit(int fd, char **unit) {
@@ -120,7 +129,7 @@ _public_ int sd_peer_get_unit(int fd, char **unit) {
         if (r < 0)
                 return r;
 
-        return cg_pid_get_unit(ucred.pid, unit);
+        return -ESRCH;
 }
 
 _public_ int sd_peer_get_user_unit(int fd, char **unit) {
@@ -134,7 +143,7 @@ _public_ int sd_peer_get_user_unit(int fd, char **unit) {
         if (r < 0)
                 return r;
 
-        return cg_pid_get_user_unit(ucred.pid, unit);
+        return -ESRCH;
 }
 
 _public_ int sd_peer_get_machine_name(int fd, char **machine) {
@@ -148,7 +157,7 @@ _public_ int sd_peer_get_machine_name(int fd, char **machine) {
         if (r < 0)
                 return r;
 
-        return cg_pid_get_machine_name(ucred.pid, machine);
+        return -ESRCH;
 }
 
 _public_ int sd_peer_get_slice(int fd, char **slice) {
@@ -162,7 +171,21 @@ _public_ int sd_peer_get_slice(int fd, char **slice) {
         if (r < 0)
                 return r;
 
-        return cg_pid_get_slice(ucred.pid, slice);
+        return -ESRCH;
+}
+
+_public_ int sd_peer_get_user_slice(int fd, char **slice) {
+        struct ucred ucred;
+        int r;
+
+        assert_return(fd >= 0, -EINVAL);
+        assert_return(slice, -EINVAL);
+
+        r = getpeercred(fd, &ucred);
+        if (r < 0)
+                return r;
+
+        return cg_pid_get_user_slice(ucred.pid, slice);
 }
 
 static int file_of_uid(uid_t uid, char **p) {
@@ -496,9 +519,9 @@ _public_ int sd_session_get_desktop(const char *session, char **desktop) {
         if (r < 0)
                 return r;
 
-        t = cunescape(escaped);
-        if (!t)
-                return -ENOMEM;
+        r = cunescape(escaped, 0, &t);
+        if (r < 0)
+                return r;
 
         *desktop = t;
         return 0;