xref: /plan9/sys/src/cmd/ip/imap4d/csquery.c (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
17dd7cddfSDavid du Colombier #include <u.h>
27dd7cddfSDavid du Colombier #include <libc.h>
37dd7cddfSDavid du Colombier #include <bio.h>
4*9a747e4fSDavid du Colombier #include <auth.h>
57dd7cddfSDavid du Colombier #include "imap4d.h"
67dd7cddfSDavid du Colombier 
77dd7cddfSDavid du Colombier /*
87dd7cddfSDavid du Colombier  *  query the connection server
97dd7cddfSDavid du Colombier  */
107dd7cddfSDavid du Colombier char*
csquery(char * attr,char * val,char * rattr)117dd7cddfSDavid du Colombier csquery(char *attr, char *val, char *rattr)
127dd7cddfSDavid du Colombier {
137dd7cddfSDavid du Colombier 	char token[64+4];
147dd7cddfSDavid du Colombier 	char buf[256], *p, *sp;
157dd7cddfSDavid du Colombier 	int fd, n;
167dd7cddfSDavid du Colombier 
177dd7cddfSDavid du Colombier 	if(val == nil || val[0] == 0)
187dd7cddfSDavid du Colombier 		return nil;
197dd7cddfSDavid du Colombier 	fd = open("/net/cs", ORDWR);
207dd7cddfSDavid du Colombier 	if(fd < 0)
217dd7cddfSDavid du Colombier 		return nil;
227dd7cddfSDavid du Colombier 	fprint(fd, "!%s=%s", attr, val);
237dd7cddfSDavid du Colombier 	seek(fd, 0, 0);
247dd7cddfSDavid du Colombier 	snprint(token, sizeof(token), "%s=", rattr);
257dd7cddfSDavid du Colombier 	for(;;){
267dd7cddfSDavid du Colombier 		n = read(fd, buf, sizeof(buf)-1);
277dd7cddfSDavid du Colombier 		if(n <= 0)
287dd7cddfSDavid du Colombier 			break;
297dd7cddfSDavid du Colombier 		buf[n] = 0;
307dd7cddfSDavid du Colombier 		p = strstr(buf, token);
317dd7cddfSDavid du Colombier 		if(p != nil && (p == buf || *(p-1) == 0)){
327dd7cddfSDavid du Colombier 			close(fd);
337dd7cddfSDavid du Colombier 			sp = strchr(p, ' ');
347dd7cddfSDavid du Colombier 			if(sp)
357dd7cddfSDavid du Colombier 				*sp = 0;
367dd7cddfSDavid du Colombier 			p = strchr(p, '=');
377dd7cddfSDavid du Colombier 			if(p == nil)
387dd7cddfSDavid du Colombier 				return nil;
397dd7cddfSDavid du Colombier 			return strdup(p+1);
407dd7cddfSDavid du Colombier 		}
417dd7cddfSDavid du Colombier 	}
427dd7cddfSDavid du Colombier 	close(fd);
437dd7cddfSDavid du Colombier 	return nil;
447dd7cddfSDavid du Colombier }
45