

![]() | Start a set with this search |
![]() | Include this search in one of my sets |
![]() | Exclude this search from one of my sets |
![]() | Permalink to these results Paste this link in email or IM: |
| Atom feed for tracking future search results Paste this URL into your reader: |
5 messages in net.sourceforge.lists.courier-usersRe: [courier-users] sqwebmail and .ma...| From | Sent On | Attachments |
|---|---|---|
| Mark Constable | May 29, 2005 3:23 am | |
| Sam Varshavchik | May 29, 2005 5:24 am | |
| Mark Constable | May 29, 2005 5:59 am | |
| Sam Varshavchik | May 29, 2005 8:11 am | |
| Mark Constable | May 29, 2005 9:58 pm |

![]() | Permalink for this message Paste this link in email or IM: |
![]() | Permalink for this thread Paste this link in email or IM: |
| Atom feed for this thread Paste this URL into your reader: |
| Subject: | Re: [courier-users] sqwebmail and .mailfilters | Actions... |
|---|---|---|
| From: | Mark Constable (mar...@renta.net) | |
| Date: | May 29, 2005 9:58:38 pm | |
| List: | net.sourceforge.lists.courier-users | |
On Monday 30 May 2005 01:11, Sam Varshavchik wrote:
ERROR: Unable to save rule - contact system administrator
when doing a "Save All Changes". These perms look okay to me so is there something else I am (probably) missing ?
I can't find this error message anywhere in my source code.
courier 0.47, which is apparently a bit old now... could anyone suggest the most likely place this is failing? I posted my $HOME perms in a previous message and they look fine to me, everything is daemon:daemon inc mail and apache, and the temp file gets saved okay, just not ../.mailfilter.
-rw------- 1 daemon daemon 326 May 30 14:46 maildirfilter.tmp
I can't imagine the binary having to be SUID ?
-rwxr-xr-x 1 root root 7360 Jan 27 08:31 sqwebmail
webmail/html/en-us/filter.html:
[#$INTERNAL=<span style="color: #ee0000">ERROR: Unable to save rule - contact
system administrator</span><br />#]
webmail/mailfilter.c: if (*cgi("do.save")) { if (maildir_filter_exportmaildirfilter(".") || maildir_filter_importmaildirfilter(".")) printf("%s", getarg("INTERNAL")); else printf("%s", getarg("UPDATED")); clrfields(); }
/etc/courier/maildirfilterconfig: MAILDIRFILTER=$HOME/.mailfilter
maildir/maildirfilter2.c:
int maildir_filter_exportmaildirfilter(const char *maildir) { char *maildirfilter=maildir_filter_config_maildirfilter(maildir); char *newname; int rc;
if (!maildirfilter) return (-1);
newname=malloc(strlen(maildir)+sizeof("/maildirfilter.tmp")); if (!newname) { free(maildirfilter); return (-1); }
strcat(strcpy(newname, maildir), "/maildirfilter.tmp"); rc=rename(newname, maildirfilter); free(maildirfilter); free(newname); return (rc); }
int maildir_filter_importmaildirfilter(const char *maildir) { const char *p=maildir_filter_config(maildir, "MAILDIRFILTER"); char *maildirfilter; FILE *i, *o; struct maildir_tmpcreate_info createInfo;
if (!p) return (-1);
if (!*p) { errno=ENOENT; return (-1); }
maildirfilter=maildir_filter_config_maildirfilter(maildir); if (!maildirfilter) return (-1);
maildir_tmpcreate_init(&createInfo);
createInfo.maildir=maildir; createInfo.uniq="maildirfilter-tmp"; createInfo.doordie=1;
if ((o=maildir_tmpcreate_fp(&createInfo)) == NULL) { free(maildirfilter); return (-1); }
strcat(strcpy(createInfo.newname, maildir), "/maildirfilter.tmp"); /* We enough we have enough mem: .uniq */
if ((i=fopen(maildirfilter, "r")) == 0) { struct maildirfilter mf;
if (errno != ENOENT) { fclose(o); unlink(createInfo.tmpname); maildir_tmpcreate_free(&createInfo); free(maildirfilter); return (-1); }
memset(&mf, 0, sizeof(mf)); fclose(o); unlink(createInfo.tmpname); unlink(createInfo.newname); maildir_filter_savemaildirfilter(&mf, maildir, ""); /* write out a blank one */ } else { char buf[BUFSIZ]; int n;
while ((n=fread(buf, 1, sizeof(buf), i)) > 0) if (fwrite(buf, 1, n, o) != n) { fclose(o); fclose(i); unlink(createInfo.tmpname); maildir_tmpcreate_free(&createInfo); free(maildirfilter); return (-1); } if (fflush(o)) { fclose(o); fclose(i); unlink(createInfo.tmpname); maildir_tmpcreate_free(&createInfo); free(maildirfilter); return (-1); } fclose(o); fclose(i); if (chmod(createInfo.tmpname, 0600) || rename(createInfo.tmpname, createInfo.newname)) { unlink(createInfo.tmpname); maildir_tmpcreate_free(&createInfo); free(maildirfilter); return (-1); } }
maildir_tmpcreate_free(&createInfo); free(maildirfilter); return (0); }
--markc







