[SSSD] [PATCH] Monitor and sbus changes for running SSSD as a non-privileged user

Jakub Hrozek jhrozek at redhat.com
Tue Oct 21 09:17:56 UTC 2014


On Tue, Oct 21, 2014 at 11:14:47AM +0200, Pavel Reichl wrote:
> 
> On 10/20/2014 10:42 PM, Jakub Hrozek wrote:
> >+void test_get_user_num(void **state)
> >+{
> >+    uid_t uid;
> >+    gid_t gid;
> >+    errno_t ret;
> >+
> >+    ret = sss_user_by_name_or_uid("123", &uid, &gid);
> >+    assert_int_equal(ret, EOK);
> >+    assert_int_equal(uid, 123);
> >+    assert_int_equal(gid, 123);
> gid 123 ?
> >+}
> >+
> >+void test_get_user_str(void **state)
> >+{
> >+    uid_t uid;
> >+    gid_t gid;
> >+    errno_t ret;
> >+
> >+    ret = sss_user_by_name_or_uid("sssd", &uid, &gid);
> >+    assert_int_equal(ret, EOK);
> >+    assert_int_equal(uid, 123);
> >+    assert_int_equal(gid, 456);
> gid 456 ?
> >+}
> >+
> [snip]
> >+
> >+errno_t sss_user_by_name_or_uid(const char *input, uid_t *_uid, gid_t *_gid)
> >+{
> >+    uid_t uid;
> >+    gid_t gid;
> >+    errno_t ret;
> >+    char *endptr;
> >+    struct passwd *pwd;
> >+
> I believe we should null errno here.

OK

> >+    /* Try if it's an ID first */
> >+    uid = strtouint32(input, &endptr, 10);
> >+    gid = uid;
> I'm sorry I don't understand why setting gid to uid in case that numeric
> value is passed is the right thing to do. I think we should get the value of
> gid from db all the time.

OK, calling getpwuid sounds like the right thing to do. I'll send new
patches -- thanks!

> I suppose it's on purpose as we have tests (which I tried to ask you
> yesterday) that verify this behaviour, but I think that value of gid should
> not matter whether we ask for it using uid or username.
> Thanks for explaining.
> >+    if (errno != 0 || *endptr != '\0') {
> >+        ret = errno;
> >+        if (ret == ERANGE) {
> >+            DEBUG(SSSDBG_OP_FAILURE,
> >+                  "UID [%s] is out of range.\n", input);
> >+            return ret;
> >+        }
> >+
> >+        /* Nope, maybe a username? */
> >+        pwd = getpwnam(input);
> >+        if (pwd == NULL) {
> >+            DEBUG(SSSDBG_OP_FAILURE,
> >+                  "[%s] is neither a valid UID nor a user name which could be "
> >+                  "resolved by getpwnam().\n", input);
> >+            return EINVAL;
> >+        }
> >+
> >+        uid = pwd->pw_uid;
> >+        gid = pwd->pw_gid;
> >+    }
> >+
> >+    if (_uid) {
> >+        *_uid = uid;
> >+    }
> >+
> >+    if (_gid) {
> >+        *_gid = gid;
> >+    }
> >+    return EOK;
> >+}
> 
> _______________________________________________
> sssd-devel mailing list
> sssd-devel at lists.fedorahosted.org
> https://lists.fedorahosted.org/mailman/listinfo/sssd-devel



More information about the sssd-devel mailing list