a1ad68 | 1998-01-16 | Fredrik Hübinette (Hubbe) | | #!/usr/local/bin/pike
inherit Stdio.Port;
void handle_incoming_connection(object(Stdio.File) io)
{
object p;
sscanf(io->read(4),"%4c",int args);
string *cmd=allocate(args);
for(int e=0;e<args;e++)
{
sscanf(io->read(4),"%4c",int len);
cmd[e]=io->read(len);
}
object pi=Stdio.File();
object p2=pi->pipe();
string dir=cmd[0];
cmd=cmd[1..];
|
242a4c | 1998-01-19 | Fredrik Hübinette (Hubbe) | | write("Doing "+cmd*" "+"\n");
|
47a5f4 | 1998-01-21 | Fredrik Hübinette (Hubbe) | | switch(lower_case(cmd[0]))
|
a1ad68 | 1998-01-16 | Fredrik Hübinette (Hubbe) | | {
|
47a5f4 | 1998-01-21 | Fredrik Hübinette (Hubbe) | | case "mkdir":
{
io->write(sprintf("%4c",0));
mkdir(combine_path(combine_path(getcwd(),dir),cmd[1]));
io->write(sprintf("%4c",0));
break;
}
case "copy":
{
string from=combine_path(combine_path(getcwd(),dir),cmd[1]);
string to=combine_path(combine_path(getcwd(),dir),cmd[2]);
if(mixed stat=file_stat(to))
if(stat[1]==-2)
to=combine_path(to,cmd[1]);
io->write(sprintf("%4c",0));
io->write(sprintf("%4c",!Stdio.cp(from,to)));
break;
}
|
a1ad68 | 1998-01-16 | Fredrik Hübinette (Hubbe) | | case "getenv":
{
string s=getenv(cmd[1])+"\n";
io->write(sprintf("%4c%s",strlen(s),s));
io->write(sprintf("%4c",0));
io->write(sprintf("%4c",0));
break;
}
default:
mixed err=catch {
p=Process.create_process(cmd,
([
"stdin":io,
"stdout":p2,
"stderr":p2,
"cwd":dir,
])); };
destruct(p2);
if(!err)
{
while(1)
{
string s=pi->read(1000,1);
if(!s || !strlen(s)) break;
io->write(sprintf("%4c%s",strlen(s),s));
}
io->write(sprintf("%4c",0));
io->write(sprintf("%4c",p->wait()));
}else{
io->write(sprintf("%4c",0));
io->write(sprintf("%4c",69));
}
}
io->close("w");
destruct(io);
}
int main(int argc, string *argv)
{
|
d95dc9 | 1998-01-19 | Fredrik Hübinette (Hubbe) | | if(argc<2)
|
a1ad68 | 1998-01-16 | Fredrik Hübinette (Hubbe) | | {
werror("Usage: sprshd <port> <host to accept connections from>\n");
exit(1);
}
if(!bind((int)argv[1]))
{
werror("Failed to bind port.\n");
exit(1);
}
string *hosts=gethostbyname(argv[2])[1];
|
47a5f4 | 1998-01-21 | Fredrik Hübinette (Hubbe) | | write("Ready.\n");
|
a1ad68 | 1998-01-16 | Fredrik Hübinette (Hubbe) | | while(1)
{
if(object io=accept())
{
sscanf(io->query_address(),"%s ",string ip);
if(search(hosts, ip)==-1)
{
destruct(io);
continue;
}
thread_create(handle_incoming_connection,io);
}else{
werror("Accept failed "+errno()+"\n");
}
}
}
|