summaryrefslogtreecommitdiffstats
path: root/sftp_server/main.c
diff options
context:
space:
mode:
authorAris Adamantiadis <aris@0xbadc0de.be>2005-08-31 00:00:36 +0000
committerAris Adamantiadis <aris@0xbadc0de.be>2005-08-31 00:00:36 +0000
commit8963144850a17aa961b53ad3b036eb71b628d111 (patch)
tree128c9c35e1aed49bc75954394d03ad63997e7983 /sftp_server/main.c
parenta8b5d63e14af539ea417f4752850ff300055a0ad (diff)
downloadlibssh-8963144850a17aa961b53ad3b036eb71b628d111.tar.gz
libssh-8963144850a17aa961b53ad3b036eb71b628d111.tar.xz
libssh-8963144850a17aa961b53ad3b036eb71b628d111.zip
server goes into backgroup
server accepts command line arguments server write comments into the configuration file. git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@31 7dcaeef0-15fb-0310-b436-a5af3365683c
Diffstat (limited to 'sftp_server/main.c')
-rw-r--r--sftp_server/main.c44
1 files changed, 35 insertions, 9 deletions
diff --git a/sftp_server/main.c b/sftp_server/main.c
index 163ab75..b9811f9 100644
--- a/sftp_server/main.c
+++ b/sftp_server/main.c
@@ -70,6 +70,10 @@ CHANNEL *recv_channel(SSH_SESSION *session){
return chan;
}
+void usage(char *prog){
+ fprintf(stderr,"Usage : %s [-vD] [-f config]\n",prog);
+}
+
int main(int argc, char **argv){
SSH_OPTIONS *options=ssh_options_new();
SSH_SESSION *session;
@@ -77,11 +81,27 @@ int main(int argc, char **argv){
CHANNEL *chan=NULL;
SFTP_SESSION *sftp=NULL;
int ret;
+ int donotfork=0;
+ char *config="mercurius.conf";
ssh_options_getopt(options,&argc,argv);
- if(argc>1)
- ret=parse_config(argv[1]);
- else
- ret=parse_config("mercurius.conf");
+ while((ret=getopt(argc, argv, "Df:"))!=-1){
+ switch(ret){
+ case 'D':
+ donotfork=1;
+ break;
+ case 'f':
+ config=strdup(optarg);
+ break;
+ case '?':
+ usage(argv[0]);
+ exit(1);
+ }
+ }
+ if(optind<argc) {
+ usage(argv[0]);
+ exit(1);
+ }
+ ret=parse_config(config);
if(ret != 0){
printf("Error parsing configuration file\n");
return 1;
@@ -94,7 +114,7 @@ int main(int argc, char **argv){
ssh_options_set_dsa_server_key(options,dsa);
if(rsa)
ssh_options_set_rsa_server_key(options,rsa);
- printf("port : %d\n",port);
+ //printf("port : %d\n",port);
if(port!=0)
ssh_options_set_port(options,port);
ssh_bind=ssh_bind_new();
@@ -104,6 +124,12 @@ int main(int argc, char **argv){
return 1;
}
signal(SIGCHLD,SIG_IGN);
+ if(!donotfork){
+ ssh_say(1,"Going into background...\n");
+ if(fork()){
+ exit(0);
+ }
+ }
while(1){
session=ssh_bind_accept(ssh_bind);
if(!session){
@@ -117,7 +143,7 @@ int main(int argc, char **argv){
}
ssh_bind_free(ssh_bind);
- printf("Socket connected : %d\n",ssh_get_fd(session));
+ //printf("Socket connected : %d\n",ssh_get_fd(session));
if(ssh_accept(session)){
printf("ssh_accept : %s\n",ssh_get_error(session));
return 1;
@@ -126,7 +152,7 @@ int main(int argc, char **argv){
printf("error : %s\n",ssh_get_error(session));
return 1;
}
- printf("user authenticated\n");
+ ssh_say(1,"user authenticated\n");
chan=recv_channel(session);
if(!chan){
printf("error : %s\n",ssh_get_error(session));
@@ -137,9 +163,9 @@ int main(int argc, char **argv){
printf("error : %s\n",ssh_get_error(session));
return 1;
}
- printf("Sftp session open by client\n");
+ ssh_say(1,"Sftp session open by client\n");
sftploop(session,sftp);
+ ssh_say(1,"Client disconnected\n");
ssh_disconnect(session);
return 0;
}
-