On (27/01/16 17:13), Michal Židek wrote:
>On 01/27/2016 01:03 PM, Lukas Slebodnik wrote:
>>On (26/01/16 18:08), Michal Židek wrote:
>>>On 01/26/2016 02:54 PM, Lukas Slebodnik wrote:
>>>>On (26/01/16 14:51), Michal Židek wrote:
>>>>>On 01/21/2016 03:51 PM, Simo Sorce wrote:
>>>>>>On Wed, 2016-01-20 at 16:38 +0100, Lukas Slebodnik wrote:
>>>>>>>On (19/01/16 15:38), Simo Sorce wrote:
>>>>>>>>On Tue, 2016-01-19 at 10:34 -0500, Simo Sorce wrote:
>>>>>>>>>On Tue, 2016-01-19 at 11:23 +0100, Lukas Slebodnik wrote:
>>>>>>>>>[...]
>>>>>>>>>>>+#endif /* __SSSD_UTIL_SELINUX_H__ */
>>>>>>>>>>BTW will we need this header file if we make
>>>>>>>>>>struct cli_creds opaque?
>>>>>>>>>
>>>>>>>>>Replying to both your mails here:
>>>>>>>>>Making cli_creds opaque requires using a pointer and dealing with
>>>>>>>>>allocating it, I guess I can do that, the headers file would still be
>>>>>>>>>needed in order to avoid huge ifdefs around the functions that 
>>>>>>>>>implement
>>>>>>>>>handling SELinux stuff. It makes the code a lot more readable and
>>>>>>>>>searchable.
>>>>>>>>>
>>>>>>>>>Simo.
>>>>>>>>>
>>>>>>>>
>>>>>>>>Attached find patch that changes the code so that cli_creds is now
>>>>>>>>opaque.
>>>>>>>>This *should* work w/o the patch that changes the headers but I haven't
>>>>>>>>tested it w/o that patch yet.
>>>>>>>>
>>>>>>>I had an issue to build it correctly with ifp responder.
>>>>>>>src/responder/ifp/ifpsrv_util.c: In function ‘ifp_req_create’:
>>>>>>>src/responder/ifp/ifpsrv_util.c:64:30: error: passing argument 1 of 
>>>>>>>‘check_allowed_uids’ makes pointer from integer without a cast 
>>>>>>>[-Werror=int-conversion]
>>>>>>>      ret = check_allowed_uids(dbus_req->client,
>>>>>>>                               ^
>>>>>>>In file included from ../sssd/src/responder/ifp/ifp_private.h:27:0,
>>>>>>>                  from ../sssd/src/responder/ifp/ifpsrv_util.c:27:
>>>>>>>src/responder/common/responder.h:334:9: note: expected ‘struct cli_creds 
>>>>>>>*’ but argument is of type ‘int64_t {aka long int}’
>>>>>>>  errno_t check_allowed_uids(struct cli_creds *creds,
>>>>>>>          ^
>>>>>>>
>>>>>>>ifp responder uses different way to obtain uid. I changed back the 
>>>>>>>prototype of
>>>>>>>check_allowed_uids.
>>>>>>>Here is a diff on to of your patch.
>>>>>>>
>>>>>>>diff --git a/src/responder/common/responder.h 
>>>>>>>b/src/responder/common/responder.h
>>>>>>>index 419a863..3b70b69 100644
>>>>>>>--- a/src/responder/common/responder.h
>>>>>>>+++ b/src/responder/common/responder.h
>>>>>>>@@ -331,8 +331,7 @@ errno_t csv_string_to_uid_array(TALLOC_CTX *mem_ctx, 
>>>>>>>const char *csv_string,
>>>>>>>                                  size_t *_uid_count, uid_t **_uids);
>>>>>>>
>>>>>>>  uid_t client_euid(struct cli_creds *creds);
>>>>>>>-errno_t check_allowed_uids(struct cli_creds *creds,
>>>>>>>-                           size_t allowed_uids_count,
>>>>>>>+errno_t check_allowed_uids(uid_t uid, size_t allowed_uids_count,
>>>>>>>                             uid_t *allowed_uids);
>>>>>>>
>>>>>>>  struct tevent_req *
>>>>>>>diff --git a/src/responder/common/responder_common.c 
>>>>>>>b/src/responder/common/responder_common.c
>>>>>>>index 27193ce..6ac1ea2 100644
>>>>>>>--- a/src/responder/common/responder_common.c
>>>>>>>+++ b/src/responder/common/responder_common.c
>>>>>>>@@ -138,8 +138,7 @@ uid_t client_euid(struct cli_creds *creds)
>>>>>>>      return cli_creds_get_uid(creds);
>>>>>>>  }
>>>>>>>
>>>>>>>-errno_t check_allowed_uids(struct cli_creds *creds,
>>>>>>>-                           size_t allowed_uids_count,
>>>>>>>+errno_t check_allowed_uids(uid_t uid, size_t allowed_uids_count,
>>>>>>>                             uid_t *allowed_uids)
>>>>>>>  {
>>>>>>>      size_t c;
>>>>>>>@@ -149,7 +148,7 @@ errno_t check_allowed_uids(struct cli_creds *creds,
>>>>>>>      }
>>>>>>>
>>>>>>>      for (c = 0; c < allowed_uids_count; c++) {
>>>>>>>-        if (client_euid(creds) == allowed_uids[c]) {
>>>>>>>+        if (uid == allowed_uids[c]) {
>>>>>>>              return EOK;
>>>>>>>          }
>>>>>>>      }
>>>>>>>@@ -449,12 +448,13 @@ static void accept_fd_handler(struct 
>>>>>>>tevent_context *ev,
>>>>>>>              return;
>>>>>>>          }
>>>>>>>
>>>>>>>-        ret = check_allowed_uids(cctx->creds, rctx->allowed_uids_count,
>>>>>>>+        ret = check_allowed_uids(client_euid(cctx->creds), 
>>>>>>>rctx->allowed_uids_count,
>>>>>>>                                   rctx->allowed_uids);
>>>>>>>          if (ret != EOK) {
>>>>>>>              if (ret == EACCES) {
>>>>>>>-                DEBUG(SSSDBG_CRIT_FAILURE, "Access denied for uid 
>>>>>>>[%d].\n",
>>>>>>>-                                            
>>>>>>>(int)client_euid(cctx->creds));
>>>>>>>+                DEBUG(SSSDBG_CRIT_FAILURE,
>>>>>>>+                      "Access denied for uid [%"SPRIuid"].\n",
>>>>>>>+                      client_euid(cctx->creds));
>>>>>>>              } else {
>>>>>>>                  DEBUG(SSSDBG_OP_FAILURE, "check_allowed_uids 
>>>>>>> failed.\n");
>>>>>>>              }
>>>>>>>diff --git a/src/responder/pam/pamsrv_cmd.c 
>>>>>>>b/src/responder/pam/pamsrv_cmd.c
>>>>>>>index 5fe3e6b..bfc534f 100644
>>>>>>>--- a/src/responder/pam/pamsrv_cmd.c
>>>>>>>+++ b/src/responder/pam/pamsrv_cmd.c
>>>>>>>@@ -1001,7 +1001,7 @@ static bool is_uid_trusted(struct cli_creds *creds,
>>>>>>>          return true;
>>>>>>>      }
>>>>>>>
>>>>>>>-    ret = check_allowed_uids(creds, trusted_uids_count, trusted_uids);
>>>>>>>+    ret = check_allowed_uids(client_euid(creds), trusted_uids_count, 
>>>>>>>trusted_uids);
>>>>>>>      if (ret == EOK) return true;
>>>>>>>
>>>>>>>      return false;
>>>>>>>@@ -1091,13 +1091,13 @@ static int pam_forwarder(struct cli_ctx *cctx, 
>>>>>>>int pam_cmd)
>>>>>>>      }
>>>>>>>      pd = preq->pd;
>>>>>>>
>>>>>>>-    preq->is_uid_trusted = is_uid_trusted(&cctx->creds,
>>>>>>>+    preq->is_uid_trusted = is_uid_trusted(cctx->creds,
>>>>>>>                                            pctx->trusted_uids_count,
>>>>>>>                                            pctx->trusted_uids);
>>>>>>>
>>>>>>>      if (!preq->is_uid_trusted) {
>>>>>>>-        DEBUG(SSSDBG_MINOR_FAILURE, "uid %d is not trusted.\n",
>>>>>>>-              (int)client_euid(&cctx->creds));
>>>>>>>+        DEBUG(SSSDBG_MINOR_FAILURE, "uid %"SPRIuid" is not trusted.\n",
>>>>>>>+              client_euid(cctx->creds));
>>>>>>>      }
>>>>>>>
>>>>>>>
>>>>>>>@@ -1776,8 +1776,8 @@ static void pam_dom_forwarder(struct pam_auth_req 
>>>>>>>*preq)
>>>>>>>              !is_domain_public(preq->pd->domain, pctx->public_domains,
>>>>>>>                              pctx->public_domains_count)) {
>>>>>>>          DEBUG(SSSDBG_MINOR_FAILURE,
>>>>>>>-                "Untrusted user %d cannot access non-public domain 
>>>>>>>%s.\n",
>>>>>>>-                (int)client_euid(&preq->cctx->creds), preq->pd->domain);
>>>>>>>+              "Untrusted user %"SPRIuid" cannot access non-public 
>>>>>>>domain %s.\n",
>>>>>>>+              client_euid(preq->cctx->creds), preq->pd->domain);
>>>>>>>          preq->pd->pam_status = PAM_PERM_DENIED;
>>>>>>>          pam_reply(preq);
>>>>>>>          return;
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>I know you are busy. I fixed few conflics + updated your patch and
>>>>>>>added my singoff. I hope you don mind.
>>>>>>>
>>>>>>>If you are find with attached patch then we need to find 3rd person
>>>>>>>for review (and ACK)
>>>>>>
>>>>>>LGTM
>>>>>>
>>>>>>Simo.
>>>>>>
>>>>>
>>>>>Hi!
>>>>>
>>>>>Lukas, could you please rebase the patch on top of current master?
>>>>>
>>>>There was a small conflict in Makefile.am which could be easily solved by
>>>>3-way megre and should not have blocked a review.
>>>>
>>>>Updated patch is attached.
>>>>
>>>>LS
>>>>
>>>
>>>With this patch, the cmocka tests do not link with
>>>libselinux on Debian which results in:
>>>undefined reference to symbol 'freecon'
>>>
>>Updated patch is attached.
>>
>
>I did some manual testing of selinux functionality with FreeIPA
>server. The patch works with what I tried. The code looks good
>to me and CI passed.
>
>CI link:
>http://sssd-ci.duckdns.org/logs/job/36/68/summary.html
>
>ACK.
>
master:
* 6499d0b915209b670f8e337c4fe76a8be9fa6576

LS
_______________________________________________
sssd-devel mailing list
sssd-devel@lists.fedorahosted.org
https://lists.fedorahosted.org/admin/lists/sssd-devel@lists.fedorahosted.org

Reply via email to