[Samba] utmp update for bsd systems (try 2)

2005-04-14 Thread Michael Shalayeff
re
i have posted this before but received no response...
is there anybod reading on this address?
cu

- Forwarded message (env-from mickey) -

re
this is a patch against samba-2.2.12p0 and adds support
for updating utmp on bsds. code similarly ripped from
openbsd's ftpd (;
cu
-- 
paranoic mickey   (my employers have changed but, the name has remained)

--- utmp.c  Thu Aug 12 14:24:20 2004
+++ /home/mickey/utmp.c Wed Mar 30 15:51:40 2005
@@ -261,6 +261,7 @@
 }
 
 #ifndef HAVE_PUTUTLINE
+#include ttyent.h
 
 /
  Update utmp file directly.  No subroutine interface: probably a BSD system.
@@ -268,8 +269,50 @@
 
 static void pututline_my(pstring uname, struct utmp *u, BOOL claim)
 {
-   DEBUG(1,(pututline_my: not yet implemented\n));
-   /* BSD implementor: may want to consider (or not) adjusting lastlog */
+   int fd, topslot;
+   struct utmp ubuf;
+
+   if ((fd = open(uname, O_RDWR, 0))  0)
+   return;
+
+   if (!setttyent())
+   return;
+
+   for (topslot = 0; getttyent() != (struct ttyent *)NULL; )
+   topslot++;
+
+   if (!endttyent())
+   return;
+
+   (void) lseek(fd, (off_t)(topslot * sizeof(struct utmp)), SEEK_SET);
+
+   DEBUG(1,(pututline(%s, %s, %d); topslot=%d\n,
+   u-ut_line, u-ut_name, claim, topslot));
+
+   while (1) {
+   if (read(fd, ubuf, sizeof(ubuf)) == sizeof(ubuf)) {
+   if ((claim  !ubuf.ut_name[0]) ||
+   (!claim  ubuf.ut_name[0] 
+!strncmp(ubuf.ut_line, u-ut_line, UT_LINESIZE))) {
+   (void) lseek(fd, -(off_t)sizeof(struct utmp),
+   SEEK_CUR);
+   break;
+   }
+   topslot++;
+   } else {
+   (void) lseek(fd, (off_t)(topslot *
+   sizeof(struct utmp)), SEEK_SET);
+   break;
+   }
+   }
+
+   if (! claim) {
+   memset((char *)u-ut_name, '\0', sizeof(u-ut_name));
+   memset((char *)u-ut_host, '\0', sizeof(u-ut_host));
+   }
+   (void) write(fd, u, sizeof(struct utmp));
+
+   (void) close(fd);
 }
 #endif /* HAVE_PUTUTLINE */
 

- End of forwarded message (env-from mickey) -

-- 
paranoic mickey   (my employers have changed but, the name has remained)
-- 
To unsubscribe from this list go to the following URL and read the
instructions:  https://lists.samba.org/mailman/listinfo/samba


[Samba] utmp update for bsd systems

2005-03-30 Thread Michael Shalayeff
re
this is a patch against samba-2.2.12p0 and adds support
for updating utmp on bsds. code similarly ripped from
openbsd's ftpd (;
cu
-- 
paranoic mickey   (my employers have changed but, the name has remained)

--- utmp.c  Thu Aug 12 14:24:20 2004
+++ /home/mickey/utmp.c Wed Mar 30 15:51:40 2005
@@ -261,6 +261,7 @@
 }
 
 #ifndef HAVE_PUTUTLINE
+#include ttyent.h
 
 /
  Update utmp file directly.  No subroutine interface: probably a BSD system.
