123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- #include "all.h"
- typedef struct Portmap Portmap;
- struct Portmap
- {
- int prog;
- int vers;
- int protocol;
- int port;
- };
- Portmap map[] = {
- 100003, 2, IPPROTO_UDP, 2049, /* nfs */
- // 100003, 3, IPPROTO_UDP, 2049, /* nfs */
- 100005, 1, IPPROTO_UDP, 2049, /* mount */
- 150001, 2, IPPROTO_UDP, 1111, /* pcnfsd v2 */
- 150001, 1, IPPROTO_UDP, 1111, /* pcnfsd v1 */
- 0, 0, 0, 0,
- };
- static void pmapinit(int, char**);
- static int pmapnull(int, Rpccall*, Rpccall*);
- static int pmapset(int, Rpccall*, Rpccall*);
- static int pmapunset(int, Rpccall*, Rpccall*);
- static int pmapgetport(int, Rpccall*, Rpccall*);
- static int pmapdump(int, Rpccall*, Rpccall*);
- static int pmapcallit(int, Rpccall*, Rpccall*);
- static Procmap pmapproc[] = {
- 0, pmapnull,
- 1, pmapset,
- 2, pmapunset,
- 3, pmapgetport,
- 4, pmapdump,
- 5, pmapcallit,
- 0, 0
- };
- int myport = 111;
- Progmap progmap[] = {
- 100000, 2, pmapinit, pmapproc,
- 0, 0, 0,
- };
- void
- main(int argc, char *argv[])
- {
- server(argc, argv, myport, progmap);
- }
- static
- void
- pmapinit(int argc, char **argv)
- {
- USED(argc, argv);
- clog("portmapper init\n");
- }
- static int
- pmapnull(int n, Rpccall *cmd, Rpccall *reply)
- {
- USED(n, cmd, reply);
- return 0;
- }
- static int
- pmapset(int n, Rpccall *cmd, Rpccall *reply)
- {
- uchar *dataptr = reply->results;
- if(n != 16)
- return garbage(reply, "bad count");
- USED(cmd);
- PLONG(FALSE);
- return dataptr - (uchar *)reply->results;
- }
- static int
- pmapunset(int n, Rpccall *cmd, Rpccall *reply)
- {
- uchar *dataptr = reply->results;
- if(n != 16)
- return garbage(reply, "bad count");
- USED(cmd);
- PLONG(TRUE);
- return dataptr - (uchar *)reply->results;
- }
- static int
- pmapgetport(int n, Rpccall *cmd, Rpccall *reply)
- {
- int prog, vers, prot;
- uchar *argptr = cmd->args;
- uchar *dataptr = reply->results;
- Portmap *mp;
- clog("get port\n");
- if(n != 16)
- return garbage(reply, "bad count");
- prog = GLONG();
- vers = GLONG();
- prot = GLONG();
- chat("host=%I, port=%ld: ", cmd->host, cmd->port);
- chat("getport: %d, %d, %d...", prog, vers, prot);
- for(mp=map; mp->prog>0; mp++)
- if(prog == mp->prog && vers == mp->vers &&
- prot == mp->protocol)
- break;
- chat("%d\n", mp->port);
- PLONG(mp->port);
- return dataptr - (uchar *)reply->results;
- }
- static int
- pmapdump(int n, Rpccall *cmd, Rpccall *reply)
- {
- uchar *dataptr = reply->results;
- Portmap *mp;
- if(n != 0)
- return garbage(reply, "bad count");
- USED(cmd);
- for(mp=map; mp->prog>0; mp++){
- PLONG(1);
- PLONG(mp->prog);
- PLONG(mp->vers);
- PLONG(mp->protocol);
- PLONG(mp->port);
- }
- PLONG(0);
- return dataptr - (uchar *)reply->results;
- }
- static int
- pmapcallit(int n, Rpccall *cmd, Rpccall *reply)
- {
- int prog, vers, proc;
- uchar *argptr = cmd->args;
- uchar *dataptr = reply->results;
- Portmap *mp;
- if(n < 12)
- return garbage(reply, "bad count");
- prog = GLONG();
- vers = GLONG();
- proc = GLONG();
- chat("host=%I, port=%ld: ", cmd->host, cmd->port);
- chat("callit: %d, %d, %d...", prog, vers, proc);
- for(mp=map; mp->prog>0; mp++)
- if(prog == mp->prog && vers == mp->vers &&
- proc == 0)
- break;
- if(mp->port == 0){
- chat("ignored\n");
- return -1;
- }
- chat("%d\n", mp->port);
- PLONG(mp->port);
- PLONG(0);
- return dataptr - (uchar *)reply->results;
- }
|