strtok -> strtok_r
authorVolker Lendecke <vl@samba.org>
Wed, 23 Jan 2008 10:04:10 +0000 (11:04 +0100)
committerVolker Lendecke <vl@samba.org>
Wed, 23 Jan 2008 14:08:04 +0000 (15:08 +0100)
18 files changed:
source/client/client.c
source/client/clitar.c
source/client/smbmnt.c
source/client/smbmount.c
source/lib/afs_settoken.c
source/lib/debug.c
source/libads/ads_struct.c
source/modules/vfs_recycle.c
source/nmbd/nmbd_processlogon.c
source/param/loadparm.c
source/printing/load.c
source/printing/lpq_parse.c
source/printing/print_aix.c
source/rpcclient/cmd_spoolss.c
source/smbd/msdfs.c
source/smbd/password.c
source/torture/torture.c
source/web/cgi.c

index 28b4a2b24becfa44949257551ed1930235ed50ff..c9343104911096214bd140346d2f9bf4c3790afe 100644 (file)
@@ -1463,6 +1463,7 @@ static int cmd_mkdir(void)
                struct cli_state *targetcli;
                char *targetname = NULL;
                char *p = NULL;
+               char *saveptr;
 
                ddir2 = talloc_strdup(ctx, "");
                if (!ddir2) {
@@ -1478,7 +1479,7 @@ static int cmd_mkdir(void)
                        return 1;
                }
                trim_char(ddir,'.','\0');
-               p = strtok(ddir,"/\\");
+               p = strtok_r(ddir, "/\\", &saveptr);
                while (p) {
                        ddir2 = talloc_asprintf_append(ddir2, p);
                        if (!ddir2) {
@@ -1491,7 +1492,7 @@ static int cmd_mkdir(void)
                        if (!ddir2) {
                                return 1;
                        }
-                       p = strtok(NULL,"/\\");
+                       p = strtok_r(NULL, "/\\", &saveptr);
                }
        } else {
                do_mkdir(mask);
index 135815c3cd7d11a848f13d1725ce0f5ae051483f..816e7b17100a5d327391044246a6ef9ab9638058 100644 (file)
@@ -513,6 +513,7 @@ static bool ensurepath(const char *fname)
        char *partpath, *ffname;
        const char *p=fname;
        char *basehack;
+       char *saveptr;
 
        DEBUG(5, ( "Ensurepath called with: %s\n", fname));
 
@@ -528,7 +529,7 @@ static bool ensurepath(const char *fname)
 
        *partpath = 0;
 
-       /* fname copied to ffname so can strtok */
+       /* fname copied to ffname so can strtok_r */
 
        safe_strcpy(ffname, fname, strlen(fname));
 
@@ -541,7 +542,7 @@ static bool ensurepath(const char *fname)
                *basehack='\0';
        }
 
-       p=strtok(ffname, "\\");
+       p=strtok_r(ffname, "\\", &saveptr);
 
        while (p) {
                safe_strcat(partpath, p, strlen(fname) + 1);
@@ -558,7 +559,7 @@ static bool ensurepath(const char *fname)
                }
 
                safe_strcat(partpath, "\\", strlen(fname) + 1);
-               p = strtok(NULL,"/\\");
+               p = strtok_r(NULL, "/\\", &saveptr);
        }
 
        SAFE_FREE(partpath);
index 7f1e1d5003ac05580c34af1f3cf55e4a628bd87f..79c55b2f90ea336805626257939376cc3778f25c 100644 (file)
@@ -162,6 +162,7 @@ do_mount(char *share_name, unsigned int flags, struct smb_mount_data *data)
        char *release, *major, *minor;
        char *data1, *data2;
        int ret;
