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)
}
*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)
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;
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)
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
}
}
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;
}
}
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. */
}
}
/* 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);
}
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; )
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)) {
ac++;
}
}
- if (ac != 0) {
+ if (ac != 0) {
argv = reallocarray(NULL, ac, sizeof(char *));
if (argv == NULL) {
sudo_warnx(U_("unable to allocate memory"));
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;
}
}
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;
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)
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));
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;
break;
case 0:
{
- char *argv[MAX_MAILFLAGS + 1];
+ char *last, *argv[MAX_MAILFLAGS + 1];
char *mflags, *mpath = def_mailerpath;
int i;
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;
{
size_t len;
FILE *fp;
- char *cp, *dash, *line, lines[2][2048];
+ char *line, lines[2][2048];
int lineno = 0;
int which = 0;
* 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) {
sudo_read_nss(void)
{
FILE *fp;
- char *cp, *line = NULL;
+ char *line = NULL;
size_t linesize = 0;
#ifdef HAVE_SSSD
bool saw_sss = false;
goto nomatch;
while (sudo_parseln(&line, &linesize, NULL, fp) != -1) {
+ char *cp, *last;
+
/* Skip blank or comment lines */
if (*line == '\0')
continue;
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);
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;
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++;
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)
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