1 #include <u.h> 2 #include <libc.h> 3 #include <bio.h> 4 #include <auth.h> 5 #include "imap4d.h" 6 7 /* 8 * query the connection server 9 */ 10 char* 11 csquery(char *attr, char *val, char *rattr) 12 { 13 char token[64+4]; 14 char buf[256], *p, *sp; 15 int fd, n; 16 17 if(val == nil || val[0] == 0) 18 return nil; 19 fd = open("/net/cs", ORDWR); 20 if(fd < 0) 21 return nil; 22 fprint(fd, "!%s=%s", attr, val); 23 seek(fd, 0, 0); 24 snprint(token, sizeof(token), "%s=", rattr); 25 for(;;){ 26 n = read(fd, buf, sizeof(buf)-1); 27 if(n <= 0) 28 break; 29 buf[n] = 0; 30 p = strstr(buf, token); 31 if(p != nil && (p == buf || *(p-1) == 0)){ 32 close(fd); 33 sp = strchr(p, ' '); 34 if(sp) 35 *sp = 0; 36 p = strchr(p, '='); 37 if(p == nil) 38 return nil; 39 return strdup(p+1); 40 } 41 } 42 close(fd); 43 return nil; 44 } 45