From 0b98400cc0b8fa51f995d6cb90382b5f2526b3f5 Mon Sep 17 00:00:00 2001 From: Günther Deschner Date: Thu, 21 Jul 2005 17:40:20 +0000 Subject: 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 (This used to be commit dccf777f42ce1d3f788548842fb8a606bed5708c) --- source3/lib/substitute.c | 16 ++++++++-------- source3/lib/util_str.c | 15 ++++++++++++--- source3/printing/printing.c | 2 +- 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/source3/lib/substitute.c b/source3/lib/substitute.c index f25e5468aa..15862f7a96 100644 --- a/source3/lib/substitute.c +++ b/source3/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/source3/lib/util_str.c b/source3/lib/util_str.c index 6b91a0d625..1401d6d853 100644 --- a/source3/lib/util_str.c +++ b/source3/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) diff --git a/source3/printing/printing.c b/source3/printing/printing.c index b49f0716ea..2a7cd5d3a7 100644 --- a/source3/printing/printing.c +++ b/source3/printing/printing.c @@ -1383,7 +1383,7 @@ static void print_queue_update(int snum, BOOL force) /* don't strip out characters like '$' from the printername */ pstrcpy( lpqcommand, lp_lpqcommand(snum)); - string_sub2( lpqcommand, "%p", PRINTERNAME(snum), sizeof(lpqcommand), False ); + string_sub2( lpqcommand, "%p", PRINTERNAME(snum), sizeof(lpqcommand), False, False ); standard_sub_snum( snum, lpqcommand, sizeof(lpqcommand) ); /* -- cgit