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