X-Git-Url: http://git.pld-linux.org/?a=blobdiff_plain;f=proftpd-wtmp.patch;h=fb84cbd7496c6efc72c47335826d6474e88fce35;hb=refs%2Ftags%2Fauto%2Fth%2Fproftpd-1.3.5b-1;hp=b21ebeb7402089e7109ffc7d5c25ddcd232cf5b9;hpb=4356f565018fc211f5fdcb68e992e9d367c93fdf;p=packages%2Fproftpd.git diff --git a/proftpd-wtmp.patch b/proftpd-wtmp.patch index b21ebeb..fb84cbd 100644 --- a/proftpd-wtmp.patch +++ b/proftpd-wtmp.patch @@ -1,91 +1,39 @@ -diff -ur proftpd-1.2.0rc2.orig/src/log.c proftpd-1.2.0rc2/src/log.c ---- proftpd-1.2.0rc2.orig/src/log.c Wed Jul 26 13:03:17 2000 -+++ proftpd-1.2.0rc2/src/log.c Wed Aug 9 17:14:50 2000 -@@ -31,6 +31,9 @@ - * Also added a command line argument (-d,--debug) to alter the - * debug level at runtime. See main.c. - */ -+#ifdef __linux__ -+#define __USE_GNU +diff -ruNp proftpd-1.3.5.orig/src/wtmp.c proftpd-1.3.5/src/wtmp.c +--- proftpd-1.3.5.orig/src/wtmp.c 2013-12-09 20:16:15.000000000 +0100 ++++ proftpd-1.3.5/src/wtmp.c 2015-04-03 11:47:21.710554599 +0200 +@@ -136,11 +136,33 @@ int log_wtmp(const char *line, const cha + struct utmp ut; + static int fd = -1; + ++#if defined(HAVE_UTMPX_H) ++#if !defined(WTMPX_FILE) && defined(_PATH_WTMPX) ++# define WTMPX_FILE _PATH_WTMPX +#endif - - #include "conf.h" - -@@ -529,21 +532,11 @@ - - int log_wtmp(char *line, char *name, char *host, p_in_addr_t *ip) - { -- struct stat buf; -- struct utmp ut; - int res = 0; -- static int fd = -1; - --#if defined(SVR4) || defined(__SVR4) --#if !(defined(LINUX) || defined(__hpux) || defined (_AIX)) -+#ifdef HAVE_UTMPX_H - /* This "auxilliary" utmp doesn't exist under linux. */ - struct utmpx utx; -- static int fdx = -1; -- -- if(fdx < 0 && (fdx = open(WTMPX_FILE, O_WRONLY | O_APPEND, 0)) < 0) { -- log_pri(LOG_WARNING,"wtmpx %s: %s",WTMPX_FILE,strerror(errno)); -- return -1; -- } - - /* Unfortunately, utmp string fields are terminated by '\0' if they are - * shorter than the size of the field, but if they are exactly the size of -@@ -551,13 +544,11 @@ - * Insane if you ask me. Unless there's massive uproar, I prefer to err on - * the side of caution and always null-terminate our strings. - */ -- if(fstat(fdx,&buf) == 0) { - memset(&utx,0,sizeof(utx)); - sstrncpy(utx.ut_user,name,sizeof(utx.ut_user)); - sstrncpy(utx.ut_id,"ftp",sizeof(utx.ut_user)); - sstrncpy(utx.ut_line,line,sizeof(utx.ut_line)); - sstrncpy(utx.ut_host,host,sizeof(utx.ut_host)); -- utx.ut_syslen = strlen(utx.ut_host)+1; - utx.ut_pid = getpid(); - time(&utx.ut_tv.tv_sec); - if(*name) -@@ -566,22 +557,11 @@ - utx.ut_type = DEAD_PROCESS; - utx.ut_exit.e_termination = 0; - utx.ut_exit.e_exit = 0; -- if(write(fdx,(char*)&utx,sizeof(utx)) != sizeof(utx)) -- ftruncate(fdx, buf.st_size); -- } else { -- log_debug(DEBUG0,"%s fstat(): %s",WTMPX_FILE,strerror(errno)); -- res = -1; -- } -+ updwtmpx(_PATH_WTMP, &utx); - --#endif --#endif /* SVR4 */ ++ static char *wtmp_file = NULL; ++ if (wtmp_file == NULL) { ++ if (access(WTMPX_FILE"x", F_OK) == 0) ++ wtmp_file = WTMPX_FILE"x"; ++ else if (access(WTMPX_FILE, F_OK) == 0) ++ wtmp_file = WTMPX_FILE; ++ else if (access(WTMP_FILE"x", F_OK) == 0) ++ wtmp_file = WTMP_FILE"x"; ++ else if (access(WTMP_FILE, F_OK) == 0) ++ wtmp_file = WTMP_FILE; ++ else { ++ pr_log_pri(PR_LOG_WARNING, "cannot find "WTMPX_FILE); ++ return -1; ++ } ++ } +#else -+ struct utmp ut; - -- if(fd < 0 && (fd = open(WTMP_FILE,O_WRONLY|O_APPEND,0)) < 0) { -- log_pri(LOG_WARNING,"wtmp %s: %s",WTMP_FILE,strerror(errno)); -- return -1; -- } -- -- if(fstat(fd,&buf) == 0) { - memset(&ut,0,sizeof(ut)); - #ifdef HAVE_UTMAXTYPE - #ifdef LINUX -@@ -612,12 +592,8 @@ - #endif /* HAVE_UT_UT_HOST */ - - time(&ut.ut_time); -- if(write(fd,(char*)&ut,sizeof(ut)) != sizeof(ut)) -- ftruncate(fd,buf.st_size); -- } else { -- log_debug(DEBUG0,"%s fstat(): %s",WTMP_FILE,strerror(errno)); -- res = -1; -- } -+ updwtmp(_PATH_WTMP, &ut); ++ static char *wtmp_file = WTMP_FILE; +#endif + if (fd < 0 && +- (fd = open(WTMP_FILE, O_WRONLY|O_APPEND, 0)) < 0) { ++ (fd = open(wtmp_file, O_WRONLY|O_APPEND, 0)) < 0) { + int xerrno = errno; + +- pr_log_pri(PR_LOG_WARNING, "failed to open wtmp %s: %s", WTMP_FILE, ++ pr_log_pri(PR_LOG_WARNING, "failed to open wtmp %s: %s", wtmp_file, + strerror(xerrno)); - return res; - } + errno = xerrno;