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;
+}