--- embedaddon/sudo/plugins/sudoers/policy.c 2013/10/14 07:56:35 1.1.1.2 +++ embedaddon/sudo/plugins/sudoers/policy.c 2014/06/15 16:12:54 1.1.1.3 @@ -91,8 +91,6 @@ sudoers_policy_deserialize_info(void *v, char **runas_ const char *debug_flags = NULL; const char *remhost = NULL; int flags = 0; - long lval; - char *ep; debug_decl(sudoers_policy_deserialize_info, SUDO_DEBUG_PLUGIN) #define MATCHES(s, v) (strncmp(s, v, sizeof(v) - 1) == 0) @@ -108,26 +106,21 @@ sudoers_policy_deserialize_info(void *v, char **runas_ p = *cur + sizeof("sudoers_uid=") - 1; sudoers_uid = (uid_t) atoid(p, NULL, NULL, &errstr); if (errstr != NULL) - fatalx(_("%s: %s"), *cur, _(errstr)); + fatalx(U_("%s: %s"), *cur, U_(errstr)); continue; } if (MATCHES(*cur, "sudoers_gid=")) { p = *cur + sizeof("sudoers_gid=") - 1; sudoers_gid = (gid_t) atoid(p, NULL, NULL, &errstr); if (errstr != NULL) - fatalx(_("%s: %s"), *cur, _(errstr)); + fatalx(U_("%s: %s"), *cur, U_(errstr)); continue; } if (MATCHES(*cur, "sudoers_mode=")) { - errno = 0; p = *cur + sizeof("sudoers_mode=") - 1; - lval = strtol(p, &ep, 8); - if (*p == '\0' || *ep != '\0') - fatalx(_("%s: %s"), *cur, _("invalid value")); - if ((errno == ERANGE && (lval == LONG_MAX || lval == LONG_MIN)) - || (lval > 0777 || lval < 0)) - fatalx(_("%s: %s"), *cur, _("value out of range")); - sudoers_mode = (mode_t) lval; + sudoers_mode = atomode(p, &errstr); + if (errstr != NULL) + fatalx(U_("%s: %s"), *cur, U_(errstr)); continue; } if (MATCHES(*cur, "ldap_conf=")) { @@ -147,13 +140,9 @@ sudoers_policy_deserialize_info(void *v, char **runas_ if (MATCHES(*cur, "closefrom=")) { errno = 0; p = *cur + sizeof("closefrom=") - 1; - lval = strtol(p, &ep, 10); - if (*p == '\0' || *ep != '\0') - fatalx(_("%s: %s"), *cur, _("invalid value")); - if ((errno == ERANGE && (lval == LONG_MAX || lval == LONG_MIN)) - || (lval > INT_MAX || lval < 3)) - fatalx(_("%s: %s"), *cur, _("value out of range")); - user_closefrom = (int) lval; + user_closefrom = strtonum(p, 4, INT_MAX, &errstr); + if (user_closefrom == 0) + fatalx(U_("%s: %s"), *cur, U_(errstr)); continue; } if (MATCHES(*cur, "debug_flags=")) { @@ -253,12 +242,10 @@ sudoers_policy_deserialize_info(void *v, char **runas_ continue; } #endif /* HAVE_BSD_AUTH_H */ -#if !defined(HAVE_GETPROGNAME) && !defined(HAVE___PROGNAME) if (MATCHES(*cur, "progname=")) { - setprogname(*cur + sizeof("progname=") - 1); + initprogname(*cur + sizeof("progname=") - 1); continue; } -#endif if (MATCHES(*cur, "network_addrs=")) { interfaces_string = *cur + sizeof("network_addrs=") - 1; set_interfaces(interfaces_string); @@ -267,13 +254,9 @@ sudoers_policy_deserialize_info(void *v, char **runas_ if (MATCHES(*cur, "max_groups=")) { errno = 0; p = *cur + sizeof("max_groups=") - 1; - lval = strtol(p, &ep, 10); - if (*p == '\0' || *ep != '\0') - fatalx(_("%s: %s"), *cur, _("invalid value")); - if ((errno == ERANGE && (lval == LONG_MAX || lval == LONG_MIN)) - || (lval > INT_MAX || lval <= 0)) - fatalx(_("%s: %s"), *cur, _("value out of range")); - sudo_user.max_groups = (int) lval; + sudo_user.max_groups = strtonum(p, 1, INT_MAX, &errstr); + if (sudo_user.max_groups == 0) + fatalx(U_("%s: %s"), *cur, U_(errstr)); continue; } if (MATCHES(*cur, "remote_host=")) { @@ -291,14 +274,14 @@ sudoers_policy_deserialize_info(void *v, char **runas_ p = *cur + sizeof("uid=") - 1; user_uid = (uid_t) atoid(p, NULL, NULL, &errstr); if (errstr != NULL) - fatalx(_("%s: %s"), *cur, _(errstr)); + fatalx(U_("%s: %s"), *cur, U_(errstr)); continue; } if (MATCHES(*cur, "gid=")) { p = *cur + sizeof("gid=") - 1; user_gid = (gid_t) atoid(p, NULL, NULL, &errstr); if (errstr != NULL) - fatalx(_("%s: %s"), *cur, _(errstr)); + fatalx(U_("%s: %s"), *cur, U_(errstr)); continue; } if (MATCHES(*cur, "groups=")) { @@ -324,32 +307,24 @@ sudoers_policy_deserialize_info(void *v, char **runas_ if (MATCHES(*cur, "lines=")) { errno = 0; p = *cur + sizeof("lines=") - 1; - lval = strtol(p, &ep, 10); - if (*p == '\0' || *ep != '\0') - fatalx(_("%s: %s"), *cur, _("invalid value")); - if ((errno == ERANGE && (lval == LONG_MAX || lval == LONG_MIN)) - || (lval > INT_MAX || lval <= 0)) - fatalx(_("%s: %s"), *cur, _("value out of range")); - sudo_user.lines = (int) lval; + sudo_user.lines = strtonum(p, 1, INT_MAX, &errstr); + if (sudo_user.lines == 0) + fatalx(U_("%s: %s"), *cur, U_(errstr)); continue; } if (MATCHES(*cur, "cols=")) { errno = 0; p = *cur + sizeof("cols=") - 1; - lval = strtol(p, &ep, 10); - if (*p == '\0' || *ep != '\0') - fatalx(_("%s: %s"), *cur, _("invalid value")); - if ((errno == ERANGE && (lval == LONG_MAX || lval == LONG_MIN)) - || (lval > INT_MAX || lval <= 0)) - fatalx(_("%s: %s"), *cur, _("value out of range")); - sudo_user.cols = (int) lval; + sudo_user.cols = strtonum(p, 1, INT_MAX, &errstr); + if (sudo_user.lines == 0) + fatalx(U_("%s: %s"), *cur, U_(errstr)); continue; } if (MATCHES(*cur, "sid=")) { p = *cur + sizeof("sid=") - 1; sudo_user.sid = (pid_t) atoid(p, NULL, NULL, &errstr); if (errstr != NULL) - fatalx(_("%s: %s"), *cur, _(errstr)); + fatalx(U_("%s: %s"), *cur, U_(errstr)); continue; } } @@ -357,9 +332,9 @@ sudoers_policy_deserialize_info(void *v, char **runas_ if ((p = strchr(user_runhost, '.'))) user_srunhost = estrndup(user_runhost, (size_t)(p - user_runhost)); if (user_cwd == NULL) - user_cwd = "unknown"; + user_cwd = estrdup("unknown"); if (user_tty == NULL) - user_tty = "unknown"; /* user_ttypath remains NULL */ + user_tty = estrdup("unknown"); /* user_ttypath remains NULL */ if (groups != NULL && groups[0] != '\0') { /* parse_gid_list() will call fatalx() on error. */ @@ -463,15 +438,15 @@ sudoers_policy_exec_setup(char *argv[], char *envp[], egid = runas_gr ? (unsigned int)runas_gr->gr_gid : (unsigned int)runas_pw->pw_gid; len = snprintf(cp, glsize - (cp - gid_list), "%u", egid); - if (len < 0 || len >= glsize - (cp - gid_list)) - fatalx(_("internal error, %s overflow"), "runas_groups"); + if (len < 0 || (size_t)len >= glsize - (cp - gid_list)) + fatalx(U_("internal error, %s overflow"), "runas_groups"); cp += len; for (i = 0; i < grlist->ngids; i++) { if (grlist->gids[i] != egid) { len = snprintf(cp, glsize - (cp - gid_list), ",%u", (unsigned int) grlist->gids[i]); - if (len < 0 || len >= glsize - (cp - gid_list)) - fatalx(_("internal error, %s overflow"), "runas_groups"); + if (len < 0 || (size_t)len >= glsize - (cp - gid_list)) + fatalx(U_("internal error, %s overflow"), "runas_groups"); cp += len; } } @@ -561,7 +536,7 @@ sudoers_policy_close(int exit_status, int error_code) /* We do not currently log the exit status. */ if (error_code) { errno = error_code; - warning(_("unable to execute %s"), safe_cmnd); + warning(U_("unable to execute %s"), safe_cmnd); } /* Close the session we opened in sudoers_policy_init_session(). */ @@ -679,7 +654,7 @@ sudoers_policy_list(int argc, char * const argv[], int if (list_user) { list_pw = sudo_getpwnam(list_user); if (list_pw == NULL) { - warningx(_("unknown user: %s"), list_user); + warningx(U_("unknown user: %s"), list_user); debug_return_bool(-1); } }