Introduction
Introduction Statistics Contact Development Disclaimer Help
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 <[email protected]>
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 s…
+ 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 chall…
+};
+
+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 na…
+ AttrQuery, /* name? -- when matching, must be present */
+ AttrDefault /* name:=val -- when matching, if present m…
+};
+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, cha…
+extern AuthInfo* auth_proxy(int fd, AuthGetkey *getkey, char *fmt, ...);
+extern AuthInfo* fsfauth_proxy(struct CFid*, AuthRpc *rpc, AuthGetkey *…
+extern AuthInfo* fsauth_proxy(struct CFid*, AuthGetkey *getkey, char *f…
+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, …
+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 <u.h>
+#include <libc.h>
+#include <auth.h>
+
+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"…
+ _exits(0);
+ }
+ print("incoming call for %s from %s in %s\n", argv[0],…
+ 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;
+ }
+ }
+}
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.