summaryrefslogtreecommitdiffstats
path: root/src/sbus/sssd_dbus_server.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/sbus/sssd_dbus_server.c')
-rw-r--r--src/sbus/sssd_dbus_server.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/sbus/sssd_dbus_server.c b/src/sbus/sssd_dbus_server.c
index 3a7de8ff0..18fb98df6 100644
--- a/src/sbus/sssd_dbus_server.c
+++ b/src/sbus/sssd_dbus_server.c
@@ -181,6 +181,7 @@ remove_socket_symlink(const char *symlink_name)
int sbus_new_server(TALLOC_CTX *mem_ctx,
struct tevent_context *ev,
const char *address,
+ uid_t uid, gid_t gid,
bool use_symlink,
struct sbus_connection **_server,
sbus_server_conn_init_fn init_fn,
@@ -260,9 +261,22 @@ int sbus_new_server(TALLOC_CTX *mem_ctx,
if ((stat_buf.st_mode & ~S_IFMT) != (S_IRUSR|S_IWUSR)) {
ret = chmod(filename, (S_IRUSR|S_IWUSR));
if (ret != EOK) {
+ ret = errno;
+ DEBUG(SSSDBG_CRIT_FAILURE,
+ "chmod failed for [%s]: [%d][%s].\n", filename, ret,
+ sss_strerror(ret));
+ ret = EIO;
+ goto done;
+ }
+ }
+
+ if (stat_buf.st_uid != uid || stat_buf.st_gid != gid) {
+ ret = chown(filename, uid, gid);
+ if (ret != EOK) {
+ ret = errno;
DEBUG(SSSDBG_CRIT_FAILURE,
- "chmod failed for [%s]: [%d][%s].\n", filename, errno,
- strerror(errno));
+ "chown failed for [%s]: [%d][%s].\n", filename, ret,
+ sss_strerror(ret));
ret = EIO;
goto done;
}