Use strtok_r() instead of strtok()
This commit is contained in:
@@ -72,8 +72,10 @@ sudo_getgrouplist(const char *name, gid_t basegid, gid_t *groups, int *ngroupsp)
|
||||
aix_setauthdb((char *) name);
|
||||
#endif
|
||||
if ((grset = getgrset(name)) != NULL) {
|
||||
char *last;
|
||||
const char *errstr;
|
||||
for (cp = strtok(grset, ","); cp != NULL; cp = strtok(NULL, ",")) {
|
||||
|
||||
for (cp = strtok_r(grset, ",", &last); cp != NULL; cp = strtok_r(NULL, ",", &last)) {
|
||||
gid = sudo_strtoid(cp, NULL, NULL, &errstr);
|
||||
if (errstr == NULL && gid != basegid) {
|
||||
if (ngroups == grpsize)
|
||||
|
@@ -118,7 +118,7 @@ main(int argc, char **argv)
|
||||
}
|
||||
*ep = '\0';
|
||||
entry.flags = 0;
|
||||
for ((cp = strtok(cp, "|")); cp != NULL; (cp = strtok(NULL, "|"))) {
|
||||
for ((cp = strtok_r(cp, "|", &ep)); cp != NULL; (cp = strtok_r(NULL, "|", &ep))) {
|
||||
if (strcmp(cp, "GLOB_APPEND") == 0)
|
||||
entry.flags |= GLOB_APPEND;
|
||||
else if (strcmp(cp, "GLOB_DOOFFS") == 0)
|
||||
|
@@ -148,7 +148,7 @@ static struct sudo_debug_output *
|
||||
sudo_debug_new_output(struct sudo_debug_instance *instance,
|
||||
struct sudo_debug_file *debug_file)
|
||||
{
|
||||
char *buf, *cp, *subsys, *pri;
|
||||
char *buf, *cp, *last, *subsys, *pri;
|
||||
struct sudo_debug_output *output;
|
||||
unsigned int i, j;
|
||||
|
||||
@@ -205,7 +205,7 @@ sudo_debug_new_output(struct sudo_debug_instance *instance,
|
||||
buf = strdup(debug_file->debug_flags);
|
||||
if (buf == NULL)
|
||||
goto bad;
|
||||
for ((cp = strtok(buf, ",")); cp != NULL; (cp = strtok(NULL, ","))) {
|
||||
for ((cp = strtok_r(buf, ",", &last)); cp != NULL; (cp = strtok_r(NULL, ",", &last))) {
|
||||
/* Should be in the form subsys@pri. */
|
||||
subsys = cp;
|
||||
if ((pri = strchr(cp, '@')) == NULL)
|
||||
|
@@ -124,11 +124,13 @@ next_entry:
|
||||
if (len > 0 && colon[len - 1] == '\n')
|
||||
colon[len - 1] = '\0';
|
||||
if (*colon != '\0') {
|
||||
char *last;
|
||||
|
||||
gr.gr_mem = gr_mem;
|
||||
cp = strtok(colon, ",");
|
||||
cp = strtok_r(colon, ",", &last);
|
||||
for (n = 0; cp != NULL && n < GRMEM_MAX; n++) {
|
||||
gr.gr_mem[n] = cp;
|
||||
cp = strtok(NULL, ",");
|
||||
cp = strtok_r(NULL, ",", &last);
|
||||
}
|
||||
gr.gr_mem[n++] = NULL;
|
||||
} else
|
||||
|
@@ -125,13 +125,15 @@ group_plugin_load(char *plugin_info)
|
||||
}
|
||||
}
|
||||
if (ac != 0) {
|
||||
char *last;
|
||||
|
||||
argv = malloc(ac * sizeof(char *));
|
||||
if (argv == NULL) {
|
||||
perror(NULL);
|
||||
return -1;
|
||||
}
|
||||
ac = 0;
|
||||
for ((cp = strtok(args, " \t")); cp; (cp = strtok(NULL, " \t")))
|
||||
for ((cp = strtok_r(args, " \t", &last)); cp != NULL; (cp = strtok_r(NULL, " \t", &last)))
|
||||
argv[ac++] = cp;
|
||||
}
|
||||
}
|
||||
|
@@ -243,7 +243,7 @@ build_command_info(const char *command)
|
||||
static char *
|
||||
find_editor(int nfiles, char * const files[], char **argv_out[])
|
||||
{
|
||||
char *cp, **ep, **nargv, *editor, *editor_path;
|
||||
char *cp, *last, **ep, **nargv, *editor, *editor_path;
|
||||
int ac, i, nargc, wasblank;
|
||||
|
||||
/* Lookup EDITOR in user's environment. */
|
||||
@@ -275,7 +275,7 @@ find_editor(int nfiles, char * const files[], char **argv_out[])
|
||||
}
|
||||
}
|
||||
/* If we can't find the editor in the user's PATH, give up. */
|
||||
cp = strtok(editor, " \t");
|
||||
cp = strtok_r(editor, " \t", &last);
|
||||
if (cp == NULL ||
|
||||
(editor_path = find_in_path(editor, plugin_state.envp)) == NULL) {
|
||||
free(editor);
|
||||
@@ -291,7 +291,7 @@ find_editor(int nfiles, char * const files[], char **argv_out[])
|
||||
}
|
||||
for (ac = 0; cp != NULL && ac < nargc; ac++) {
|
||||
nargv[ac] = cp;
|
||||
cp = strtok(NULL, " \t");
|
||||
cp = strtok_r(NULL, " \t", &last);
|
||||
}
|
||||
nargv[ac++] = "--";
|
||||
for (i = 0; i < nfiles; )
|
||||
|
@@ -124,7 +124,7 @@ group_plugin_load(char *plugin_info)
|
||||
if (args != NULL) {
|
||||
int ac = 0;
|
||||
bool wasblank = true;
|
||||
char *cp;
|
||||
char *cp, *last;
|
||||
|
||||
for (cp = args; *cp != '\0'; cp++) {
|
||||
if (isblank((unsigned char)*cp)) {
|
||||
@@ -141,7 +141,7 @@ group_plugin_load(char *plugin_info)
|
||||
goto done;
|
||||
}
|
||||
ac = 0;
|
||||
for ((cp = strtok(args, " \t")); cp; (cp = strtok(NULL, " \t")))
|
||||
for ((cp = strtok_r(args, " \t", &last)); cp != NULL; (cp = strtok_r(NULL, " \t", &last)))
|
||||
argv[ac++] = cp;
|
||||
}
|
||||
}
|
||||
|
@@ -57,14 +57,14 @@ static struct interface_list interfaces;
|
||||
bool
|
||||
set_interfaces(const char *ai)
|
||||
{
|
||||
char *addrinfo, *addr, *mask;
|
||||
char *addrinfo, *addr, *mask, *last;
|
||||
struct interface *ifp;
|
||||
bool rval = false;
|
||||
debug_decl(set_interfaces, SUDOERS_DEBUG_NETIF)
|
||||
|
||||
if ((addrinfo = strdup(ai)) == NULL)
|
||||
debug_return_bool(false);
|
||||
for (addr = strtok(addrinfo, " \t"); addr != NULL; addr = strtok(NULL, " \t")) {
|
||||
for (addr = strtok_r(addrinfo, " \t", &last); addr != NULL; addr = strtok_r(NULL, " \t", &last)) {
|
||||
/* Separate addr and mask. */
|
||||
if ((mask = strchr(addr, '/')) == NULL)
|
||||
continue;
|
||||
|
@@ -425,7 +425,7 @@ struct sudo_nss sudo_nss_ldap = {
|
||||
static bool
|
||||
sudo_ldap_conf_add_ports(void)
|
||||
{
|
||||
char *host, *port, defport[13];
|
||||
char *host, *last, *port, defport[13];
|
||||
char hostbuf[LINE_MAX * 2];
|
||||
int len;
|
||||
debug_decl(sudo_ldap_conf_add_ports, SUDOERS_DEBUG_LDAP)
|
||||
@@ -437,7 +437,7 @@ sudo_ldap_conf_add_ports(void)
|
||||
debug_return_bool(false);
|
||||
}
|
||||
|
||||
for ((host = strtok(ldap_conf.host, " \t")); host; (host = strtok(NULL, " \t"))) {
|
||||
for ((host = strtok_r(ldap_conf.host, " \t", &last)); host; (host = strtok_r(NULL, " \t", &last))) {
|
||||
if (hostbuf[0] != '\0')
|
||||
CHECK_STRLCAT(hostbuf, " ", sizeof(hostbuf));
|
||||
CHECK_STRLCAT(hostbuf, host, sizeof(hostbuf));
|
||||
@@ -471,20 +471,21 @@ static int
|
||||
sudo_ldap_parse_uri(const struct ldap_config_str_list *uri_list)
|
||||
{
|
||||
const struct ldap_config_str *entry;
|
||||
char *buf, *uri, *host, *cp, *port;
|
||||
char hostbuf[LINE_MAX];
|
||||
char *buf, hostbuf[LINE_MAX];
|
||||
int nldap = 0, nldaps = 0;
|
||||
int rc = -1;
|
||||
debug_decl(sudo_ldap_parse_uri, SUDOERS_DEBUG_LDAP)
|
||||
|
||||
hostbuf[0] = '\0';
|
||||
STAILQ_FOREACH(entry, uri_list, entries) {
|
||||
char *cp, *host, *last, *port, *uri;
|
||||
|
||||
buf = strdup(entry->val);
|
||||
if (buf == NULL) {
|
||||
sudo_warnx(U_("unable to allocate memory"));
|
||||
goto done;
|
||||
}
|
||||
for ((uri = strtok(buf, " \t")); uri != NULL; (uri = strtok(NULL, " \t"))) {
|
||||
for ((uri = strtok_r(buf, " \t", &last)); uri != NULL; (uri = strtok_r(NULL, " \t", &last))) {
|
||||
if (strncasecmp(uri, "ldap://", 7) == 0) {
|
||||
nldap++;
|
||||
host = uri + 7;
|
||||
|
@@ -646,7 +646,7 @@ send_mail(const char *fmt, ...)
|
||||
break;
|
||||
case 0:
|
||||
{
|
||||
char *argv[MAX_MAILFLAGS + 1];
|
||||
char *last, *argv[MAX_MAILFLAGS + 1];
|
||||
char *mflags, *mpath = def_mailerpath;
|
||||
int i;
|
||||
|
||||
@@ -673,10 +673,10 @@ send_mail(const char *fmt, ...)
|
||||
argv[0] = mpath;
|
||||
|
||||
i = 1;
|
||||
if ((p = strtok(mflags, " \t"))) {
|
||||
if ((p = strtok_r(mflags, " \t", &last))) {
|
||||
do {
|
||||
argv[i] = p;
|
||||
} while (++i < MAX_MAILFLAGS && (p = strtok(NULL, " \t")));
|
||||
} while (++i < MAX_MAILFLAGS && (p = strtok_r(NULL, " \t", &last)));
|
||||
}
|
||||
argv[i] = NULL;
|
||||
|
||||
|
@@ -57,7 +57,7 @@ main(int argc, char *argv[])
|
||||
{
|
||||
size_t len;
|
||||
FILE *fp;
|
||||
char *cp, *dash, *line, lines[2][2048];
|
||||
char *line, lines[2][2048];
|
||||
int lineno = 0;
|
||||
int which = 0;
|
||||
|
||||
@@ -78,14 +78,18 @@ main(int argc, char *argv[])
|
||||
* 60-80,40
|
||||
*/
|
||||
while ((line = fgets(lines[which], sizeof(lines[which]), fp)) != NULL) {
|
||||
char *cp, *last;
|
||||
|
||||
len = strcspn(line, "\n");
|
||||
line[len] = '\0';
|
||||
|
||||
/* If we read the 2nd line, parse list of line lengths and check. */
|
||||
if (which) {
|
||||
lineno++;
|
||||
for (cp = strtok(lines[1], ","); cp != NULL; cp = strtok(NULL, ",")) {
|
||||
for (cp = strtok_r(lines[1], ",", &last); cp != NULL; cp = strtok_r(NULL, ",", &last)) {
|
||||
char *dash;
|
||||
size_t maxlen;
|
||||
|
||||
/* May be either a number or a range. */
|
||||
dash = strchr(cp, '-');
|
||||
if (dash != NULL) {
|
||||
|
@@ -69,7 +69,7 @@ struct sudo_nss_list *
|
||||
sudo_read_nss(void)
|
||||
{
|
||||
FILE *fp;
|
||||
char *cp, *line = NULL;
|
||||
char *line = NULL;
|
||||
size_t linesize = 0;
|
||||
#ifdef HAVE_SSSD
|
||||
bool saw_sss = false;
|
||||
@@ -86,6 +86,8 @@ sudo_read_nss(void)
|
||||
goto nomatch;
|
||||
|
||||
while (sudo_parseln(&line, &linesize, NULL, fp) != -1) {
|
||||
char *cp, *last;
|
||||
|
||||
/* Skip blank or comment lines */
|
||||
if (*line == '\0')
|
||||
continue;
|
||||
@@ -95,7 +97,7 @@ sudo_read_nss(void)
|
||||
continue;
|
||||
|
||||
/* Parse line */
|
||||
for ((cp = strtok(line + 8, " \t")); cp != NULL; (cp = strtok(NULL, " \t"))) {
|
||||
for ((cp = strtok_r(line + 8, " \t", &last)); cp != NULL; (cp = strtok_r(NULL, " \t", &last))) {
|
||||
if (strcasecmp(cp, "files") == 0 && !saw_files) {
|
||||
SUDO_NSS_CHECK_UNUSED(sudo_nss_file, "files");
|
||||
TAILQ_INSERT_TAIL(&snl, &sudo_nss_file, entries);
|
||||
@@ -149,7 +151,7 @@ struct sudo_nss_list *
|
||||
sudo_read_nss(void)
|
||||
{
|
||||
FILE *fp;
|
||||
char *cp, *ep, *line = NULL;
|
||||
char *cp, *ep, *last, *line = NULL;
|
||||
size_t linesize = 0;
|
||||
#ifdef HAVE_SSSD
|
||||
bool saw_sss = false;
|
||||
@@ -178,7 +180,7 @@ sudo_read_nss(void)
|
||||
continue;
|
||||
|
||||
/* Parse line */
|
||||
for ((cp = strtok(cp, ",")); cp != NULL; (cp = strtok(NULL, ","))) {
|
||||
for ((cp = strtok_r(cp, ",", &last)); cp != NULL; (cp = strtok_r(NULL, ",", &last))) {
|
||||
/* Trim leading whitespace. */
|
||||
while (isspace((unsigned char)*cp))
|
||||
cp++;
|
||||
|
@@ -247,7 +247,7 @@ main(int argc, char *argv[])
|
||||
case 'f':
|
||||
/* Set the replay filter. */
|
||||
def_filter = false;
|
||||
for (cp = strtok(optarg, ","); cp; cp = strtok(NULL, ",")) {
|
||||
for (cp = strtok_r(optarg, ",", &ep); cp; cp = strtok_r(NULL, ",", &ep)) {
|
||||
if (strcmp(cp, "stdout") == 0)
|
||||
io_log_files[IOFD_STDOUT].enabled = true;
|
||||
else if (strcmp(cp, "stderr") == 0)
|
||||
|
@@ -274,11 +274,13 @@ next_entry:
|
||||
if (len > 0 && colon[len - 1] == '\n')
|
||||
colon[len - 1] = '\0';
|
||||
if (*colon != '\0') {
|
||||
char *last;
|
||||
|
||||
gr.gr_mem = gr_mem;
|
||||
cp = strtok(colon, ",");
|
||||
cp = strtok_r(colon, ",", &last);
|
||||
for (n = 0; cp != NULL && n < GRMEM_MAX; n++) {
|
||||
gr.gr_mem[n] = cp;
|
||||
cp = strtok(NULL, ",");
|
||||
cp = strtok_r(NULL, ",", &last);
|
||||
}
|
||||
gr.gr_mem[n++] = NULL;
|
||||
} else
|
||||
|
Reference in New Issue
Block a user