Files
Arquivotheca.SunOS-4.1.4/usr.etc/suninstall/lib/remote_access.c
seta75D ff309bfe1c Init
2021-10-11 18:37:13 -03:00

136 lines
2.8 KiB
C

#ifndef lint
#ifdef SunB1
static char sccsid[] = "@(#)remote_access.c 1.1 94/10/31 SMI; SunOS MLS";
#else
static char sccsid[] = "@(#)remote_access.c 1.1 94/10/31 SMI";
#endif /* SunB1 */
#endif lint
/*
* Copyright (c) 1989 Sun Microsystems, Inc.
*/
/*
* Name: menu_check_remote_access()
*
* Description: This function checks for access permissions on
* remote hosts. This function is used to produce its
* own error messages. We use the function
* check_remote_access() to tell us if we really have
* access.
*
* We are assuming the ifconfig has been done.
*
* Return Value : 1 if access is allowed
* 0 if access is denied
*/
#include <stdio.h>
#include <sys/param.h>
#include "install.h"
int
menu_check_remote_access(remote_host)
char * remote_host; /* name of the remote host to check */
{
if (check_remote_access(remote_host) == 1)
return(1);
else {
/*
** access was denied, so give an error message.
*/
menu_mesg("%s '%s'\n%s %s%s",
"Access was denied to remote host", remote_host,
"Make sure that your hostname exists in", remote_host,
"'s /.rhosts file");
return(0);
}
}
/*
* Name: check_remote_access()
*
* Description: This function checks for access permissions on
* remote hosts. It trys to to an rsh to ls the
* /dev directory. This is very simple and should not
* fail on a correctly setup system.
*
* We are assuming the ifconfig has been done.
*
* Return Value : 1 if access is allowed
* 0 if access is denied
*/
#include <stdio.h>
#include <sys/param.h>
int
check_remote_access(remote_host)
char * remote_host; /* name of the remote host to check */
{
char buf[60 + MAXHOSTNAMELEN];
(void) sprintf(buf, "rsh %s -n ls /dev > /dev/null 2>&1", remote_host);
if (system(buf) == 0)
return(1);
else
return(0);
}
/*
* Name: ck_remote_path()
*
* Description: Determine if a remote media path is valid. Returns
* one if it is and zero if it is not.
*
*/
int
ck_remote_path(soft_p, dev)
soft_info * soft_p;
char * dev;
{
char buf[MAXPATHLEN + BUFSIZ]; /* scratch buffer */
FILE * pp; /* ptr to process */
menu_flash_on("Checking remote media device");
/*
* If this fails, we are not in the /.rhosts file on the media
* host.
*/
if (!menu_check_remote_access(soft_p->media_host))
return(-1);
(void) sprintf(buf,
"rsh -n %s \"exec sh -c 'if [ -r %s ]; then echo yes; else echo no; fi'\" 2> /dev/null",
soft_p->media_host, dev);
pp = popen(buf, "r");
if (pp == NULL) {
menu_flash_off(REDISPLAY);
menu_log("%s: cannot determine media path.", progname);
return(-1);
}
bzero(buf, sizeof(buf));
(void) fgets(buf, sizeof(buf), pp);
buf[strlen(buf) - 1 ] = NULL;
(void) pclose(pp);
menu_flash_off(NOREDISPLAY);
return(strcmp(buf, "yes") == 0 ? 1 : 0);
} /* end ck_remote_path() */