summaryrefslogtreecommitdiffstats
path: root/src/responder/pam/pam_LOCAL_domain.c
diff options
context:
space:
mode:
authorMichal Zidek <mzidek@redhat.com>2015-02-10 17:30:00 +0100
committerJakub Hrozek <jhrozek@redhat.com>2016-01-13 11:28:45 +0100
commit23674dfef4225b90d45c27b88fe72dc37b22e32d (patch)
treef3f2814e564511fef79db03b909cc86d10208999 /src/responder/pam/pam_LOCAL_domain.c
parent867c5d7d51327464a21f48fd6dc2a6f4f107bd36 (diff)
downloadsssd-23674dfef4225b90d45c27b88fe72dc37b22e32d.tar.gz
sssd-23674dfef4225b90d45c27b88fe72dc37b22e32d.tar.xz
sssd-23674dfef4225b90d45c27b88fe72dc37b22e32d.zip
sysdb: Unify name format for groups and users
This is WIP patch to unify format of usernames and groupnames in sssd internals. In current form it breaks just about everything. The sysdb update function is just placeholder and it's contents are irelevant. Currently I am working on fqname attribute removal because it seems to just add confusion. If you decide to look into the code, please use sunglasses or other other protective gear and play some calm music in your backgroun to prevent eye or brain injury.
Diffstat (limited to 'src/responder/pam/pam_LOCAL_domain.c')
-rw-r--r--src/responder/pam/pam_LOCAL_domain.c39
1 files changed, 33 insertions, 6 deletions
diff --git a/src/responder/pam/pam_LOCAL_domain.c b/src/responder/pam/pam_LOCAL_domain.c
index 4b076146c..0966bcb0c 100644
--- a/src/responder/pam/pam_LOCAL_domain.c
+++ b/src/responder/pam/pam_LOCAL_domain.c
@@ -73,6 +73,12 @@ static void prepare_reply(struct LOCAL_request *lreq)
static void do_successful_login(struct LOCAL_request *lreq)
{
int ret;
+ char *name;
+ TALLOC_CTX *tmpctx;
+
+ tmpctx = talloc_new(NULL);
+ NULL_CHECK_OR_JUMP(tmpctx, ("talloc_new failed.\n"),
+ lreq->error, ENOMEM, done);
lreq->mod_attrs = sysdb_new_attrs(lreq);
NULL_CHECK_OR_JUMP(lreq->mod_attrs, ("sysdb_new_attrs failed.\n"),
@@ -87,13 +93,16 @@ static void do_successful_login(struct LOCAL_request *lreq)
NEQ_CHECK_OR_JUMP(ret, EOK, ("sysdb_attrs_add_long failed.\n"),
lreq->error, ret, done);
- ret = sysdb_set_user_attr(lreq->domain,
- lreq->preq->pd->user,
+ name = sss_ioname2internal(tmpctx, lreq->domain, lreq->preq->pd->user);
+ NULL_CHECK_OR_JUMP(name, ("sss_ioname2internal failed.\n"),
+ lreq->error, ENOMEM, done);
+ ret = sysdb_set_user_attr(lreq->domain, name,
lreq->mod_attrs, SYSDB_MOD_REP);
NEQ_CHECK_OR_JUMP(ret, EOK, ("sysdb_set_user_attr failed.\n"),
lreq->error, ret, done);
done:
+ talloc_free(tmpctx);
return;
}
@@ -102,6 +111,12 @@ static void do_failed_login(struct LOCAL_request *lreq)
int ret;
int failedLoginAttempts;
struct pam_data *pd;
+ char *name;
+ TALLOC_CTX *tmpctx;
+
+ tmpctx = talloc_new(NULL);
+ NULL_CHECK_OR_JUMP(tmpctx, ("talloc_new failed.\n"),
+ lreq->error, ENOMEM, done);
pd = lreq->preq->pd;
pd->pam_status = PAM_AUTH_ERR;
@@ -128,13 +143,16 @@ static void do_failed_login(struct LOCAL_request *lreq)
NEQ_CHECK_OR_JUMP(ret, EOK, ("sysdb_attrs_add_long failed.\n"),
lreq->error, ret, done);
- ret = sysdb_set_user_attr(lreq->domain,
- lreq->preq->pd->user,
+ name = sss_ioname2internal(tmpctx, lreq->domain, lreq->preq->pd->user);
+ NULL_CHECK_OR_JUMP(name, ("sss_ioname2internal failed.\n"),
+ lreq->error, ENOMEM, done);
+ ret = sysdb_set_user_attr(lreq->domain, name,
lreq->mod_attrs, SYSDB_MOD_REP);
NEQ_CHECK_OR_JUMP(ret, EOK, ("sysdb_set_user_attr failed.\n"),
lreq->error, ret, done);
done:
+ talloc_free(tmpctx);
return;
}
@@ -161,9 +179,15 @@ static void do_pam_chauthtok(struct LOCAL_request *lreq)
char *salt;
char *new_hash;
struct pam_data *pd;
+ char *name;
+ TALLOC_CTX *tmpctx;
pd = lreq->preq->pd;
+ tmpctx = talloc_new(NULL);
+ NULL_CHECK_OR_JUMP(tmpctx, ("talloc_new failed.\n"),
+ lreq->error, ENOMEM, done);
+
ret = sss_authtok_get_password(pd->newauthtok, &password, NULL);
if (ret) {
/* TODO: should we allow null passwords via a config option ? */
@@ -197,13 +221,16 @@ static void do_pam_chauthtok(struct LOCAL_request *lreq)
NEQ_CHECK_OR_JUMP(ret, EOK, ("sysdb_attrs_add_long failed.\n"),
lreq->error, ret, done);
- ret = sysdb_set_user_attr(lreq->domain,
- lreq->preq->pd->user,
+ name = sss_ioname2internal(tmpctx, lreq->domain, lreq->preq->pd->user);
+ NULL_CHECK_OR_JUMP(name, ("sss_ioname2internal failed.\n"),
+ lreq->error, ENOMEM, done);
+ ret = sysdb_set_user_attr(lreq->domain, name,
lreq->mod_attrs, SYSDB_MOD_REP);
NEQ_CHECK_OR_JUMP(ret, EOK, ("sysdb_set_user_attr failed.\n"),
lreq->error, ret, done);
done:
+ talloc_free(tmpctx);
sss_authtok_set_empty(pd->newauthtok);
}