Mercurial > hg > mlmmj
changeset 158:cb0bc373e796
3 things:
· Check that bouncefile is not a symlink (TODO)
· When everything went ok, return EXIT_SUCCES not EXIT_FAILURE
· If there's a bouncemail, save it as bfilename.lastmsg
And in more readable form:
--- mlmmj-bounce.c 26 May 2004 23:25:57 -0000 1.7
+++ mlmmj-bounce.c 3 Jun 2004 06:30:39 -0000
@@ -37,16 +37,16 @@
int main(int argc, char **argv)
{
- int opt;
+ int opt, fd;
char *listdir = NULL, *address = NULL, *number = NULL;
- char *bfilename, *a, *buf;
+ char *mailname = NULL, *savename, *bfilename, *a, *buf;
size_t len;
- int fd;
time_t t;
+ struct stat st;
log_set_name(argv[0]);
- while ((opt = getopt(argc, argv, "hVL:a:n:")) != -1) {
+ while ((opt = getopt(argc, argv, "hVL:a:n:m:")) != -1) {
switch(opt) {
case 'L':
listdir = optarg;
@@ -54,6 +54,9 @@
case 'a':
address = optarg;
break;
+ case 'm':
+ mailname = optarg;
+ break;
case 'n':
number = optarg;
break;
@@ -109,7 +112,14 @@
exit(EXIT_SUCCESS); /* Not subbed, so exit silently */
}
- /* TODO make sure the file we open below is not a symlink */
+ if(lstat(bfilename, &st) == 0) {
+ if((st.st_mode & S_IFLNK) == S_IFLNK) {
+ log_error(LOG_ARGS, "%s is a symbolic link",
+ bfilename);
+ exit(EXIT_FAILURE);
+ }
+ }
+
if ((fd = open(bfilename, O_WRONLY|O_APPEND|O_CREAT,
S_IRUSR|S_IWUSR)) < 0) {
log_error(LOG_ARGS, "Could not open '%s'", bfilename);
@@ -136,5 +146,11 @@
writen(fd, buf, strlen(buf));
close(fd);
- return EXIT_FAILURE;
+ if(mailname) {
+ savename = concatstr(2, bfilename, ".lastmsg");
+ rename(mailname, savename);
+ free(savename);
+ }
+
+ return EXIT_SUCCESS;
}
author | mmj |
---|---|
date | Thu, 03 Jun 2004 16:34:36 +1000 |
parents | af54da533809 |
children | 8a8bb6d5567b |
files | src/mlmmj-bounce.c |
diffstat | 1 files changed, 22 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/mlmmj-bounce.c Thu Jun 03 08:57:45 2004 +1000 +++ b/src/mlmmj-bounce.c Thu Jun 03 16:34:36 2004 +1000 @@ -37,16 +37,16 @@ int main(int argc, char **argv) { - int opt; + int opt, fd; char *listdir = NULL, *address = NULL, *number = NULL; - char *bfilename, *a, *buf; + char *mailname = NULL, *savename, *bfilename, *a, *buf; size_t len; - int fd; time_t t; + struct stat st; log_set_name(argv[0]); - while ((opt = getopt(argc, argv, "hVL:a:n:")) != -1) { + while ((opt = getopt(argc, argv, "hVL:a:n:m:")) != -1) { switch(opt) { case 'L': listdir = optarg; @@ -54,6 +54,9 @@ case 'a': address = optarg; break; + case 'm': + mailname = optarg; + break; case 'n': number = optarg; break; @@ -109,7 +112,14 @@ exit(EXIT_SUCCESS); /* Not subbed, so exit silently */ } - /* TODO make sure the file we open below is not a symlink */ + if(lstat(bfilename, &st) == 0) { + if((st.st_mode & S_IFLNK) == S_IFLNK) { + log_error(LOG_ARGS, "%s is a symbolic link", + bfilename); + exit(EXIT_FAILURE); + } + } + if ((fd = open(bfilename, O_WRONLY|O_APPEND|O_CREAT, S_IRUSR|S_IWUSR)) < 0) { log_error(LOG_ARGS, "Could not open '%s'", bfilename); @@ -136,5 +146,11 @@ writen(fd, buf, strlen(buf)); close(fd); - return EXIT_FAILURE; + if(mailname) { + savename = concatstr(2, bfilename, ".lastmsg"); + rename(mailname, savename); + free(savename); } + + return EXIT_SUCCESS; +}