added missing files - 9base - revived minimalist port of Plan 9 userland to Unix
git clone git://git.suckless.org/9base
Log
Files
Refs
README
LICENSE
---
commit 4f7cd11b8b5e6b5b69cf29a11a85c876795da881
parent 60bd5888062ba341609f89bb9788fbf31123b060
Author: Anselm R Garbe 
Date:   Wed, 23 Feb 2011 21:56:46 +0000

added missing files
Diffstat:
  A lib9/auth.h                         |     169 +++++++++++++++++++++++++++++++
  A listen1/Makefile                    |      10 ++++++++++
  A listen1/listen1.c                   |     105 +++++++++++++++++++++++++++++++

3 files changed, 284 insertions(+), 0 deletions(-)
---
diff --git a/lib9/auth.h b/lib9/auth.h
@@ -0,0 +1,169 @@
+#ifndef __AUTH_H__
+#define __AUTH_H__ 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+#pragma        src        "/sys/src/libauth"
+#pragma        lib        "libauth.a"
+*/
+AUTOLIB(auth)
+
+/*
+ * Interface for typical callers.
+ */
+
+typedef struct        AuthInfo        AuthInfo;
+typedef struct        Chalstate        Chalstate;
+typedef struct        Chapreply        Chapreply;
+typedef struct        MSchapreply        MSchapreply;
+typedef struct        UserPasswd        UserPasswd;
+typedef struct        AuthRpc                AuthRpc;
+
+struct CFid;
+
+enum
+{
+        MAXCHLEN=        256,                /* max challenge length        */
+        MAXNAMELEN=        256,                /* maximum name length */
+        MD5LEN=                16,
+
+        ARok = 0,                        /* rpc return values */
+        ARdone,
+        ARerror,
+        ARneedkey,
+        ARbadkey,
+        ARwritenext,
+        ARtoosmall,
+        ARtoobig,
+        ARrpcfailure,
+        ARphase,
+
+        AuthRpcMax = 4096
+};
+
+struct AuthRpc
+{
+        int afd;
+        struct CFid *afid;
+        char ibuf[AuthRpcMax];
+        char obuf[AuthRpcMax];
+        char *arg;
+        uint narg;
+};
+
+struct AuthInfo
+{
+        char        *cuid;                /* caller id */
+        char        *suid;                /* server id */
+        char        *cap;                /* capability (only valid on server side) */
+        int        nsecret;        /* length of secret */
+        uchar        *secret;        /* secret */
+};
+
+struct Chalstate
+{
+        char        *user;
+        char        chal[MAXCHLEN];
+        int        nchal;
+        void        *resp;
+        int        nresp;
+
+/* for implementation only */
+        AuthRpc        *rpc;                        /* to factotum */
+        char        userbuf[MAXNAMELEN];        /* temp space if needed */
+        int        userinchal;                /* user was sent to obtain challenge */
+};
+
+struct        Chapreply                /* for protocol "chap" */
+{
+        uchar        id;
+        char        resp[MD5LEN];
+};
+
+struct        MSchapreply        /* for protocol "mschap" */
+{
+        char        LMresp[24];                /* Lan Manager response */
+        char        NTresp[24];                /* NT response */
+};
+
+struct        UserPasswd
+{
+        char        *user;
+        char        *passwd;
+};
+
+extern        int        newns(char*, char*);
+extern        int        addns(char*, char*);
+
+extern        int        noworld(char*);
+extern        int        amount(int, char*, int, char*);
+
+/* these two may get generalized away -rsc */
+extern        int        login(char*, char*, char*);
+extern        int        httpauth(char*, char*);
+
+typedef struct Attr Attr;
+enum {
+        AttrNameval,                /* name=val -- when matching, must have name=val */
+        AttrQuery,                /* name? -- when matching, must be present */
+        AttrDefault                /* name:=val -- when matching, if present must match INTERNAL */
+};
+struct Attr
+{
+        int type;
+        Attr *next;
+        char *name;
+        char *val;
+};
+
+typedef int AuthGetkey(char*);
+
+int        _attrfmt(Fmt*);
+Attr        *_copyattr(Attr*);
+Attr        *_delattr(Attr*, char*);
+Attr        *_findattr(Attr*, char*);
+void        _freeattr(Attr*);
+Attr        *_mkattr(int, char*, char*, Attr*);
+Attr        *_parseattr(char*);
+char        *_strfindattr(Attr*, char*);
+/*
+#pragma varargck type "A" Attr*
+*/
+
+extern AuthInfo*        fauth_proxy(int, AuthRpc *rpc, AuthGetkey *getkey, char *params);
+extern AuthInfo*        auth_proxy(int fd, AuthGetkey *getkey, char *fmt, ...);
+extern AuthInfo*        fsfauth_proxy(struct CFid*, AuthRpc *rpc, AuthGetkey *getkey, char *params);
+extern AuthInfo*        fsauth_proxy(struct CFid*, AuthGetkey *getkey, char *fmt, ...);
+extern int                auth_getkey(char*);
+extern int                (*amount_getkey)(char*);
+extern void                auth_freeAI(AuthInfo *ai);
+extern int                auth_chuid(AuthInfo *ai, char *ns);
+extern Chalstate        *auth_challenge(char*, ...);
+extern AuthInfo*        auth_response(Chalstate*);
+extern int                auth_respond(void*, uint, char*, uint, void*, uint, AuthGetkey *getkey, char*, ...);
+extern void                auth_freechal(Chalstate*);
+extern AuthInfo*        auth_userpasswd(char *user, char *passwd);
+extern UserPasswd*        auth_getuserpasswd(AuthGetkey *getkey, char*, ...);
+extern AuthInfo*        auth_getinfo(AuthRpc *rpc);
+extern AuthRpc*                auth_allocrpc(void);
+extern Attr*                auth_attr(AuthRpc *rpc);
+extern void                auth_freerpc(AuthRpc *rpc);
+extern uint                auth_rpc(AuthRpc *rpc, char *verb, void *a, int n);
+extern int                auth_wep(char*, char*, ...);
+
+extern struct CFsys*        fsamount(int fd, char *aname);
+extern struct CFsys* nsamount(char *name, char *aname);
+
+
+/*
+#pragma varargck argpos auth_proxy 3
+#pragma varargck argpos auth_challenge 1
+#pragma varargck argpos auth_respond 3
+#pragma varargck argpos auth_getuserpasswd 2
+*/
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/listen1/Makefile b/listen1/Makefile
@@ -0,0 +1,10 @@
+# listen1 - listen1 unix port from plan9
+# Depends on ../lib9
+
+TARG      = listen1
+
+include ../std.mk
+
+pre-uninstall:
+
+post-install:
diff --git a/listen1/listen1.c b/listen1/listen1.c
@@ -0,0 +1,105 @@
+#include 
+#include 
+#include 
+
+int verbose;
+int trusted;
+
+void
+usage(void)
+{
+        fprint(2, "usage: listen1 [-v] address cmd args...\n");
+        exits("usage");
+}
+
+char*
+remoteaddr(char *dir)
+{
+        static char buf[128];
+        char *p;
+        int n, fd;
+
+        snprint(buf, sizeof buf, "%s/remote", dir);
+        fd = open(buf, OREAD);
+        if(fd < 0)
+                return "";
+        n = read(fd, buf, sizeof(buf));
+        close(fd);
+        if(n > 0){
+                buf[n] = 0;
+                p = strchr(buf, '!');
+                if(p)
+                        *p = 0;
+                return buf;
+        }
+        return "";
+}
+
+void
+main(int argc, char **argv)
+{
+        char dir[40], ndir[40];
+        int ctl, nctl, fd;
+
+        ARGBEGIN{
+        default:
+                usage();
+        case 't':
+                trusted = 1;
+                break;
+        case 'v':
+                verbose = 1;
+                break;
+        }ARGEND
+
+        if(argc < 2)
+                usage();
+
+        if(!verbose){
+                close(1);
+                fd = open("/dev/null", OWRITE);
+                if(fd != 1){
+                        dup(fd, 1);
+                        close(fd);
+                }
+        }
+
+        print("listen started\n");
+        ctl = announce(argv[0], dir);
+        if(ctl < 0)
+                sysfatal("announce %s: %r", argv[0]);
+
+        for(;;){
+                nctl = listen(dir, ndir);
+                if(nctl < 0)
+                        sysfatal("listen %s: %r", argv[0]);
+
+                switch(rfork(RFFDG|RFPROC|RFNOWAIT|RFNOTEG)){
+                case -1:
+                        close(nctl);
+                        continue;
+                case 0:
+                        fd = accept(nctl, ndir);
+                        if(fd < 0){
+                                fprint(2, "accept %s: can't open  %s/data: %r", argv[0], ndir);
+                                _exits(0);
+                        }
+                        print("incoming call for %s from %s in %s\n", argv[0], remoteaddr(ndir), ndir);
+                        close(ctl);
+                        close(nctl);
+                        /*putenv("net", ndir); */
+                        /*sprint(data, "%s/data", ndir); */
+                        /*bind(data, "/dev/cons", MREPL); */
+                        dup(fd, 0);
+                        dup(fd, 1);
+                        dup(fd, 2);
+                        close(fd);
+                        exec(argv[1], argv+1);
+                        fprint(2, "exec: %r");
+                        exits(nil);
+                default:
+                        close(nctl);
+                        break;
+                }
+        }
+}