summaryrefslogtreecommitdiffstats
path: root/source3/smbd
diff options
context:
space:
mode:
authorJelmer Vernooij <jelmer@samba.org>2003-03-20 16:44:14 +0000
committerJelmer Vernooij <jelmer@samba.org>2003-03-20 16:44:14 +0000
commit0b72dd8325bc5c78de56039942acc175d28042a7 (patch)
tree7a3fb31a07cad1d29684aa54132f2ff37b240b24 /source3/smbd
parentefadbacb9abde371dfb3f19c9f9f69539ec1dc34 (diff)
downloadsamba-0b72dd8325bc5c78de56039942acc175d28042a7.tar.gz
samba-0b72dd8325bc5c78de56039942acc175d28042a7.tar.xz
samba-0b72dd8325bc5c78de56039942acc175d28042a7.zip
Patch from Samuel Thibault to convert messages from dos to unix charset
when sending(and vice versa when receiving). (This used to be commit 5310447ec6e0df1c000e3ee14572f5b7fee31f28)
Diffstat (limited to 'source3/smbd')
-rw-r--r--source3/smbd/message.c27
1 files changed, 18 insertions, 9 deletions
diff --git a/source3/smbd/message.c b/source3/smbd/message.c
index ba646f12aa0..233848d2d61 100644
--- a/source3/smbd/message.c
+++ b/source3/smbd/message.c
@@ -41,6 +41,8 @@ static void msg_deliver(void)
pstring name;
int i;
int fd;
+ char *msg;
+ int len;
if (! (*lp_msg_command()))
{
@@ -61,16 +63,23 @@ static void msg_deliver(void)
/*
* Incoming message is in DOS codepage format. Convert to UNIX.
*/
-
- if(msgpos > 0) {
- msgbuf[msgpos] = '\0'; /* Ensure null terminated. */
- }
-
- for (i=0;i<msgpos;) {
- if (msgbuf[i]=='\r' && i<(msgpos-1) && msgbuf[i+1]=='\n') {
- i++; continue;
+
+ if ((len = convert_string_allocate(CH_DOS, CH_UNIX, msgbuf, msgpos, (void **) &msg)) < 0 || !msg) {
+ DEBUG(3,("Conversion failed, delivering message in DOS codepage format\n"));
+ for (i = 0; i < msgpos;) {
+ if (msgbuf[i] == '\r' && i < (msgpos-1) && msgbuf[i+1] == '\n') {
+ i++; continue;
+ }
+ write(fd, &msgbuf[i++], 1);
+ }
+ } else {
+ for (i = 0; i < len;) {
+ if (msg[i] == '\r' && i < (len-1) && msg[i+1] == '\n') {
+ i++; continue;
+ }
+ write(fd, &msg[i++],1);
}
- write(fd,&msgbuf[i++],1);
+ SAFE_FREE(msg);
}
close(fd);