diff options
author | Andrew Tridgell <tridge@samba.org> | 1996-10-04 09:31:07 +0000 |
---|---|---|
committer | Andrew Tridgell <tridge@samba.org> | 1996-10-04 09:31:07 +0000 |
commit | e23f2b9cef8428bda51b413642d9720ba5c590d5 (patch) | |
tree | da1eb0426445f4d2f2d5304f6b8969074c711998 /source3/smbd/message.c | |
parent | f60dec78f993721c31d1650a0710a1a790efd76a (diff) | |
download | samba-e23f2b9cef8428bda51b413642d9720ba5c590d5.tar.gz samba-e23f2b9cef8428bda51b413642d9720ba5c590d5.tar.bz2 samba-e23f2b9cef8428bda51b413642d9720ba5c590d5.zip |
- changed the umask handling. We now set the umask to 0 and explicitly
set the mode on all created files. I think this is a better policy.
- change the debug levels on some items
- fix a charset handling bug which affected foreign and extended
charset users
- no longer switch back to the original directory when idle, instead
switch to / as the original directory may not be readable by ordinary
users.
- fix some bugs where the create mode of files was not being
explicitly set (it was relying on the umask and using fopen). Not a
big bug as it only affected obscure commands like the messaging ops.
- got rid of the lock code in the lpq cache as its no longer needed
- rewrote smbrun to be faster and to remove the security hole. We now
don't actually need a external smbrun binary, its all done by smbd.
- add a more explicit warning about uids and gids of -1 or 65535
(This used to be commit 5aa735c940ccdb6acae5f28449d484181c912e49)
Diffstat (limited to 'source3/smbd/message.c')
-rw-r--r-- | source3/smbd/message.c | 28 |
1 files changed, 13 insertions, 15 deletions
diff --git a/source3/smbd/message.c b/source3/smbd/message.c index b26a6605ed..22523aad3b 100644 --- a/source3/smbd/message.c +++ b/source3/smbd/message.c @@ -42,8 +42,8 @@ static void msg_deliver(void) { pstring s; fstring name; - FILE *f; int i; + int fd; if (! (*lp_msg_command())) { @@ -56,21 +56,19 @@ static void msg_deliver(void) sprintf(s,"/tmp/msg.XXXXXX"); strcpy(name,(char *)mktemp(s)); - f = fopen(name,"w"); - if (!f) - { - DEBUG(1,("can't open message file %s\n",name)); - return; - } + fd = open(name,O_WRONLY|O_CREAT|O_TRUNC|O_EXCL,0600); + if (fd == -1) { + DEBUG(1,("can't open message file %s\n",name)); + return; + } - for (i=0;i<msgpos;) - { - if (msgbuf[i]=='\r' && i<(msgpos-1) && msgbuf[i+1]=='\n') - i++; - fputc(msgbuf[i++],f); + for (i=0;i<msgpos;) { + if (msgbuf[i]=='\r' && i<(msgpos-1) && msgbuf[i+1]=='\n') { + i++; continue; } - - fclose(f); + write(fd,&msgbuf[i++],1); + } + close(fd); /* run the command */ @@ -81,7 +79,7 @@ static void msg_deliver(void) string_sub(s,"%f",msgfrom); string_sub(s,"%t",msgto); standard_sub(-1,s); - smbrun(s,NULL); + smbrun(s,NULL,False); } msgpos = 0; |