Remove smbldap_get_single_pstring() and all pstrings
[samba.git] / source / lib / util_str.c
index 6d429e37196a34c7a924cb64700aac90badadbcd..68b06a6d9013274f3ecdbac97259effbbf854261 100644 (file)
@@ -1187,14 +1187,17 @@ void pstring_sub(char *s,const char *pattern,const char *insert)
 }
 
 /**
- Similar to string_sub, but it will accept only allocated strings
+ Similar to string_sub2, but it will accept only allocated strings
  and may realloc them so pay attention at what you pass on no
  pointers inside strings, no pstrings or const may be passed
  as string.
 **/
 
-char *realloc_string_sub(char *string, const char *pattern,
-                        const char *insert)
+char *realloc_string_sub2(char *string,
+                       const char *pattern,
+                       const char *insert,
+                       bool remove_unsafe_characters,
+                       bool allow_trailing_dollar)
 {
        char *p, *in;
        char *s;
@@ -1221,10 +1224,18 @@ char *realloc_string_sub(char *string, const char *pattern,
                        case '\'':
                        case ';':
                        case '$':
+                               /* allow a trailing $
+                                * (as in machine accounts) */
+                               if (allow_trailing_dollar && (i == li - 1 )) {
+                                       break;
+                               }
                        case '%':
                        case '\r':
                        case '\n':
-                               in[i] = '_';
+                               if ( remove_unsafe_characters ) {
+                                       in[i] = '_';
+                                       break;
+                               }
                        default:
                                /* ok */
                                break;
@@ -1254,6 +1265,13 @@ char *realloc_string_sub(char *string, const char *pattern,
        return string;
 }
 
+char *realloc_string_sub(char *string,
+                       const char *pattern,
+                       const char *insert)
+{
+       return realloc_string_sub2(string, pattern, insert, true, false);
+}
+
 /*
  * Internal guts of talloc_string_sub and talloc_all_string_sub.
  * 'filter' differentiates between them.