aboutsummaryrefslogtreecommitdiff
path: root/korean/han/files/patch-ag
diff options
context:
space:
mode:
Diffstat (limited to 'korean/han/files/patch-ag')
-rw-r--r--korean/han/files/patch-ag103
1 files changed, 103 insertions, 0 deletions
diff --git a/korean/han/files/patch-ag b/korean/han/files/patch-ag
new file mode 100644
index 000000000000..66ac5d73c41c
--- /dev/null
+++ b/korean/han/files/patch-ag
@@ -0,0 +1,103 @@
+--- src/utmp.c.orig Fri Jan 24 09:37:28 1997
++++ src/utmp.c Sat Apr 26 21:50:30 1997
+@@ -41,20 +41,32 @@
+ #include <utmp.h>
+ #include <grp.h>
+ #include <sys/stat.h>
++#if defined(__FreeBSD__)
++#include <ttyent.h>
++#endif
+
++#if !defined(__FreeBSD__)
+ static int ttyGid;
++#else
++static gid_t ttyGid;
++static int ts;
++#endif
+
+ void SetUtmp(char *tty)
+ {
+-#ifdef linux
+ struct utmp utmp;
+ struct passwd *pw;
+ struct group *ttygrp;
+ char *tn;
++#if defined(__FreeBSD__)
++ struct ttyent *ttyp;
++ int fd, i;
++#endif
+
+ pw = getpwuid(getuid());
+ tn = rindex(tty, '/') + 1;
+ memset((char *)&utmp, 0, sizeof(utmp));
++#if !defined(__FreeBSD__)
+ strncpy(utmp.ut_id, tn + 3, sizeof(utmp.ut_id));
+ utmp.ut_type = DEAD_PROCESS;
+ setutent();
+@@ -66,21 +78,43 @@
+ time(&(utmp.ut_time));
+ pututline(&utmp);
+ endutent();
++#else
++ time(&(utmp.ut_time));
++ strncpy(utmp.ut_name, pw->pw_name, sizeof(utmp.ut_name));
++ strncpy(utmp.ut_line, tn, sizeof(utmp.ut_line));
++ setttyent();
++ ts = 0;
++ for (i = 1; (ttyp = getttyent()); ++i)
++ if (!strcmp(ttyp->ty_name,tn)) {
++ ts = i;
++ break;
++ }
++ endttyent();
++ if (ts > 0 && (fd = open(_PATH_UTMP, O_WRONLY|O_CREAT, 0644)) >= 0) {
++ lseek(fd, (ts*sizeof(struct utmp)), L_SET);
++ write(fd, &utmp, sizeof(struct utmp));
++ close(fd);
++ }
++#endif
+ if ((ttygrp = getgrnam("tty")) != NULL)
+ ttyGid = ttygrp->gr_gid;
+ else
+ ttyGid = -1;
+ chmod(tty, 0622);
+ chown(tty, getuid(), ttyGid);
+-#endif
+ }
+
+ void ResetUtmp(char *tty)
+ {
+-#ifdef linux
++#if !defined(__FreeBSD__)
+ struct utmp utmp, *utp;
+ char *tn;
++#else
++ struct utmp utmp;
++ int fd;
++#endif
+
++#if !defined(__FreeBSD__)
+ tn = rindex(tty, '/') + 4;
+ memset((char *)&utmp, 0, sizeof(utmp));
+ strncpy(utmp.ut_id, tn, sizeof(utmp.ut_id));
+@@ -93,7 +127,19 @@
+ time(&(utp->ut_time));
+ pututline(utp);
+ endutent();
++#else
++ if (ts > 0 && (fd = open(_PATH_UTMP, O_RDWR, 0)) >= 0) {
++ lseek(fd, (ts*sizeof(struct utmp)), L_SET);
++ if (read(fd, &utmp, sizeof(struct utmp)) == sizeof(struct utmp)) {
++ bzero(utmp.ut_name, sizeof(utmp.ut_name));
++ bzero(utmp.ut_host, sizeof(utmp.ut_host));
++ time(&utmp.ut_time);
++ lseek(fd, (ts*sizeof(struct utmp)), L_SET);
++ write(fd, &utmp, sizeof(struct utmp));
++ }
++ close(fd);
++ }
++#endif
+ chmod(tty, 0600);
+ chown(tty, 0, ttyGid);
+-#endif
+ }