summaryrefslogtreecommitdiff
path: root/source3/smbd/message.c
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>1996-10-04 09:31:07 +0000
committerAndrew Tridgell <tridge@samba.org>1996-10-04 09:31:07 +0000
commite23f2b9cef8428bda51b413642d9720ba5c590d5 (patch)
treeda1eb0426445f4d2f2d5304f6b8969074c711998 /source3/smbd/message.c
parentf60dec78f993721c31d1650a0710a1a790efd76a (diff)
downloadsamba-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.c28
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;