1 5cdb1798 2005-10-29 devnull #include <u.h>
2 5cdb1798 2005-10-29 devnull #include <libc.h>
3 5cdb1798 2005-10-29 devnull #include <libsec.h>
4 b5f65921 2006-02-11 devnull #include <libString.h>
5 5cdb1798 2005-10-29 devnull #include "dat.h"
8 5cdb1798 2005-10-29 devnull usage(void)
10 5cdb1798 2005-10-29 devnull fprint(2, "usage: %s key [token]\n", argv0);
11 5cdb1798 2005-10-29 devnull exits("usage");
14 5cdb1798 2005-10-29 devnull static String*
15 5cdb1798 2005-10-29 devnull mktoken(char *key, long thetime)
17 5cdb1798 2005-10-29 devnull char *now;
18 5cdb1798 2005-10-29 devnull uchar digest[SHA1dlen];
19 5cdb1798 2005-10-29 devnull char token[64];
20 5cdb1798 2005-10-29 devnull String *s;
22 5cdb1798 2005-10-29 devnull now = ctime(thetime);
23 5cdb1798 2005-10-29 devnull memset(now+11, ':', 8);
24 5cdb1798 2005-10-29 devnull hmac_sha1((uchar*)now, strlen(now), (uchar*)key, strlen(key), digest, nil);
25 5cdb1798 2005-10-29 devnull enc64(token, sizeof token, digest, sizeof digest);
26 5cdb1798 2005-10-29 devnull s = s_new();
27 5cdb1798 2005-10-29 devnull s_nappend(s, token, 5);
28 5cdb1798 2005-10-29 devnull return s;
31 5cdb1798 2005-10-29 devnull static char*
32 5cdb1798 2005-10-29 devnull check_token(char *key, char *file)
34 5cdb1798 2005-10-29 devnull String *s;
35 5cdb1798 2005-10-29 devnull long now;
37 5cdb1798 2005-10-29 devnull char buf[1024];
40 5cdb1798 2005-10-29 devnull fd = open(file, OREAD);
41 5cdb1798 2005-10-29 devnull if(fd < 0)
42 5cdb1798 2005-10-29 devnull return "no match";
43 5cdb1798 2005-10-29 devnull i = read(fd, buf, sizeof(buf)-1);
44 5cdb1798 2005-10-29 devnull close(fd);
45 5cdb1798 2005-10-29 devnull if(i < 0)
46 5cdb1798 2005-10-29 devnull return "no match";
47 5cdb1798 2005-10-29 devnull buf[i] = 0;
49 5cdb1798 2005-10-29 devnull now = time(0);
51 5cdb1798 2005-10-29 devnull for(i = 0; i < 14; i++){
52 5cdb1798 2005-10-29 devnull s = mktoken(key, now-24*60*60*i);
53 5cdb1798 2005-10-29 devnull if(strstr(buf, s_to_c(s)) != nil){
54 5cdb1798 2005-10-29 devnull s_free(s);
55 5cdb1798 2005-10-29 devnull return nil;
57 5cdb1798 2005-10-29 devnull s_free(s);
59 5cdb1798 2005-10-29 devnull return "no match";
62 5cdb1798 2005-10-29 devnull static char*
63 5cdb1798 2005-10-29 devnull create_token(char *key)
65 5cdb1798 2005-10-29 devnull String *s;
67 5cdb1798 2005-10-29 devnull s = mktoken(key, time(0));
68 5cdb1798 2005-10-29 devnull print("%s", s_to_c(s));
69 5cdb1798 2005-10-29 devnull return nil;
73 5cdb1798 2005-10-29 devnull main(int argc, char **argv)
75 5cdb1798 2005-10-29 devnull ARGBEGIN {
76 5cdb1798 2005-10-29 devnull } ARGEND;
78 5cdb1798 2005-10-29 devnull switch(argc){
80 5cdb1798 2005-10-29 devnull exits(check_token(argv[0], argv[1]));
83 5cdb1798 2005-10-29 devnull exits(create_token(argv[0]));
88 5cdb1798 2005-10-29 devnull exits(0);