[SSSD] [PATCH] Use explicit base 10 for converting strings to integers
Jakub Hrozek
jhrozek at redhat.com
Mon Oct 3 09:13:51 UTC 2011
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).
-------------- next part --------------
From 18d47182d4ecd09705911ef558207771609a51c4 Mon Sep 17 00:00:00 2001
From: Jakub Hrozek <jhrozek at 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
More information about the sssd-devel
mailing list