From 40e591c309c1c91c60c4a74bfa9c4952044eb643 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 3 Jun 2010 08:50:02 -0400 Subject: [PATCH] Extend atobool() so we can use it in the LDAP code. --- common/atobool.c | 38 ++++++++++++++++++++++++++++++++++---- plugins/sudoers/ldap.c | 42 ++---------------------------------------- 2 files changed, 36 insertions(+), 44 deletions(-) diff --git a/common/atobool.c b/common/atobool.c index e442b49f4..a8b0352ed 100644 --- a/common/atobool.c +++ b/common/atobool.c @@ -45,9 +45,39 @@ int atobool(const char *str) { - if (strcasecmp(str, "true") == 0 || strcmp(str, "1") == 0) - return 1; - if (strcasecmp(str, "false") == 0 || strcmp(str, "0") == 0) - return 0; + switch (*str) { + case '0': + case '1': + if (str[1] == '\0') + return *str - '0'; + break; + case 'y': + case 'Y': + if (strcasecmp(str, "yes") == 0) + return 1; + break; + case 't': + case 'T': + if (strcasecmp(str, "true") == 0) + return 1; + break; + case 'o': + case 'O': + if (strcasecmp(str, "on") == 0) + return 1; + if (strcasecmp(str, "off") == 0) + return 0; + break; + case 'n': + case 'N': + if (strcasecmp(str, "no") == 0) + return 0; + break; + case 'f': + case 'F': + if (strcasecmp(str, "false") == 0) + return 0; + break; + } return -1; } diff --git a/plugins/sudoers/ldap.c b/plugins/sudoers/ldap.c index 5861008a8..7f364b9ba 100644 --- a/plugins/sudoers/ldap.c +++ b/plugins/sudoers/ldap.c @@ -818,44 +818,6 @@ sudo_ldap_build_pass1(struct passwd *pw) return(buf); } -/* - * Map yes/true/on to TRUE, no/false/off to FALSE, else -1 - */ -int -_atobool(const char *s) -{ - switch (*s) { - case 'y': - case 'Y': - if (strcasecmp(s, "yes") == 0) - return(TRUE); - break; - case 't': - case 'T': - if (strcasecmp(s, "true") == 0) - return(TRUE); - break; - case 'o': - case 'O': - if (strcasecmp(s, "on") == 0) - return(TRUE); - if (strcasecmp(s, "off") == 0) - return(FALSE); - break; - case 'n': - case 'N': - if (strcasecmp(s, "no") == 0) - return(FALSE); - break; - case 'f': - case 'F': - if (strcasecmp(s, "false") == 0) - return(FALSE); - break; - } - return(-1); -} - static void sudo_ldap_read_secret(const char *path) { @@ -917,7 +879,7 @@ sudo_ldap_read_config(void) if (strcasecmp(keyword, cur->conf_str) == 0) { switch (cur->type) { case CONF_BOOL: - *(int *)(cur->valp) = _atobool(value); + *(int *)(cur->valp) = atobool(value) == TRUE; break; case CONF_INT: *(int *)(cur->valp) = atoi(value); @@ -1025,7 +987,7 @@ sudo_ldap_read_config(void) if (ldap_conf.ssl != NULL) { if (strcasecmp(ldap_conf.ssl, "start_tls") == 0) ldap_conf.ssl_mode = SUDO_LDAP_STARTTLS; - else if (_atobool(ldap_conf.ssl)) + else if (atobool(ldap_conf.ssl) == TRUE) ldap_conf.ssl_mode = SUDO_LDAP_SSL; } -- 2.40.0