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

📄 rexec.c

📁 一个C源代码分析器
💻 C
字号:
/* * Copyright (c) 1980, 1993 *	The Regents of the University of California.  All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software *    must display the following acknowledgement: *	This product includes software developed by the University of *	California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors *    may be used to endorse or promote products derived from this software *    without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */#if defined(LIBC_SCCS) && !defined(lint)static char sccsid[] = "@(#)rexec.c	8.1 (Berkeley) 6/4/93";#endif /* LIBC_SCCS and not lint */#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <stdio.h>#include <netdb.h>#include <errno.h>extern	errno;char	*index();int	rexecoptions;char	*getpass(), *getlogin();rexec(ahost, rport, name, pass, cmd, fd2p)	char **ahost;	int rport;	char *name, *pass, *cmd;	int *fd2p;{	struct sockaddr_in sin, sin2, from;	struct hostent *hp;	u_short port;	int s, timo = 1, s3;	char c;	hp = gethostbyname(*ahost);	if (hp == 0) {		herror(*ahost);		return (-1);	}	*ahost = hp->h_name;	ruserpass(hp->h_name, &name, &pass);retry:	s = socket(AF_INET, SOCK_STREAM, 0);	if (s < 0) {		perror("rexec: socket");		return (-1);	}	sin.sin_family = hp->h_addrtype;	sin.sin_port = rport;	bcopy(hp->h_addr, (caddr_t)&sin.sin_addr, hp->h_length);	if (connect(s, (struct sockaddr *)&sin, sizeof(sin)) < 0) {		if (errno == ECONNREFUSED && timo <= 16) {			(void) close(s);			sleep(timo);			timo *= 2;			goto retry;		}		perror(hp->h_name);		return (-1);	}	if (fd2p == 0) {		(void) write(s, "", 1);		port = 0;	} else {		char num[8];		int s2, sin2len;				s2 = socket(AF_INET, SOCK_STREAM, 0);		if (s2 < 0) {			(void) close(s);			return (-1);		}		listen(s2, 1);		sin2len = sizeof (sin2);		if (getsockname(s2, (struct sockaddr *)&sin2, &sin2len) < 0 ||		  sin2len != sizeof (sin2)) {			perror("getsockname");			(void) close(s2);			goto bad;		}		port = ntohs((u_short)sin2.sin_port);		(void) sprintf(num, "%u", port);		(void) write(s, num, strlen(num)+1);		{ int len = sizeof (from);		  s3 = accept(s2, (struct sockaddr *)&from, &len);		  close(s2);		  if (s3 < 0) {			perror("accept");			port = 0;			goto bad;		  }		}		*fd2p = s3;	}	(void) write(s, name, strlen(name) + 1);	/* should public key encypt the password here */	(void) write(s, pass, strlen(pass) + 1);	(void) write(s, cmd, strlen(cmd) + 1);	if (read(s, &c, 1) != 1) {		perror(*ahost);		goto bad;	}	if (c != 0) {		while (read(s, &c, 1) == 1) {			(void) write(2, &c, 1);			if (c == '\n')				break;		}		goto bad;	}	return (s);bad:	if (port)		(void) close(*fd2p);	(void) close(s);	return (-1);}

⌨️ 快捷键说明

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