diff options
author | Jelmer Vernooij <jelmer@samba.org> | 2003-03-20 16:44:14 +0000 |
---|---|---|
committer | Jelmer Vernooij <jelmer@samba.org> | 2003-03-20 16:44:14 +0000 |
commit | 0b72dd8325bc5c78de56039942acc175d28042a7 (patch) | |
tree | 7a3fb31a07cad1d29684aa54132f2ff37b240b24 /source3/smbd | |
parent | efadbacb9abde371dfb3f19c9f9f69539ec1dc34 (diff) | |
download | samba-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.c | 27 |
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); |