diff --git a/cib/callbacks.c b/cib/callbacks.c
index 73252c9..fc8cfff 100644
--- a/cib/callbacks.c
+++ b/cib/callbacks.c
@@ -22,6 +22,7 @@
 #include <stdio.h>
 #include <sys/types.h>
 #include <unistd.h>
+#include <grp.h>
 
 #include <stdlib.h>
 #include <errno.h>
@@ -81,11 +82,28 @@ gboolean cib_common_callback(qb_ipcs_connection_t *c, void *data, size_t size, g
 static int32_t
 cib_ipc_accept(qb_ipcs_connection_t *c, uid_t uid, gid_t gid)
 {
+#if ENABLE_ACL
+    uid_t *uid_p = NULL;
+    struct group *crm_grp = NULL;
+#endif
+
     crm_trace("Connecting %p for uid=%d gid=%d pid=%d", c, uid, gid, crm_ipcs_client_pid(c));
     if (cib_shutdown_flag) {
         crm_info("Ignoring new client [%d] during shutdown", crm_ipcs_client_pid(c));
         return -EPERM;
     }
+
+#if ENABLE_ACL
+    crm_grp = getgrnam(CRM_DAEMON_GROUP);
+    if (crm_grp) {
+        qb_ipcs_connection_auth_set(c, -1, crm_grp->gr_gid, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
+    }
+
+    uid_p = calloc(1, sizeof(uid_t));
+    *uid_p = uid;
+    qb_ipcs_context_set(c, uid_p);
+#endif
+
     return 0;
 }
 
@@ -93,6 +111,9 @@ static void
 cib_ipc_created(qb_ipcs_connection_t *c)
 {
     cib_client_t *new_client = NULL;
+#if ENABLE_ACL
+    uid_t *uid = qb_ipcs_context_get(c);
+#endif
     
     new_client = calloc(1, sizeof(cib_client_t));
     new_client->ipc = c;
@@ -101,6 +122,14 @@ cib_ipc_created(qb_ipcs_connection_t *c)
     new_client->id = crm_generate_uuid();
     crm_trace("%p connected for client %s", c, new_client->id);
 
+#if ENABLE_ACL
+    if (uid) {
+        new_client->user = uid2user(*uid);
+        qb_ipcs_context_set(c, NULL);
+        free(uid);
+    }
+#endif
+
     /* make sure we can find ourselves later for sync calls
      * redirected to the master instance
      */
@@ -284,7 +313,7 @@ cib_common_callback(qb_ipcs_connection_t *c, void *data, size_t size, gboolean p
     crm_xml_add(op_request, F_CIB_CLIENTNAME, cib_client->name);
 
 #if ENABLE_ACL
-    determine_request_user(&cib_client->user, channel, op_request, F_CIB_USER);
+    determine_request_user(cib_client->user, op_request, F_CIB_USER);
 #endif
 
     crm_log_xml_trace(op_request, "Client[inbound]");
diff --git a/configure.ac b/configure.ac
index 5134afb..e51762c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1427,18 +1427,19 @@ if test $SUPPORT_ACL = no; then
    AC_MSG_RESULT(no (disabled))
    SUPPORT_ACL=0
 else
+   SUPPORT_ACL=1
    AC_MSG_RESULT($SUPPORT_ACL)
 
-   AC_CHECK_MEMBERS([struct IPC_CHANNEL.farside_uid],
-		    [SUPPORT_ACL=1], [SUPPORT_ACL=0], [[#include <clplumbing/ipc.h>]])
+#   AC_CHECK_MEMBERS([struct IPC_CHANNEL.euid],
+#		    [SUPPORT_ACL=1], [SUPPORT_ACL=0], [[#include <clplumbing/ipc.h>]])
 
-   if test $SUPPORT_ACL = 0; then
-     	if test $missingisfatal = 0; then
-	    AC_MSG_WARN(Unable to support ACL. You need to use cluster-glue >= 1.0.6) 
-        else
-	    AC_MSG_FAILURE(Unable to support ACL. You need to use cluster-glue >= 1.0.6) 
-        fi
-   fi
+#   if test $SUPPORT_ACL = 0; then
+#     	if test $missingisfatal = 0; then
+#	    AC_MSG_WARN(Unable to support ACL. You need to use cluster-glue >= 1.0.6) 
+#        else
+#	    AC_MSG_FAILURE(Unable to support ACL. You need to use cluster-glue >= 1.0.6) 
+#        fi
+#   fi
 fi
 
 if test $SUPPORT_ACL = 1; then
diff --git a/crmd/control.c b/crmd/control.c
index a1ce46a..91f0eb5 100644
--- a/crmd/control.c
+++ b/crmd/control.c
@@ -525,7 +525,18 @@ do_startup(long long action,
 static int32_t
 crmd_ipc_accept(qb_ipcs_connection_t *c, uid_t uid, gid_t gid)
 {
+#if ENABLE_ACL
+    uid_t *uid_p = NULL;
+#endif
+
     crm_trace("Connecting %p for uid=%d gid=%d", c, uid, gid);
+
+#if ENABLE_ACL
+    uid_p = calloc(1, sizeof(uid_t));
+    *uid_p = uid;
+    qb_ipcs_context_set(c, uid_p);
+#endif
+
     return 0;
 }
 
@@ -533,6 +544,9 @@ static void
 crmd_ipc_created(qb_ipcs_connection_t *c)
 {
     crmd_client_t *blank_client = NULL;
+#if ENABLE_ACL
+    uid_t *uid = qb_ipcs_context_get(c);
+#endif
 
     blank_client = calloc(1, sizeof(crmd_client_t));
     CRM_ASSERT(blank_client != NULL);
@@ -544,6 +558,14 @@ crmd_ipc_created(qb_ipcs_connection_t *c)
     blank_client->uuid = NULL;
     blank_client->table_key = NULL;
 
+#if ENABLE_ACL
+    if (uid) {
+        blank_client->user = uid2user(*uid);
+        qb_ipcs_context_set(c, NULL);
+        free(uid);
+    }
+#endif
+
     qb_ipcs_context_set(c, blank_client);
 }
 
@@ -565,7 +587,7 @@ crmd_ipc_dispatch(qb_ipcs_connection_t *c, void *data, size_t size)
     }
 
 #if ENABLE_ACL
-    determine_request_user(&client->user, client, msg, F_CRM_USER);
+    determine_request_user(client->user, msg, F_CRM_USER);
 #endif
 
     crm_trace("Processing msg from %s", client->table_key);
diff --git a/include/crm/common/util.h b/include/crm/common/util.h
index dc5c4e9..33becf7 100644
--- a/include/crm/common/util.h
+++ b/include/crm/common/util.h
@@ -26,6 +26,7 @@
 #  include <stdlib.h>
 #  include <limits.h>
 #  include <signal.h>
+#  include "ipc.h"
 
 #  if SUPPORT_HEARTBEAT
 #    include <heartbeat.h>
@@ -381,7 +382,8 @@ is_privileged(const char *user)
     return FALSE;
 }
 
-void determine_request_user(char **user, IPC_Channel * channel, xmlNode * request,
+char *uid2user(uid_t uid);
+void determine_request_user(char *user, xmlNode * request,
                                    const char *field);
 #  endif
 
diff --git a/lib/common/utils.c b/lib/common/utils.c
index 1e5dd70..39984f0 100644
--- a/lib/common/utils.c
+++ b/lib/common/utils.c
@@ -2724,31 +2724,34 @@ free_lrm_op(lrm_op_t * op)
 }
 
 #if ENABLE_ACL
-void
-determine_request_user(char **user, IPC_Channel * channel, xmlNode * request, const char *field)
+char *
+uid2user(uid_t uid)
 {
-    /* Get our internal validation out of the way first */
-    CRM_CHECK(user != NULL && channel != NULL && field != NULL, return);
+    struct passwd *pwent = getpwuid(uid);
 
-    if (*user == NULL) {
-        /* Figure out who our peer is and cache it... */
-        struct passwd *pwent = getpwuid(channel->farside_uid);
+    if (pwent == NULL) {
+        crm_perror(LOG_ERR, "Cannot get password entry of uid: %d", uid);
+        return NULL;
 
-        if (pwent == NULL) {
-            crm_perror(LOG_ERR, "Cannot get password entry of uid: %d", channel->farside_uid);
-        } else {
-            *user = crm_strdup(pwent->pw_name);
-        }
+    } else {
+        return crm_strdup(pwent->pw_name);
     }
+}
+
+void
+determine_request_user(char *user, xmlNode * request, const char *field)
+{
+    /* Get our internal validation out of the way first */
+    CRM_CHECK(user != NULL && request !=NULL && field != NULL, return);
 
     /* If our peer is a privileged user, we might be doing something on behalf of someone else */
-    if (is_privileged(*user) == FALSE) {
+    if (is_privileged(user) == FALSE) {
         /* We're not a privileged user, set or overwrite any existing value for $field */
-        crm_xml_replace(request, field, *user);
+        crm_xml_replace(request, field, user);
 
     } else if (crm_element_value(request, field) == NULL) {
         /* Even if we're privileged, make sure there is always a value set */
-        crm_xml_replace(request, field, *user);
+        crm_xml_replace(request, field, user);
 
 /*  } else { Legal delegation */
     }
diff --git a/tools/attrd.c b/tools/attrd.c
index 9705872..27c07a9 100644
--- a/tools/attrd.c
+++ b/tools/attrd.c
@@ -100,11 +100,22 @@ free_hash_entry(gpointer data)
 static int32_t
 attrd_ipc_accept(qb_ipcs_connection_t *c, uid_t uid, gid_t gid)
 {
+#if ENABLE_ACL
+    uid_t *uid_p = NULL;
+#endif
+
     crm_trace("Connecting %p for uid=%d gid=%d", c, uid, gid);
     if (need_shutdown) {
         crm_info("Ignoring connection request during shutdown");
         return FALSE;
     }
+
+#if ENABLE_ACL
+    uid_p = calloc(1, sizeof(uid_t));
+    *uid_p = uid;
+    qb_ipcs_context_set(c, uid_p);
+#endif
+
     return 0;
 }
 
@@ -112,7 +123,20 @@ static void
 attrd_ipc_created(qb_ipcs_connection_t *c)
 {
     attrd_client_t *new_client = NULL;
+#if ENABLE_ACL
+    uid_t *uid = qb_ipcs_context_get(c);
+#endif
+
     new_client = calloc(1, sizeof(attrd_client_t));
+
+#if ENABLE_ACL
+    if (uid) {
+        new_client->user = uid2user(*uid);
+        qb_ipcs_context_set(c, NULL);
+        free(uid);
+    }
+#endif
+
     qb_ipcs_context_set(c, new_client);
     
     crm_trace("Client %p connected", c);
@@ -122,6 +146,7 @@ attrd_ipc_created(qb_ipcs_connection_t *c)
 static int32_t
 attrd_ipc_dispatch(qb_ipcs_connection_t *c, void *data, size_t size)
 {
+    attrd_client_t *client = qb_ipcs_context_get(c);
     xmlNode *msg = crm_ipcs_recv(c, data, size);
     xmlNode *ack = create_xml_node(NULL, "ack");
 
@@ -133,7 +158,7 @@ attrd_ipc_dispatch(qb_ipcs_connection_t *c, void *data, size_t size)
     }
 
 #if ENABLE_ACL
-    determine_request_user(&curr_client->user, c, msg, F_ATTRD_USER);
+    determine_request_user(client->user, msg, F_ATTRD_USER);
 #endif
 
     crm_trace("Processing msg from %p", c);
