#include "scan.h"
#include "env.h"
#include "open.h"
#include "stralloc.h"
int ucspitls(void)
{
unsigned long fd;
char *fdstr;
if (!(fdstr=env_get("SSLCTLFD")))
return 0;
if (!scan_ulong(fdstr,&fd))
return 0;
if (write((int)fd, "Y", 1) < 1)
return 0;
if (!(fdstr=env_get("SSLREADFD")))
return 0;
if (!scan_ulong(fdstr,&fd))
return 0;
if (dup2((int)fd,0) == -1)
return 0;
if (!(fdstr=env_get("SSLWRITEFD")))
return 0;
if (!scan_ulong(fdstr,&fd))
return 0;
if (dup2((int)fd,1) == -1)
return 0;
return 1;
}
int ucspitlsinfo(void)
{
unsigned long fd;
char *fdstr;
char envbuf[8192];
char *x;
int j;
stralloc ssl_env = { 0 };
stralloc ssl_parm = { 0 };
stralloc ssl_value = { 0 };
if (!(fdstr=env_get("SSLCTLFD")))
return 0;
if (!scan_ulong(fdstr,&fd))
return 0;
while ((j=read(fd,envbuf,8192)) >0 ) {
stralloc_catb(&ssl_env,envbuf,j);
if (ssl_env.len >= 2 && ssl_env.s[ssl_env.len-2]==0 && ssl_env.s[ssl_env.len-1]==0)
break;
}
if (j < 0)
die_nomem();
x = ssl_env.s;
for (j=0;j < ssl_env.len-1;++j) {
if ( *x != '=' ) {
if(!stralloc_catb(&ssl_parm,x,1)) die_nomem();
x++; }
else {
if (!stralloc_0(&ssl_parm)) die_nomem();
x++;
for (;j < ssl_env.len-j-1;++j) {
if ( *x != '\0' ) {
if(!stralloc_catb(&ssl_value,x,1)) die_nomem();
x++; }
else {
if (!stralloc_0(&ssl_value)) die_nomem();
x++;
if(!env_put2(ssl_parm.s,ssl_value.s)) die_nomem();
ssl_parm.len = 0;
ssl_value.len = 0;
break;
}
}
}
}
return j;
}
syntax highlighted by Code2HTML, v. 0.9.1