summaryrefslogtreecommitdiffstats
path: root/sftp_server/main.c
diff options
context:
space:
mode:
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 163ab758..b9811f9c 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;
}
-