@@ -268,8 +269,50 @@
 
 static void pututline_my(pstring uname, struct utmp *u, BOOL claim)
 {
-   DEBUG(1,(pututline_my: not yet implemented\n));
-   /* BSD implementor: may want to consider (or not) adjusting lastlog */
+   int fd, topslot;
+   struct utmp ubuf;
+
+   if ((fd = open(uname, O_RDWR, 0))  0)
+   return;
+
+   if (!setttyent())
+   return;
+
+   for (topslot = 0; getttyent() != (struct ttyent *)NULL; )
+   topslot++;
+
+   if (!endttyent())
+   return;
+
+   (void) lseek(fd, (off_t)(topslot * sizeof(struct utmp)), SEEK_SET);
+
+   DEBUG(1,(pututline(%s, %s, %d); topslot=%d\n,
+   u-ut_line, u-ut_name, claim, topslot));
+
+   while (1) {
+   if (read(fd, ubuf, sizeof(ubuf)) == sizeof(ubuf)) {
+   if ((claim  !ubuf.ut_name[0]) ||
+   (!claim  ubuf.ut_name[0] 
+!strncmp(ubuf.ut_line, u-ut_line, UT_LINESIZE))) {
+   (void) lseek(fd, -(off_t)sizeof(struct utmp),
+   SEEK_CUR);
+   break;
+   }
+   topslot++;
+   } else {
+   (void) lseek(fd, (off_t)(topslot *
+   sizeof(struct utmp)), SEEK_SET);
+   break;
+   }
+   }
+
+   if (! claim) {
+   memset((char *)u-ut_name, '\0', sizeof(u-ut_name));
+   memset((char *)u-ut_host, '\0', sizeof(u-ut_host));
+   }
+   (void) write(fd, u, sizeof(struct utmp));
+
+   (void) close(fd);
 }
 #endif /* HAVE_PUTUTLINE */
 
-- 
To unsubscribe from this list go to the following URL and read the
instructions:  https://lists.samba.org/mailman/listinfo/samba


[Samba] utmp update for bsd systems

2005-03-30 Thread Michael Shalayeff
re
this is a patch against samba-2.2.12p0 and adds support
for updating utmp on bsds. code similarly ripped from
openbsd's ftpd (;
cu
-- 
paranoic mickey   (my employers have changed but, the name has remained)

--- utmp.c  Thu Aug 12 14:24:20 2004
+++ /home/mickey/utmp.c Wed Mar 30 15:51:40 2005
@@ -261,6 +261,7 @@
 }
 
 #ifndef HAVE_PUTUTLINE
+#include ttyent.h
 
 /
  Update utmp file directly.  No subroutine interface: probably a BSD system.
@@ -268,8 +269,50 @@
 
 static void pututline_my(pstring uname, struct utmp *u, BOOL claim)
 {
-   DEBUG(1,(pututline_my: not yet implemented\n));
-   /* BSD implementor: may want to consider (or not) adjusting lastlog */
+   int fd, topslot;
+   struct utmp ubuf;
+
+   if ((fd = open(uname, O_RDWR, 0))  0)
+   return;
+
+   if (!setttyent())
+   return;
+
+   for (topslot = 0; getttyent() != (struct ttyent *)NULL; )
+   topslot++;
+
+   if (!endttyent())
+   return;
+
+   (void) lseek(fd, (off_t)(topslot * sizeof(struct utmp)), SEEK_SET);
+
+   DEBUG(1,(pututline(%s, %s, %d); topslot=%d\n,
+   u-ut_line, u-ut_name, claim, topslot));
+
+   while (1) {
+   if (read(fd, ubuf, sizeof(ubuf)) == sizeof(ubuf)) {
+   if ((claim  !ubuf.ut_name[0]) ||
+   (!claim  ubuf.ut_name[0] 
+!strncmp(ubuf.ut_line, u-ut_line, UT_LINESIZE))) {
+   (void) lseek(fd, -(off_t)sizeof(struct utmp),
+   SEEK_CUR);
+   break;
+   }
+   topslot++;
+   } else {
+   (void) lseek(fd, (off_t)(topslot *
+   sizeof(struct utmp)), SEEK_SET);
+   break;
+   }
+   }
+
+   if (! claim) {
+   memset((char *)u-ut_name, '\0', sizeof(u-ut_name));
+   memset((char *)u-ut_host, '\0', sizeof(u-ut_host));
+   }
+   (void) write(fd, u, sizeof(struct utmp));
+
+   (void) close(fd);
 }
 #endif /* HAVE_PUTUTLINE */
 

-- 
To unsubscribe from this list go to the following URL and read the
instructions:  https://lists.samba.org/mailman/listinfo/samba