Subversion Repositories planix.SVN

Rev

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

#include <auth.h>
#include <fcall.h>

enum {
        NFidHash        = 503,
};

typedef struct Con Con;
typedef struct DirBuf DirBuf;
typedef struct Excl Excl;
typedef struct Fid Fid;
typedef struct Fsys Fsys;
typedef struct Msg Msg;

#pragma incomplete DirBuf
#pragma incomplete Excl
#pragma incomplete Fsys

struct Msg {
        uchar*  data;
        u32int  msize;                  /* actual size of data */
        Fcall   t;
        Fcall   r;
        Con*    con;

        Msg*    anext;                  /* allocation free list */

        Msg*    mnext;                  /* all active messsages on this Con */
        Msg*    mprev;

        int     state;                  /* */

        Msg*    flush;                  /* flushes waiting for this Msg */

        Msg*    rwnext;                 /* read/write queue */
        int     nowq;                   /* do not place on write queue */
};

enum {
        MsgN            = 0,
        MsgR            = 1,
        Msg9            = 2,
        MsgW            = 3,
        MsgF            = 4,
};

enum {
        ConNoneAllow    = 1<<0,
        ConNoAuthCheck  = 1<<1,
        ConNoPermCheck  = 1<<2,
        ConWstatAllow   = 1<<3,
        ConIPCheck      = 1<<4,
};
struct Con {
        char*   name;
        uchar*  data;                   /* max, not negotiated */
        int     isconsole;              /* immutable */
        int     flags;                  /* immutable */
        char    remote[128];            /* immutable */
        VtLock* lock;
        int     state;
        int     fd;
        Msg*    version;
        u32int  msize;                  /* negotiated with Tversion */
        VtRendez* rendez;

        Con*    anext;                  /* alloc */
        Con*    cnext;                  /* in use */
        Con*    cprev;

        VtLock* alock;
        int     aok;                    /* authentication done */

        VtLock* mlock;
        Msg*    mhead;                  /* all Msgs on this connection */
        Msg*    mtail;
        VtRendez* mrendez;

        VtLock* wlock;
        Msg*    whead;                  /* write queue */
        Msg*    wtail;
        VtRendez* wrendez;

        VtLock* fidlock;                /* */
        Fid*    fidhash[NFidHash];
        Fid*    fhead;
        Fid*    ftail;
        int     nfid;
};

enum {
        ConDead         = 0,
        ConNew          = 1,
        ConDown         = 2,
        ConInit         = 3,
        ConUp           = 4,
        ConMoribund     = 5,
};

struct Fid {
        VtLock* lock;
        Con*    con;
        u32int  fidno;
        int     ref;                    /* inc/dec under Con.fidlock */
        int     flags;

        int     open;
        Fsys*   fsys;
        File*   file;
        Qid     qid;
        char*   uid;
        char*   uname;
        DirBuf* db;
        Excl*   excl;

        VtLock* alock;                  /* Tauth/Tattach */
        AuthRpc* rpc;
        char*   cuname;

        Fid*    sort;                   /* sorted by uname in cmdWho */
        Fid*    hash;                   /* lookup by fidno */
        Fid*    next;                   /* clunk session with Tversion */
        Fid*    prev;
};

enum {                                  /* Fid.flags and fidGet(..., flags) */
        FidFCreate      = 0x01,
        FidFWlock       = 0x02,
};

enum {                                  /* Fid.open */
        FidOCreate      = 0x01,
        FidORead        = 0x02,
        FidOWrite       = 0x04,
        FidORclose      = 0x08,
};

/*
 * 9p.c
 */
extern int (*rFcall[Tmax])(Msg*);
extern int validFileName(char*);

/*
 * 9auth.c
 */
extern int authCheck(Fcall*, Fid*, Fsys*);
extern int authRead(Fid*, void*, int);
extern int authWrite(Fid*, void*, int);

/*
 * 9dir.c
 */
extern void dirBufFree(DirBuf*);
extern int dirDe2M(DirEntry*, uchar*, int);
extern int dirRead(Fid*, uchar*, int, vlong);

/*
 * 9excl.c
 */
extern int exclAlloc(Fid*);
extern void exclFree(Fid*);
extern void exclInit(void);
extern int exclUpdate(Fid*);

/*
 * 9fid.c
 */
extern void fidClunk(Fid*);
extern void fidClunkAll(Con*);
extern Fid* fidGet(Con*, u32int, int);
extern void fidInit(void);
extern void fidPut(Fid*);

/*
 * 9fsys.c
 */
extern void fsysFsRlock(Fsys*);
extern void fsysFsRUnlock(Fsys*);
extern Fs* fsysGetFs(Fsys*);
extern Fsys* fsysGet(char*);
extern char* fsysGetName(Fsys*);
extern File* fsysGetRoot(Fsys*, char*);
extern Fsys* fsysIncRef(Fsys*);
extern int fsysInit(void);
extern int fsysNoAuthCheck(Fsys*);
extern int fsysNoPermCheck(Fsys*);
extern void fsysPut(Fsys*);
extern int fsysWstatAllow(Fsys*);

/*
 * 9lstn.c
 */
extern int lstnInit(void);

/*
 * 9proc.c
 */
extern Con* conAlloc(int, char*, int);
extern void conInit(void);
extern void msgFlush(Msg*);
extern void msgInit(void);

/*
 * 9srv.c
 */
extern int srvInit(void);

/*
 * 9user.c
 */
extern int groupLeader(char*, char*);
extern int groupMember(char*, char*);
extern int groupWriteMember(char*);
extern char* unameByUid(char*);
extern char* uidByUname(char*);
extern int usersInit(void);
extern int usersFileRead(char*);
extern int validUserName(char*);

extern char* uidadm;
extern char* unamenone;
extern char* uidnoworld;

/*
 * Ccli.c
 */
extern int cliAddCmd(char*, int (*)(int, char*[]));
extern int cliError(char*, ...);
extern int cliInit(void);
extern int cliExec(char*);
#pragma varargck        argpos  cliError        1

/*
 * Ccmd.c
 */
extern int cmdInit(void);

/*
 * Ccons.c
 */
extern int consPrompt(char*);
extern int consInit(void);
extern int consOpen(int, int, int);
extern int consTTY(void);
extern int consWrite(char*, int);

/*
 * Clog.c
 */
extern int consPrint(char*, ...);
extern int consVPrint(char*, va_list);
#pragma varargck        argpos  consPrint       1

/*
 * fossil.c
 */
extern int Dflag;