openbsd-ports/mail/akpop3d/patches/patch-pop3_session_c
naddy 8e5db79efa Import akpop3d 0.7.7.
Submitted by Maxime Guillaud <bsd-ports@mguillaud.net>.

akpop3d is a POP3 daemon aimed to be small and secure.  It is
stand-alone, very small, easy to modify.  Despite its small size, it
offers a lot of features.
2004-11-08 21:57:05 +00:00

110 lines
3.5 KiB
Plaintext

$OpenBSD: patch-pop3_session_c,v 1.1.1.1 2004/11/08 21:57:05 naddy Exp $
--- pop3_session.c.orig Sun Aug 17 19:44:55 2003
+++ pop3_session.c Fri Aug 27 01:45:07 2004
@@ -35,6 +35,7 @@
extern const char * ssl_certfile;
extern const char * ssl_keyfile;
+extern const char * group_name;
extern const char * local_mbox;
extern char real_username[MAXLINE+1];
extern char real_maildrop[MAXLINE+1];
@@ -45,8 +46,17 @@ extern const char * mailspool;
int authenticate(char * username, char * password);
void show_uidl(int fd, char * line);
-static void do_remove_lock(void) {
+static void do_remove_lock(int fd) {
do_cleanup();
+ if (remove_lock(mdl)) {
+ syslog(LOG_ERR,"unable to unlink lock file %s : %m",mdl);
+ write_line(fd,"unable to unlink lock file - see syslog\r\n");
+ exit(EXIT_FAILURE);
+ }
+}
+
+static void cleanup_before_exit(void) {
+ do_cleanup();
remove_lock(mdl);
}
@@ -64,8 +74,9 @@ static void print_capa(int fd) {
static void sig_handler(int signo) {
- remove_lock(mdl);
syslog(LOG_INFO,"%s: %u", "caught signal",signo);
+ if (remove_lock(mdl))
+ syslog(LOG_ERR,"unable to unlink lock file for user %s : %m",mdl);
exit(EXIT_FAILURE);
}
@@ -227,21 +238,21 @@ void pop3_session(int fd) {
mdl = maildrop;
- g_inf = getgrnam("mail");
+ g_inf = getgrnam(group_name);
if (g_inf==NULL) {
- syslog(LOG_ERR,"%s","group 'mail' not found");
- write_line(fd,"-ERR [SYS/TEMP] group 'mail' not found\r\n");
+ syslog(LOG_ERR,"group '%s' not found",group_name);
+ write_line(fd,"-ERR [SYS/TEMP] group not found\r\n");
exit(EXIT_FAILURE);
}
if (setegid(g_inf->gr_gid)!=0 && real_username[0] == 0) {
syslog(LOG_ERR,"%s: %u: %s","setegid() failed",g_inf->gr_gid,strerror(errno));
- write_line(fd,"-ERR [SYS/TEMP] failed to join 'mail' group (setegid)\r\n");
+ write_line(fd,"-ERR [SYS/TEMP] failed to join group (setegid)\r\n");
exit(EXIT_FAILURE);
}
if (setgid(g_inf->gr_gid)!=0 && real_username[0] == 0) {
syslog(LOG_ERR,"%s: %u: %s","setgid() failed",g_inf->gr_gid,strerror(errno));
- write_line(fd,"-ERR [SYS/TEMP] failed to join 'mail' group (setgid)\r\n");
+ write_line(fd,"-ERR [SYS/TEMP] failed to join group (setgid)\r\n");
exit(EXIT_FAILURE);
}
@@ -258,18 +269,18 @@ void pop3_session(int fd) {
if (setuid(u_inf->pw_uid)!=0) {
syslog(LOG_ERR,"%s: %u: %s","setuid() failed",u_inf->pw_uid,strerror(errno));
write_line(fd,"-ERR [SYS/TEMP] failed to set user identity\r\n");
- do_remove_lock();
+ do_remove_lock(fd);
exit(EXIT_FAILURE);
}
if (seteuid(u_inf->pw_uid)!=0) {
syslog(LOG_ERR,"%s: %u: %s","seteuid() failed",u_inf->pw_uid,strerror(errno));
write_line(fd,"-ERR [SYS/TEMP] failed to set effective user identity\r\n");
- do_remove_lock();
+ do_remove_lock(fd);
exit(EXIT_FAILURE);
}
- if (atexit(do_remove_lock)!=0) {
+ if (atexit(cleanup_before_exit)!=0) {
syslog(LOG_WARNING,"%s: %s","atexit() failed; lock files may fail to expire",strerror(errno));
}
@@ -278,7 +289,7 @@ void pop3_session(int fd) {
if (process_mails(maildrop)==0) {
write_line(fd,"-ERR [SYS/PERM] failed to scan maildrop contents\r\n");
do_cleanup();
- do_remove_lock();
+ do_remove_lock(fd);
exit(EXIT_FAILURE);
}
@@ -334,5 +345,8 @@ void pop3_session(int fd) {
do_update(maildrop);
}
do_cleanup();
- remove_lock(maildrop);
+ if (remove_lock(maildrop)) {
+ syslog(LOG_ERR,"unable to unlink lock file %s : %m",maildrop);
+ exit(EXIT_FAILURE);
+ }
}