+       char *saveptr;
 
        if (asprintf(&opts,
                        "version=7,uid=%d,gid=%d,file_mode=0%o,dir_mode=0%o,%s",
@@ -172,8 +173,8 @@ do_mount(char *share_name, unsigned int flags, struct smb_mount_data *data)
 
        uname(&uts);
        release = uts.release;
-       major = strtok(release, ".");
-       minor = strtok(NULL, ".");
+       major = strtok_r(release, ".", &saveptr);
+       minor = strtok_r(NULL, ".", &saveptr);
        if (major && minor && atoi(major) == 2 && atoi(minor) < 4) {
                /* < 2.4, assume struct */
                data1 = (char *) data;
index 98c61a30d89d968d918f3d68651645863e4528dd..9fe2d36bd37846cdacbd45a60eec99d24b029c87 100644 (file)
@@ -764,6 +764,7 @@ static void parse_mount_smb(int argc, char **argv)
        char *opts;
        char *opteq;
        int val;
+       char *saveptr;
        TALLOC_CTX *ctx = talloc_tos();
 
        /* FIXME: This function can silently fail if the arguments are
@@ -813,7 +814,8 @@ static void parse_mount_smb(int argc, char **argv)
        /*
         * option parsing from nfsmount.c (util-linux-2.9u)
         */
-        for (opts = strtok(optarg, ","); opts; opts = strtok(NULL, ",")) {
+        for (opts = strtok_r(optarg, ",", &saveptr); opts;
+            opts = strtok_r(NULL, ",", &saveptr)) {
                DEBUG(3, ("opts: %s\n", opts));
                 if ((opteq = strchr_m(opts, '='))) {
                         val = atoi(opteq + 1);
index aeef1c35203da77bb8cdc75d0e67c66a6fbe8d20..444f09efca09edaa6c064bbe0db26eaf177e1dac 100644 (file)
@@ -53,20 +53,21 @@ static bool afs_decode_token(const char *string, char **cell,
 {
        DATA_BLOB blob;
        struct ClearToken result_ct;
+       char *saveptr;
 
        char *s = SMB_STRDUP(string);
 
        char *t;
 
-       if ((t = strtok(s, "\n")) == NULL) {
-               DEBUG(10, ("strtok failed\n"));
+       if ((t = strtok_r(s, "\n", &saveptr)) == NULL) {
+               DEBUG(10, ("strtok_r failed\n"));
                return False;
        }
 
        *cell = SMB_STRDUP(t);
 
-       if ((t = strtok(NULL, "\n")) == NULL) {
-               DEBUG(10, ("strtok failed\n"));
+       if ((t = strtok_r(NULL, "\n", &saveptr)) == NULL) {
+               DEBUG(10, ("strtok_r failed\n"));
                return False;
        }
 
@@ -75,8 +76,8 @@ static bool afs_decode_token(const char *string, char **cell,
                return False;
        }
                
-       if ((t = strtok(NULL, "\n")) == NULL) {
-               DEBUG(10, ("strtok failed\n"));
+       if ((t = strtok_r(NULL, "\n", &saveptr)) == NULL) {
+               DEBUG(10, ("strtok_r failed\n"));
                return False;
        }
 
@@ -93,8 +94,8 @@ static bool afs_decode_token(const char *string, char **cell,
 
        data_blob_free(&blob);
 
-       if ((t = strtok(NULL, "\n")) == NULL) {
-               DEBUG(10, ("strtok failed\n"));
+       if ((t = strtok_r(NULL, "\n", &saveptr)) == NULL) {
+               DEBUG(10, ("strtok_r failed\n"));
                return False;
        }
 
@@ -103,8 +104,8 @@ static bool afs_decode_token(const char *string, char **cell,
                return False;
        }
                
-       if ((t = strtok(NULL, "\n")) == NULL) {
-               DEBUG(10, ("strtok failed\n"));
+       if ((t = strtok_r(NULL, "\n", &saveptr)) == NULL) {
+               DEBUG(10, ("strtok_r failed\n"));
                return False;
        }
 
@@ -113,8 +114,8 @@ static bool afs_decode_token(const char *string, char **cell,
                return False;
        }
                
-       if ((t = strtok(NULL, "\n")) == NULL) {
-               DEBUG(10, ("strtok failed\n"));
+       if ((t = strtok_r(NULL, "\n", &saveptr)) == NULL) {
+               DEBUG(10, ("strtok_r failed\n"));
                return False;
        }
 
@@ -123,8 +124,8 @@ static bool afs_decode_token(const char *string, char **cell,
                return False;
        }
                
-       if ((t = strtok(NULL, "\n")) == NULL) {
-               DEBUG(10, ("strtok failed\n"));
+       if ((t = strtok_r(NULL, "\n", &saveptr)) == NULL) {
+               DEBUG(10, ("strtok_r failed\n"));
                return False;
        }
 
index 6c1bfea04f74fa2a7ba421218b7cf648ae5f6161..51bb0d754182a99d880d2c56f11e2e772e346a80 100644 (file)
@@ -429,8 +429,9 @@ static bool debug_parse_params(char **params)
 
        /* Fill in new debug class levels */
        for (; i < debug_num_classes && params[i]; i++) {
-               if ((class_name=strtok(params[i],":")) &&
-                       (class_level=strtok(NULL, "\0")) &&
+               char *saveptr;
+               if ((class_name = strtok_r(params[i],":", &saveptr)) &&
+                       (class_level = strtok_r(NULL, "\0", &saveptr)) &&
             ((ndx = debug_lookup_classname(class_name)) != -1)) {
                                DEBUGLEVEL_CLASS[ndx] = atoi(class_level);
                                DEBUGLEVEL_CLASS_ISSET[ndx] = True;
index 44bcdf76eaf219ee6d298a4ddc8af9c233e7a465..8cc2f1215e24fe8a616b92b8addc8b6bff64518b 100644 (file)
@@ -29,7 +29,8 @@ char *ads_build_path(const char *realm, const char *sep, const char *field, int
        int numbits = 0;
        char *ret;
        int len;
-       
+       char *saveptr;
+
        r = SMB_STRDUP(realm);
 
        if (!r || !*r) {
@@ -51,11 +52,11 @@ char *ads_build_path(const char *realm, const char *sep, const char *field, int
        }
 
        strlcpy(ret,field, len);
-       p=strtok(r,sep); 
+       p=strtok_r(r, sep, &saveptr);
        if (p) {
                strlcat(ret, p, len);
        
-               while ((p=strtok(NULL,sep))) {
+               while ((p=strtok_r(NULL, sep, &saveptr)) != NULL) {
                        char *s;
                        if (reverse)
                                asprintf(&s, "%s%s,%s", field, p, ret);
index fef65efa7790cd52ea79673e2fd5f1a7cb1bfc13..da1716719ae5a9d09ec1d08e0e0db9a49c1e5ae0 100644 (file)
@@ -269,6 +269,7 @@ static bool recycle_create_dir(vfs_handle_struct *handle, const char *dname)
        char *token;
        char *tok_str;
        bool ret = False;
+       char *saveptr;
 
        mode = recycle_directory_mode(handle);
 
@@ -286,7 +287,8 @@ static bool recycle_create_dir(vfs_handle_struct *handle, const char *dname)
        }
 
        /* Create directory tree if neccessary */
-       for(token = strtok(tok_str, "/"); token; token = strtok(NULL, "/")) {
+       for(token = strtok_r(tok_str, "/", &saveptr); token;
+           token = strtok_r(NULL, "/", &saveptr)) {
                safe_strcat(new_dir, token, len);
                if (recycle_directory_exist(handle, new_dir))
                        DEBUG(10, ("recycle: dir %s already exists\n", new_dir));
index 0ff0afd12d7337992223f46aeb457c239e92e842..10833e80890305c00402e6487a54a28b7751929d 100644 (file)
@@ -399,6 +399,7 @@ reporting %s domain %s 0x%x ntversion=%x lm_nt token=%x lm_20 token=%x\n",
                                        char *component, *dc, *q1;
                                        char *q_orig = q;
                                        int str_offset;
+                                       char *saveptr;
 
                                        domain = get_mydnsdomname(talloc_tos());
                                        if (!domain) {
@@ -444,7 +445,7 @@ reporting %s domain %s 0x%x ntversion=%x lm_nt token=%x lm_20 token=%x\n",
                                        str_offset = q - q_orig;
                                        dc = domain;
                                        q1 = q;
-                                       while ((component = strtok(dc, "."))) {
+                                       while ((component = strtok_r(dc, ".", &saveptr)) != NULL) {
                                                dc = NULL;
                                                if (sizeof(outbuf) - PTR_DIFF(q, outbuf) < 1) {
                                                        return;
index 0796a78dd31c8b458da4b1f8359ca613208adbd2..c1d26af98977690fdfd483a81cd69747191d0652 100644 (file)
@@ -4709,6 +4709,7 @@ static void lp_add_auto_services(char *str)
        char *s;
        char *p;
        int homes;
+       char *saveptr;
 
        if (!str)
                return;
@@ -4719,7 +4720,8 @@ static void lp_add_auto_services(char *str)
 
        homes = lp_servicenumber(HOMES_NAME);
 
-       for (p = strtok(s, LIST_SEP); p; p = strtok(NULL, LIST_SEP)) {
+       for (p = strtok_r(s, LIST_SEP, &saveptr); p;
+            p = strtok_r(NULL, LIST_SEP, &saveptr)) {
                char *home;
 
                if (lp_servicenumber(p) >= 0)
index f8aba3996d47ec00de09f7d02d10a298994775ac..23144d5a9550dc9e6ba2bea5eaf94d6bccaf4427 100644 (file)
@@ -28,6 +28,7 @@ static void add_auto_printers(void)
        const char *p;
        int pnum = lp_servicenumber(PRINTERS_NAME);
        char *str;
+       char *saveptr;
 
        if (pnum < 0)
                return;
@@ -35,7 +36,8 @@ static void add_auto_printers(void)
        if ((str = SMB_STRDUP(lp_auto_services())) == NULL)
                return;
 
-       for (p = strtok(str, LIST_SEP); p; p = strtok(NULL, LIST_SEP)) {
+       for (p = strtok_r(str, LIST_SEP, &saveptr); p;
+            p = strtok_r(NULL, LIST_SEP, &saveptr)) {
                if (lp_servicenumber(p) >= 0)
                        continue;
                
index 6dcddb6f1b6e5dcb02c134d874755e09f06c7440..afa3b4850a584e392f9560c34a80eb7ba4e223c2 100644 (file)
@@ -127,6 +127,7 @@ static bool parse_lpq_bsd(char *line,print_queue_struct *buf,bool first)
        int  count = 0;
        TALLOC_CTX *ctx = talloc_tos();
        char *line2 = NULL;
+       char *saveptr;
 
        line2 = talloc_strdup(ctx, line);
        if (!line2) {
@@ -144,10 +145,11 @@ static bool parse_lpq_bsd(char *line,print_queue_struct *buf,bool first)
 #endif /* OSF1 */
 
        /* FIXME: Use next_token_talloc rather than strtok! */
-       tok[0] = strtok(line2," \t");
+       tok[0] = strtok_r(line2," \t", &saveptr);
        count++;
 
-       while ((count < MAXTOK) && ((tok[count] = strtok(NULL," \t")) != NULL)) {
+       while ((count < MAXTOK)
+              && ((tok[count] = strtok_r(NULL, " \t", &saveptr)) != NULL)) {
                count++;
        }
 
index fd85ca08336ba8e7f04a2172a7ec0b073e8dc462..57590cc39efd7a71bd281086f86431f2a5b2ab5d 100644 (file)
@@ -59,8 +59,9 @@ bool aix_cache_reload(void)
                                continue;
 
                        if ((p = strchr_m(line, ':'))) {
+                               char *saveptr;
                                *p = '\0';
-                               p = strtok(line, ":");
+                               p = strtok_r(line, ":", &saveptr);
                                if (strcmp(p, "bsh") != 0) {
                                        name = talloc_strdup(ctx, p);
                                        if (!name) {
index a7969bddd1eeb82341a31facd253863b11a80c47..d98cb992769df3893e79b96d039e0f727f2b8135 100644 (file)
@@ -1222,9 +1222,10 @@ void set_drv_info_3_env (DRIVER_INFO_3 *info, const char *arch)
 static char* get_driver_3_param (char* str, const char* delim, UNISTR* dest)
 {
        char    *ptr;
+       char *saveptr;
 
        /* get the next token */
-       ptr = strtok(str, delim);
+       ptr = strtok_r(str, delim, &saveptr);
 
        /* a string of 'NULL' is used to represent an empty
           parameter because two consecutive delimiters
@@ -1251,7 +1252,8 @@ static bool init_drv_info_3_members ( TALLOC_CTX *mem_ctx, DRIVER_INFO_3 *info,
 {
        char    *str, *str2;
        uint32  len, i;
-       
+       char *saveptr;
+
        /* fill in the UNISTR fields */
        str = get_driver_3_param (args, ":", &info->name);
        str = get_driver_3_param (NULL, ":", &info->driverpath);
@@ -1266,13 +1268,13 @@ static bool init_drv_info_3_members ( TALLOC_CTX *mem_ctx, DRIVER_INFO_3 *info,
        str = str2;                     
 
        /* begin to strip out each filename */
-       str = strtok(str, ",");         
+       str = strtok_r(str, ",", &saveptr);
        len = 0;
        while (str != NULL)
        {
                /* keep a cumlative count of the str lengths */
                len += strlen(str)+1;
-               str = strtok(NULL, ",");
+               str = strtok_r(NULL, ",", &saveptr);
        }
 
        /* allocate the space; add one extra slot for a terminating NULL.
index 4ae735633b57b52a32ea0a1f6d908d7689362e00..8ffa0f7751cb4ce1cd0d1d0c9cb0a2143ab71da4 100644 (file)
@@ -288,12 +288,13 @@ static bool parse_msdfs_symlink(TALLOC_CTX *ctx,
        char **alt_path = NULL;
        int count = 0, i;
        struct referral *reflist;
+       char *saveptr;
 
        temp = talloc_strdup(ctx, target);
        if (!temp) {
                return False;
        }
-       prot = strtok(temp,":");
+       prot = strtok_r(temp, ":", &saveptr);
        if (!prot) {
                DEBUG(0,("parse_msdfs_symlink: invalid path !\n"));
                return False;
@@ -306,7 +307,7 @@ static bool parse_msdfs_symlink(TALLOC_CTX *ctx,
 
        /* parse out the alternate paths */
        while((count<MAX_REFERRAL_COUNT) &&
-             ((alt_path[count] = strtok(NULL,",")) != NULL)) {
+             ((alt_path[count] = strtok_r(NULL, ",", &saveptr)) != NULL)) {
                count++;
        }
 
index 6b517c3d862cc15be2191e844bb9d47888c129bc..85e1ccf0a7f27c7fa365205475517f666ef06f65 100644 (file)
@@ -759,6 +759,7 @@ bool authorise_login(int snum, fstring user, DATA_BLOB password,
        if (!ok) {
                char *auser;
                char *user_list = NULL;
+               char *saveptr;
 
                if ( session_userlist )
                        user_list = SMB_STRDUP(session_userlist);
@@ -768,8 +769,9 @@ bool authorise_login(int snum, fstring user, DATA_BLOB password,
                if (!user_list)
                        return(False);
 
-               for (auser=strtok(user_list,LIST_SEP); !ok && auser;
-                    auser = strtok(NULL,LIST_SEP)) {
+               for (auser = strtok_r(user_list, LIST_SEP, &saveptr);
+                    !ok && auser;
+                    auser = strtok_r(NULL, LIST_SEP, &saveptr)) {
                        fstring user2;
                        fstrcpy(user2,auser);
                        if (!user_ok(user2,snum))
@@ -792,6 +794,7 @@ bool authorise_login(int snum, fstring user, DATA_BLOB password,
                TALLOC_CTX *ctx = talloc_tos();
                char *auser;
                char *user_list = talloc_strdup(ctx, lp_username(snum));
+               char *saveptr;
 
                if (!user_list) {
                        goto check_guest;
@@ -806,8 +809,9 @@ bool authorise_login(int snum, fstring user, DATA_BLOB password,
                        goto check_guest;
                }
 
-               for (auser=strtok(user_list,LIST_SEP); auser && !ok;
-                    auser = strtok(NULL,LIST_SEP)) {
+               for (auser = strtok_r(user_list, LIST_SEP, &saveptr);
+                    auser && !ok;
+                    auser = strtok_r(NULL, LIST_SEP, &saveptr)) {
                        if (*auser == '@') {
                                auser = validate_group(auser+1,password,snum);
                                if (auser) {
index 070474cf6fb645ac5dfd05e84b7899f5882f5fe3..8d67e512fe66bb2c30adf72b45ac52253a287a61 100644 (file)
@@ -890,6 +890,7 @@ static bool run_netbench(int client)
        }
 
        while (fgets(line, sizeof(line)-1, f)) {
+               char *saveptr;
                line_count++;
 
                line[strlen(line)-1] = 0;
@@ -899,9 +900,9 @@ static bool run_netbench(int client)
                all_string_sub(line,"client1", cname, sizeof(line));
 
                /* parse the command parameters */
-               params[0] = strtok(line," ");
+               params[0] = strtok_r(line, " ", &saveptr);
                i = 0;
-               while (params[i]) params[++i] = strtok(NULL," ");
+               while (params[i]) params[++i] = strtok_r(NULL, " ", &saveptr);
 
                params[i] = "";
 
index 07a6fbcf544cc64106eaf2d413946392f04bded9..c6233b0869485c66353335a68c934608759c6100 100644 (file)
@@ -164,7 +164,9 @@ void cgi_load_variables(void)
        open("/dev/null", O_RDWR);
 
        if ((s=query_string) || (s=getenv("QUERY_STRING"))) {
-               for (tok=strtok(s,"&;");tok;tok=strtok(NULL,"&;")) {
+               char *saveptr;
+               for (tok=strtok_r(s, "&;", &saveptr); tok;
+                    tok=strtok_r(NULL, "&;", &saveptr)) {
                        p = strchr_m(tok,'=');
                        if (!p) continue;