Subversion Repositories planix.SVN

Rev

Rev 2 | Blame | Compare with Previous | Last modification | View Log | RSS feed

#include "all.h"

void    mapinit(char*, char*);

int     debug;
int     rpcdebug;
int     style = 'u';
Biobuf *in;
Unixid *ids;
Unixid **pids;
Unixidmap *mp;

void
main(int argc, char **argv)
{
        int id, arc; char *arv[4];
        char *l, *name;

        chatty = 1;
        ARGBEGIN{
        case '9':
        case 'u':
                style = ARGC();
                break;
        case 'D':
                ++debug;
                break;
        }ARGEND
        if(argc <= 0){
                ids = readunixids("/fd/0", style);
                if(ids)
                        idprint(1, ids);
                exits(ids ? 0 : "readunixids");
        }
        mapinit(argv[0], 0);
        in = Bopen("/fd/0", OREAD);
        while(l = Brdline(in, '\n')){   /* assign = */
                l[Blinelen(in)-1] = 0;
                arc = strparse(l, nelem(arv), arv);
                if(arc <= 0)
                        continue;
                switch(arv[0][0]){
                case 'r':
                        if(arc < 2)
                                continue;
                        mapinit(arv[1], arv[2]);
                        break;
                case 'i':
                        if(arc < 2)
                                continue;
                        id = strtol(arv[1], 0, 10);
                        name = id2name(pids, id);
                        print("%d -> %s\n", id, name);
                        break;
                case 'n':
                        if(arc < 2)
                                continue;
                        name = arv[1];
                        id = name2id(pids, name);
                        print("%s -> %d\n", name, id);
                        break;
                case 'p':
                        print("server=%s, client=%s\n", mp->server, mp->client);
                        break;
                case 'P':
                        idprint(1, *pids);
                        break;
                case 'u':
                        pids = &mp->u.ids;
                        print("users...\n");
                        break;
                case 'g':
                        pids = &mp->g.ids;
                        print("groups...\n");
                        break;
                }
        }
        exits(0);
}

void
mapinit(char *file, char *client)
{
        if(file){
                print("reading %s...\n", file);
                if(readunixidmaps(file) < 0)
                        exits("readunixidmaps");
                if(!client)
                client = "nslocum.research.bell-labs.com";
        }
        print("client = %s...\n", client);
        mp = pair2idmap("bootes", client, 0);
        if(mp == 0){
                fprint(2, "%s: pair2idmap failed\n", argv0);
                exits("pair2idmap");
        }
        pids = &mp->u.ids;
        print("[users...]\n");
}