diff options
author | ed <ed@FreeBSD.org> | 2010-01-20 23:53:24 +0800 |
---|---|---|
committer | ed <ed@FreeBSD.org> | 2010-01-20 23:53:24 +0800 |
commit | a96060982c64457a6562695a6e0c59f849f1a1e1 (patch) | |
tree | 6e7b823a3351b323391fd1959d4c5c13970982e3 /security | |
parent | 5eab22927cbd85abd98bead2414bf267de9b7e6b (diff) | |
download | freebsd-ports-gnome-a96060982c64457a6562695a6e0c59f849f1a1e1.tar.gz freebsd-ports-gnome-a96060982c64457a6562695a6e0c59f849f1a1e1.tar.zst freebsd-ports-gnome-a96060982c64457a6562695a6e0c59f849f1a1e1.zip |
Make slush build when using utmpx.
Approved by: miwi (portmgr, implicit)
Diffstat (limited to 'security')
-rw-r--r-- | security/slush/files/patch-ac | 230 |
1 files changed, 113 insertions, 117 deletions
diff --git a/security/slush/files/patch-ac b/security/slush/files/patch-ac index 9ebcb844f771..c1f97deabe00 100644 --- a/security/slush/files/patch-ac +++ b/security/slush/files/patch-ac @@ -1,117 +1,113 @@ -*** slushd.c- Mon Oct 27 06:19:54 2003 ---- slushd.c Mon Oct 27 06:22:02 2003 -*************** -*** 40,46 **** ---- 40,50 ---- - #include <ctype.h> - #include <stdlib.h> - #include <netdb.h> -+ #include <sys/param.h> -+ #if __FreeBSD_version >= 500000 - #include <getopt.h> -+ #endif -+ #include <libutil.h> - #include <pwd.h> - #include <grp.h> - #include <fcntl.h> -*************** -*** 51,56 **** ---- 55,61 ---- - #include <sys/stat.h> - #include <sys/ioctl.h> - #include <sys/file.h> -+ - #ifdef HAVE_UNISTD_H - #include <unistd.h> /* fork, execvp, exit */ - #endif -*************** -*** 654,711 **** - void log_uwtmp(struct passwd *pw, struct in_addr *i, char *tty, int is_logout) - { - struct utmp ut; -- int wtmp; -- int lock; - - tty = strrchr(tty, '/'); - if (tty == NULL) - { - syslog(LOG_ERR, "Can't determine basename of tty"); -! exit(3); - } - tty++; - -- utmpname(_PATH_UTMP); -- setutent(); -- memset(&ut, 0, sizeof(ut)); - -! if (ut.ut_id[0] == 0) -! strncpy(ut.ut_id, tty + 3, sizeof(ut.ut_id)); - -- if (!is_logout) -- strncpy(ut.ut_user, pw->pw_name, sizeof(ut.ut_user)); -- - strncpy(ut.ut_line, tty, sizeof(ut.ut_line) - 1); -! ut.ut_line[sizeof(ut.ut_line) - 1] = 0; -! -! ut.ut_time = time(NULL); -! ut.ut_type = is_logout?DEAD_PROCESS:USER_PROCESS; -! ut.ut_pid = getpid(); - -- strncpy(ut.ut_host, hostname, sizeof(ut.ut_host) - 1); -- ut.ut_host[sizeof(ut.ut_host) - 1] = 0; - -! memcpy(&ut.ut_addr, i, sizeof(ut.ut_addr)); -! -! pututline(&ut); -! endutent(); -! -! lock = open(_PATH_WTMPLOCK, O_CREAT|O_WRONLY, 0660); -! if (lock == -1) -! ioerror("open"); -! -! if (flock(lock, LOCK_EX) == -1) -! ioerror("flock"); -! -! wtmp = open(_PATH_WTMP, O_APPEND|O_WRONLY); -! if (wtmp == -1) -! ioerror("open"); -! -! write(wtmp, (char *)&ut, sizeof(ut)); -! close(wtmp); -! -! flock(lock, LOCK_UN); -! close(lock); - } - - /* Retrieve client X509 certificate and test authentication */ ---- 659,688 ---- - void log_uwtmp(struct passwd *pw, struct in_addr *i, char *tty, int is_logout) - { - struct utmp ut; - - tty = strrchr(tty, '/'); - if (tty == NULL) - { - syslog(LOG_ERR, "Can't determine basename of tty"); -! return; - } - tty++; -+ - - -! if(is_logout) { -! logout(tty); -! return; -! } - - strncpy(ut.ut_line, tty, sizeof(ut.ut_line) - 1); -! strncpy(ut.ut_name, pw->pw_name, sizeof(ut.ut_name)-1); -! strncpy(ut.ut_host, inet_ntoa(*i), sizeof(ut.ut_host) - 1); -! ut.ut_time = time(0); -! login(&ut); - - -! return; - } - - /* Retrieve client X509 certificate and test authentication */ +--- slushd.c ++++ slushd.c +@@ -40,11 +40,19 @@ + #include <ctype.h> + #include <stdlib.h> + #include <netdb.h> ++#include <sys/param.h> ++#if __FreeBSD_version >= 500000 + #include <getopt.h> ++#endif + #include <pwd.h> + #include <grp.h> + #include <fcntl.h> ++#if __FreeBSD_version >= 900007 ++#include <utmpx.h> ++#else + #include <utmp.h> ++#include <libutil.h> ++#endif + #include <limits.h> + #include <paths.h> + #include <sys/types.h> +@@ -653,59 +661,42 @@ + /* exits on error */ + void log_uwtmp(struct passwd *pw, struct in_addr *i, char *tty, int is_logout) + { +- struct utmp ut; +- int wtmp; +- int lock; +- +- tty = strrchr(tty, '/'); +- if (tty == NULL) +- { +- syslog(LOG_ERR, "Can't determine basename of tty"); +- exit(3); +- } +- tty++; +- +- utmpname(_PATH_UTMP); +- setutent(); +- memset(&ut, 0, sizeof(ut)); ++#if __FreeBSD_version >= 900007 ++ struct utmpx ut; + +- if (ut.ut_id[0] == 0) +- strncpy(ut.ut_id, tty + 3, sizeof(ut.ut_id)); ++ if (strncmp(tty, "/dev/", 5) == 0) ++ tty += 5; + +- if (!is_logout) +- strncpy(ut.ut_user, pw->pw_name, sizeof(ut.ut_user)); +- +- strncpy(ut.ut_line, tty, sizeof(ut.ut_line) - 1); +- ut.ut_line[sizeof(ut.ut_line) - 1] = 0; +- +- ut.ut_time = time(NULL); +- ut.ut_type = is_logout?DEAD_PROCESS:USER_PROCESS; +- ut.ut_pid = getpid(); +- +- strncpy(ut.ut_host, hostname, sizeof(ut.ut_host) - 1); +- ut.ut_host[sizeof(ut.ut_host) - 1] = 0; +- +- memcpy(&ut.ut_addr, i, sizeof(ut.ut_addr)); ++ memset(&ut, 0, sizeof ut); ++ gettimeofday(&ut.ut_tv, NULL); ++ strncpy(ut.ut_id, tty, sizeof ut.ut_id); ++ ++ if (is_logout) { ++ ut.ut_type = DEAD_PROCESS; ++ } else { ++ ut.ut_type = USER_PROCESS; ++ strncpy(ut.ut_line, tty, sizeof ut.ut_line); ++ strncpy(ut.ut_user, pw->pw_name, sizeof ut.ut_user); ++ strncpy(ut.ut_host, inet_ntoa(*i), sizeof ut.ut_host); ++ } ++ pututxline(&ut); ++#else ++ struct utmp ut; + +- pututline(&ut); +- endutent(); ++ if (strncmp(tty, "/dev/", 5) == 0) ++ tty += 5; + +- lock = open(_PATH_WTMPLOCK, O_CREAT|O_WRONLY, 0660); +- if (lock == -1) +- ioerror("open"); +- +- if (flock(lock, LOCK_EX) == -1) +- ioerror("flock"); +- +- wtmp = open(_PATH_WTMP, O_APPEND|O_WRONLY); +- if (wtmp == -1) +- ioerror("open"); +- +- write(wtmp, (char *)&ut, sizeof(ut)); +- close(wtmp); ++ if (is_logout) { ++ logout(tty); ++ return; ++ } + +- flock(lock, LOCK_UN); +- close(lock); ++ strncpy(ut.ut_line, tty, sizeof ut.ut_line); ++ strncpy(ut.ut_name, pw->pw_name, sizeof ut.ut_name); ++ strncpy(ut.ut_host, inet_ntoa(*i), sizeof ut.ut_host); ++ ut.ut_time = time(0); ++ login(&ut); ++#endif + } + + /* Retrieve client X509 certificate and test authentication */ |