Example #1
0
static struct pmap *
get_mountport(struct sockaddr_in *server_addr,
      long unsigned prog,
      long unsigned version,
      long unsigned proto,
      long unsigned port,
      int nfs_mount_version)
{
	struct pmaplist *pmap;
	static struct pmap p = {0, 0, 0, 0};

	if (version > MAX_NFSPROT)
		version = MAX_NFSPROT;
	if (!prog)
		prog = MOUNTPROG;
	p.pm_prog = prog;
	p.pm_vers = version;
	p.pm_prot = proto;
	p.pm_port = port;

	server_addr->sin_port = PMAPPORT;
	pmap = pmap_getmaps(server_addr);

	while (pmap) {
		if (pmap->pml_map.pm_prog != prog)
			goto next;
		if (!version && p.pm_vers > pmap->pml_map.pm_vers)
			goto next;
		if (version > 2 && pmap->pml_map.pm_vers != version)
			goto next;
		if (version && version <= 2 && pmap->pml_map.pm_vers > 2)
			goto next;
		if (pmap->pml_map.pm_vers > MAX_NFSPROT ||
		    (proto && p.pm_prot && pmap->pml_map.pm_prot != proto) ||
		    (port && pmap->pml_map.pm_port != port))
			goto next;
		memcpy(&p, &pmap->pml_map, sizeof(p));
	next:
		pmap = pmap->pml_next;
	}
	if (!p.pm_vers)
		p.pm_vers = MOUNTVERS;
	if (!p.pm_prot)
		p.pm_prot = IPPROTO_TCP;
#if 0
	if (!p.pm_port) {
		p.pm_port = pmap_getport(server_addr, p.pm_prog, p.pm_vers,
					 p.pm_prot);
	}
#endif
#if 0
#define MOUNTPORT 635
	/* HJLu wants to remove all traces of the old default port.
	   Are there still people running a mount RPC service on this
	   port without having a portmapper? */
	if (!p.pm_port)
		p.pm_port = MOUNTPORT;
#endif
	return &p;
}
Example #2
0
static struct pmap *
get_mountport(struct sockaddr_in *server_addr,
	long unsigned prog,
	long unsigned version,
	long unsigned proto,
	long unsigned port)
{
	struct pmaplist *pmap;
	static struct pmap p = {0, 0, 0, 0};

	server_addr->sin_port = PMAPPORT;
/* glibc 2.4 (still) has pmap_getmaps(struct sockaddr_in *).
 * I understand it like "IPv6 for this is not 100% ready" */
	pmap = pmap_getmaps(server_addr);

	if (version > MAX_NFSPROT)
		version = MAX_NFSPROT;
	if (!prog)
		prog = MOUNTPROG;
	p.pm_prog = prog;
	p.pm_vers = version;
	p.pm_prot = proto;
	p.pm_port = port;

	while (pmap) {
		if (pmap->pml_map.pm_prog != prog)
			goto next;
		if (!version && p.pm_vers > pmap->pml_map.pm_vers)
			goto next;
		if (version > 2 && pmap->pml_map.pm_vers != version)
			goto next;
		if (version && version <= 2 && pmap->pml_map.pm_vers > 2)
			goto next;
		if (pmap->pml_map.pm_vers > MAX_NFSPROT ||
		    (proto && p.pm_prot && pmap->pml_map.pm_prot != proto) ||
		    (port && pmap->pml_map.pm_port != port))
			goto next;
		memcpy(&p, &pmap->pml_map, sizeof(p));
next:
		pmap = pmap->pml_next;
	}
	if (!p.pm_vers)
		p.pm_vers = MOUNTVERS;
	if (!p.pm_port)
		p.pm_port = MOUNTPORT;
	if (!p.pm_prot)
		p.pm_prot = IPPROTO_TCP;
	return &p;
}
int main(int argn, char *argc[])
{
	//Program parameters : argc[1] : HostName or Host IP
	//                                         argc[2] : Server Program Number
	//                                         other arguments depend on test case

	//run_mode can switch into stand alone program or program launch by shell script
	//1 : stand alone, debug mode, more screen information
	//0 : launch by shell script as test case, only one printf -> result status
	int run_mode = 0;
	int test_status = 1;	//Default test result set to FAILED
	int progNum = atoi(argc[2]);
	struct pmaplist *ml = NULL;
	struct hostent *hp = NULL;
	struct sockaddr_in sin;

	//Initialization
	if ((hp = gethostbyname(argc[1])) == NULL) {
		fprintf(stderr, "gethostbyname failed\n");
		exit(1);
	}
	sin.sin_family = AF_INET;
	sin.sin_addr.s_addr = *(u_int *) hp->h_addr;

	ml = pmap_getmaps(&sin);

	if (run_mode) {
		printf("List. %d\n", ml);
		printf("Addr. %u\n", sin.sin_addr.s_addr);
	}

	test_status = (ml == NULL);

	//This last printf gives the result status to the tests suite
	//normally should be 0: test has passed or 1: test has failed
	printf("%d\n", test_status);

	return test_status;
}
Example #4
0
int
main(int argc, char **argv)
{
    struct sockaddr_in addr;
    struct pmaplist *list;
    struct rpcent *rpc;

    memset(&addr, 0, sizeof(addr));
    addr.sin_family = AF_INET;
    addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
    addr.sin_port = htons(PMAPPORT);

    for (list = pmap_getmaps(&addr); list; list = list->pml_next) {
	rpc = getrpcbynumber((int) list->pml_map.pm_prog);
	printf("%10lu %4lu %5s %6lu  %s\n",
	       list->pml_map.pm_prog,
	       list->pml_map.pm_vers,
	       protoname(list->pml_map.pm_prot),
	       list->pml_map.pm_port,
	       rpc ? rpc->r_name : "");
    }
    return (fclose(stdout) ? (perror(argv[0]), 1) : 0);
}