xref: /plan9/sys/src/cmd/ip/imap4d/csquery.c (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
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*
csquery(char * attr,char * val,char * rattr)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