diff options
author | Günther Deschner <gd@samba.org> | 2005-07-21 17:40:20 +0000 |
---|---|---|
committer | Günther Deschner <gd@samba.org> | 2005-07-21 17:40:20 +0000 |
commit | 889370e8fb139d039ec026ee4bd697d5378403a5 (patch) | |
tree | 1827edf5a7a8daac4c7cdb22b47a3090da318cd1 /source/lib | |
parent | 7c69b092d3ebe34912f2bb50c64d44f77db435af (diff) | |
download | samba-889370e8fb139d039ec026ee4bd697d5378403a5.tar.gz samba-889370e8fb139d039ec026ee4bd697d5378403a5.tar.xz samba-889370e8fb139d039ec026ee4bd697d5378403a5.zip |
r8686: Revert %LOGONSERVER%-substitution. The substition is done on the client,
not on the server.
We now preserve this windows variable (important for vampired setups)
and correctly substitute only the "%L"s in strings like:
"%LOGONSERVER% %L %lOgOnSeRvEr% %L".
Guenther
Diffstat (limited to 'source/lib')
-rw-r--r-- | source/lib/substitute.c | 16 | ||||
-rw-r--r-- | source/lib/util_str.c | 15 |
2 files changed, 20 insertions, 11 deletions
diff --git a/source/lib/substitute.c b/source/lib/substitute.c index f25e5468aad..15862f7a966 100644 --- a/source/lib/substitute.c +++ b/source/lib/substitute.c @@ -385,20 +385,20 @@ void standard_sub_basic(const char *smb_name, char *str,size_t len) case 'i' : string_sub(p,"%i", client_socket_addr(),l); break; - case 'L' : + case 'L' : + if (!StrnCaseCmp(p, "\%LOGONSERVER\%", 13)) { + p++; + break; + } + if (local_machine_name && *local_machine_name) { - if (IS_DC) - string_sub(p, "\%LOGONSERVER\%", local_machine_name, l); - string_sub(p,"%L", local_machine_name,l); + string_sub_once(p, "%L", local_machine_name, l); } else { pstring temp_name; pstrcpy(temp_name, global_myname()); strlower_m(temp_name); - if (IS_DC) - string_sub(p, "\%LOGONSERVER\%", temp_name,l); - - string_sub(p,"%L", temp_name,l); + string_sub_once(p, "%L", temp_name, l); } break; case 'M' : diff --git a/source/lib/util_str.c b/source/lib/util_str.c index 6b91a0d625e..1401d6d8534 100644 --- a/source/lib/util_str.c +++ b/source/lib/util_str.c @@ -909,14 +909,15 @@ BOOL string_set(char **dest,const char *src) enough room! This routine looks for pattern in s and replaces it with - insert. It may do multiple replacements. + insert. It may do multiple replacements or just one. Any of " ; ' $ or ` in the insert string are replaced with _ if len==0 then the string cannot be extended. This is different from the old use of len==0 which was for no length checks to be done. **/ -void string_sub2(char *s,const char *pattern, const char *insert, size_t len, BOOL remove_unsafe_characters) +void string_sub2(char *s,const char *pattern, const char *insert, size_t len, + BOOL remove_unsafe_characters, BOOL replace_once) { char *p; ssize_t ls,lp,li, i; @@ -963,12 +964,20 @@ void string_sub2(char *s,const char *pattern, const char *insert, size_t len, BO } s = p + li; ls += (li-lp); + + if (replace_once) + break; } } +void string_sub_once(char *s, const char *pattern, const char *insert, size_t len) +{ + string_sub2( s, pattern, insert, len, True, True ); +} + void string_sub(char *s,const char *pattern, const char *insert, size_t len) { - string_sub2( s, pattern, insert, len, True ); + string_sub2( s, pattern, insert, len, True, False ); } void fstring_sub(char *s,const char *pattern,const char *insert) |