https://fedorahosted.org/sssd/ticket/1013
I'll provide a 1.6/1.5 back port when this patch is acked. I've tested with a user that looks like this: --------------- dn: cn=octaluid,$DC objectClass: posixAccount objectClass: person objectClass: organizationalPerson objectClass: inetOrgPerson objectClass: top uid: octaluid uidNumber: 1000 gidNumber: 1000 homeDirectory: /home/octaluid gecos: 01000 loginShell: /bin/bash sn: octaluid givenName: octaluid cn: octaluid --------------- Then remapped the uidNumber attribute in /etc/sssd/sssd.conf: ldap_user_uid_number = gecos Without the patch, getent passwd octaluid reported uid 512, with the patch, it reports 1000. Saving users with UIDs of bases that cannot be converted with base-10 fails now (I tested hexadecimal 0x1000).
From 18d47182d4ecd09705911ef558207771609a51c4 Mon Sep 17 00:00:00 2001 From: Jakub Hrozek <jhro...@redhat.com> Date: Thu, 29 Sep 2011 20:00:58 +0200 Subject: [PATCH] Use explicit base 10 for converting strings to integers https://fedorahosted.org/sssd/ticket/1013 --- src/db/sysdb.c | 2 +- src/db/sysdb_ops.c | 2 +- src/providers/ldap/ldap_id.c | 4 ++-- src/providers/proxy/proxy_id.c | 4 ++-- src/responder/common/negcache.c | 4 ++-- src/tools/sss_debuglevel.c | 2 +- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/db/sysdb.c b/src/db/sysdb.c index eafa7fd..1a32603 100644 --- a/src/db/sysdb.c +++ b/src/db/sysdb.c @@ -378,7 +378,7 @@ int sysdb_attrs_get_uint32_t(struct sysdb_attrs *attrs, const char *name, } errno = 0; - val = strtouint32((const char *) el->values[0].data, &endptr, 0); + val = strtouint32((const char *) el->values[0].data, &endptr, 10); if (errno != 0) return errno; if (*endptr) return EINVAL; diff --git a/src/db/sysdb_ops.c b/src/db/sysdb_ops.c index 522bbb0..f4418e4 100644 --- a/src/db/sysdb_ops.c +++ b/src/db/sysdb_ops.c @@ -60,7 +60,7 @@ static uint32_t get_attr_as_uint32(struct ldb_message *msg, const char *attr) } errno = 0; - l = strtoll((const char *)v->data, NULL, 0); + l = strtoll((const char *)v->data, NULL, 10); if (errno) { return (uint32_t)-1; } diff --git a/src/providers/ldap/ldap_id.c b/src/providers/ldap/ldap_id.c index 2d8aeff..46f6889 100644 --- a/src/providers/ldap/ldap_id.c +++ b/src/providers/ldap/ldap_id.c @@ -235,7 +235,7 @@ static void users_get_done(struct tevent_req *subreq) break; case BE_FILTER_IDNUM: - uid = (uid_t) strtouint32(state->name, &endptr, 0); + uid = (uid_t) strtouint32(state->name, &endptr, 10); if (errno || *endptr || (state->name == endptr)) { tevent_req_error(req, errno ? errno : EINVAL); return; @@ -478,7 +478,7 @@ static void groups_get_done(struct tevent_req *subreq) break; case BE_FILTER_IDNUM: - gid = (gid_t) strtouint32(state->name, &endptr, 0); + gid = (gid_t) strtouint32(state->name, &endptr, 10); if (errno || *endptr || (state->name == endptr)) { tevent_req_error(req, errno ? errno : EINVAL); return; diff --git a/src/providers/proxy/proxy_id.c b/src/providers/proxy/proxy_id.c index ba45d7a..2428475 100644 --- a/src/providers/proxy/proxy_id.c +++ b/src/providers/proxy/proxy_id.c @@ -1080,7 +1080,7 @@ void proxy_get_account_info(struct be_req *breq) break; case BE_FILTER_IDNUM: - uid = (uid_t) strtouint32(ar->filter_value, &endptr, 0); + uid = (uid_t) strtouint32(ar->filter_value, &endptr, 10); if (errno || *endptr || (ar->filter_value == endptr)) { return proxy_reply(breq, DP_ERR_FATAL, EINVAL, "Invalid attr type"); @@ -1102,7 +1102,7 @@ void proxy_get_account_info(struct be_req *breq) ret = get_gr_name(breq, ctx, sysdb, domain, ar->filter_value); break; case BE_FILTER_IDNUM: - gid = (gid_t) strtouint32(ar->filter_value, &endptr, 0); + gid = (gid_t) strtouint32(ar->filter_value, &endptr, 10); if (errno || *endptr || (ar->filter_value == endptr)) { return proxy_reply(breq, DP_ERR_FATAL, EINVAL, "Invalid attr type"); diff --git a/src/responder/common/negcache.c b/src/responder/common/negcache.c index d8c4c26..3926574 100644 --- a/src/responder/common/negcache.c +++ b/src/responder/common/negcache.c @@ -90,7 +90,7 @@ static int sss_ncache_check_str(struct sss_nc_ctx *ctx, char *str, int ttl) } errno = 0; - timestamp = strtoull((const char *)data.dptr, &ep, 0); + timestamp = strtoull((const char *)data.dptr, &ep, 10); if (errno != 0 || *ep != '\0') { /* Malformed entry, remove it and return no entry */ expired = true; @@ -330,7 +330,7 @@ static int delete_permanent(struct tdb_context *tdb, } errno = 0; - timestamp = strtoull((const char *)data.dptr, &ep, 0); + timestamp = strtoull((const char *)data.dptr, &ep, 10); if (errno != 0 || *ep != '\0') { /* Malformed entry, remove it */ remove_key = true; diff --git a/src/tools/sss_debuglevel.c b/src/tools/sss_debuglevel.c index 45723ec..38262dd 100644 --- a/src/tools/sss_debuglevel.c +++ b/src/tools/sss_debuglevel.c @@ -369,7 +369,7 @@ pid_t parse_pid(const char *strpid) char *endptr; errno = 0; - value = strtol(strpid, &endptr, 0); + value = strtol(strpid, &endptr, 10); if ((errno != 0) || (endptr == strpid) || ((*endptr != '\0') && (*endptr != '\n'))) { return 0; -- 1.7.6.4
_______________________________________________ sssd-devel mailing list sssd-devel@lists.fedorahosted.org https://fedorahosted.org/mailman/listinfo/sssd-devel