⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 authdes_subr.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
字号:
#if !defined(lint) && defined(SCCSIDS)static char sccsid[] = "@(#)authdes_subr.c 1.1 92/07/30 Copyr 1986 Sun Micro";#endif/* * Miscellaneous support routines for kernel implentation of AUTH_DES * Copyright (C) 1986 by Sun Microsystems, Inc. *//* *  rtime - get time from remote machine * *  sets time, obtaining value from host *  on the udp/time socket.  Since timeserver returns *  with time of day in seconds since Jan 1, 1900,  must *  subtract 86400(365*70 + 17) to get time *  since Jan 1, 1970, which is what get/settimeofday *  uses. */#include <sys/param.h>#include <sys/types.h>#include <sys/time.h>#include <sys/mbuf.h>#include <sys/socketvar.h>#include <sys/errno.h>#include <sys/kernel.h>#include <sys/user.h>#include <sys/socket.h>#include <netinet/in.h>#define	debug(msg)		/* turn off debugging */#define	USEC_PER_SEC 1000000#define	TOFFSET (86400*(365*70 + (70/4)))#define	WRITTEN (86400*(365*86 + (86/4)))rtime_wakeup(so)	struct socket *so;{	so->so_error = ETIMEDOUT;	sbwakeup(so, &so->so_rcv);}rtime(addrp, timep, wait)	struct sockaddr_in *addrp;	struct timeval *timep;	struct timeval *wait;{	struct socket *so;	struct mbuf *m;	int error;	u_long thetime;	struct sockaddr_in from;	int s;	struct mbuf *ku_recvfrom();	error = socreate(AF_INET, &so, SOCK_DGRAM, IPPROTO_UDP);	if (error) {		return (-1);	}	addrp->sin_family = AF_INET;	addrp->sin_port = IPPORT_TIMESERVER;	m = m_get(M_WAIT, MT_DATA);	if (m == NULL) {		(void) soclose(so);		return (-1);	}	m->m_len = 0;	error = ku_sendto_mbuf(so, m, addrp);	/* m is now free */	if (error) {		debug("ku_sendto_mbuf");		(void) soclose(so);		return (-1);	}	so->so_error = 0;	s = splnet();	timeout(rtime_wakeup, (caddr_t)so,		(int)(wait->tv_sec * hz + (wait->tv_usec * hz) / USEC_PER_SEC));	so->so_rcv.sb_flags |= SB_WAIT;	(void) sleep((caddr_t)&so->so_rcv.sb_cc, PRIBIO);	untimeout(rtime_wakeup, (caddr_t)so);	if (so->so_error) {		(void) splx(s);		debug("rtime timed out");		(void) soclose(so);		return (-1);	}	m = ku_recvfrom(so, &from);	(void) splx(s);	(void) soclose(so);	if (m == NULL) {		debug("recvfrom");		return (-1);	}	if (m->m_len != sizeof (u_long)) {		debug("invalid receipt time");		m_freem(m);		return (-1);	}	thetime = ntohl(*mtod(m, u_long *));	m_freem(m);	if (thetime < WRITTEN) {		debug("time returned is too far in past");		return (-1);	}	timep->tv_sec = thetime - TOFFSET;	timep->tv_usec = 0;	return (0);}/* * Short to ascii conversion */static char *sitoa(s, i)	char *s;	short i;{	char *p;	char *end;	char c;	if (i < 0) {		*s++ = '-';		i = -i;	} else if (i == 0) {		*s++ = '0';	}	/*	 * format in reverse order	 */	for (p = s; i > 0; i /= 10) {		*p++ = (i % 10) + '0';	}	*(end = p) = 0;	/*	 * reverse	 */	while (p > s) {		c = *--p;		*p = *s;		*s++ = c;	}	return (end);}static char *atoa(dst, src)	char *dst;	char *src;{	while (*dst++ = *src++)		;	return (dst-1);}/* * What is my network name? * WARNING: this gets the network name in sun unix format. * Other operating systems (non-unix) are free to put something else * here. */getnetname(netname)	char *netname;{	char *p;	extern char hostname[];	extern char domainname[];	p = atoa(netname, "unix.");	if (u.u_uid == 0) {		p = atoa(p, hostname);	} else {		p = sitoa(p, (short)u.u_uid);	}	*p++ = '@';	p = atoa(p, domainname);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -