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

Christopher R. Hertel crh at ubiqx.mn.org
Thu Apr 14 17:55:11 GMT 2005


>From the FAQ:

  The Samba 2.2 branch is no longer maintained. It's EOL was October 1, 
  2004.

It's GPL'd, though, so if you want to maintain patches for it you are more 
than welcome to do so.

Chris -)-----

On Thu, Apr 14, 2005 at 01:11:08PM -0400, Michael Shalayeff wrote:
> 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)
> 

-- 
"Implementing CIFS - the Common Internet FileSystem" ISBN: 013047116X
Samba Team -- http://www.samba.org/     -)-----   Christopher R. Hertel
jCIFS Team -- http://jcifs.samba.org/   -)-----   ubiqx development, uninq.
ubiqx Team -- http://www.ubiqx.org/     -)-----   crh at ubiqx.mn.org
OnLineBook -- http://ubiqx.org/cifs/    -)-----   crh at ubiqx.org


More information about the samba mailing list