summaryrefslogtreecommitdiffstats
path: root/source/lib
diff options
context:
space:
mode:
authorGünther Deschner <gd@samba.org>2005-07-21 17:40:20 +0000
committerGünther Deschner <gd@samba.org>2005-07-21 17:40:20 +0000
commit889370e8fb139d039ec026ee4bd697d5378403a5 (patch)
tree1827edf5a7a8daac4c7cdb22b47a3090da318cd1 /source/lib
parent7c69b092d3ebe34912f2bb50c64d44f77db435af (diff)
downloadsamba-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.c16
-rw-r--r--source/lib/util_str.c15
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)