summaryrefslogtreecommitdiffstats
path: root/sftp_server/config.c
diff options
context:
space:
mode:
authorAris Adamantiadis <aris@0xbadc0de.be>2005-08-29 14:29:07 +0000
committerAris Adamantiadis <aris@0xbadc0de.be>2005-08-29 14:29:07 +0000
commitbcb6bf25fa132421672d0782b9bfdb82fd2c6600 (patch)
tree90e46158b0fed3063dfd752a7f27bd6f49f827da /sftp_server/config.c
parentddd650b3bd10fa3f2198bc7c63bc75eb3ad0cdc5 (diff)
downloadlibssh-bcb6bf25fa132421672d0782b9bfdb82fd2c6600.tar.gz
libssh-bcb6bf25fa132421672d0782b9bfdb82fd2c6600.tar.xz
libssh-bcb6bf25fa132421672d0782b9bfdb82fd2c6600.zip
the server now does the chroot and change uid.
There is also an option "nopassword" for ftp users. git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@25 7dcaeef0-15fb-0310-b436-a5af3365683c
Diffstat (limited to 'sftp_server/config.c')
-rw-r--r--sftp_server/config.c52
1 files changed, 52 insertions, 0 deletions
diff --git a/sftp_server/config.c b/sftp_server/config.c
index be69d07..3dc2bc6 100644
--- a/sftp_server/config.c
+++ b/sftp_server/config.c
@@ -136,6 +136,8 @@ int group_callback(const char *shortvar, const char *var, const char *arguments,
if(!strcasecmp(shortvar,"chroot")){
current_group->chroot=strdup(value);
}
+ if(!strcasecmp(shortvar,"nopassword"))
+ current_group->nopassword=1;
}
return LC_CBRET_OKAY;
}
@@ -278,6 +280,7 @@ int parse_config(char *file){
r=lc_register_callback("group.uid",0,LC_VAR_UNKNOWN,group_callback,NULL);
r=lc_register_callback("group.chroot",0,LC_VAR_UNKNOWN,group_callback,NULL);
r=lc_register_callback("group.group",0,LC_VAR_UNKNOWN,group_callback,NULL);
+ r=lc_register_callback("group.nopassword",0,LC_VAR_NONE,group_callback,NULL);
// lc_register_var("dir", LC_VAR_SECTION, NULL, 0);
r=lc_register_callback("dir",0,LC_VAR_NONE,dir_callback,NULL);
r=lc_register_callback("dir.list",0,LC_VAR_UNKNOWN,dir_callback,NULL);
@@ -291,3 +294,52 @@ int parse_config(char *file){
list_config();
return 0;
}
+
+list *find_groups(char *user){
+ return list_find(users,user);
+}
+
+char *user_chroot(char *user){
+ char *c_grp;
+ list *group=find_groups(user);
+ struct group *grp;
+ while(group){
+ c_grp=group->key;
+ grp=list_find(groups,c_grp);
+ if(grp->chroot)
+ return grp->chroot;
+ group=group->next;
+ }
+ return NULL;
+}
+
+char *user_uid(char *user){
+ char *c_grp;
+ list *group=find_groups(user);
+ struct group *grp;
+ while(group){
+ c_grp=group->key;
+ grp=list_find(groups,c_grp);
+ if(grp->uid)
+ return grp->uid;
+ group=group->next;
+ }
+ return NULL;
+}
+
+/* 0 if it's not specified. 1 if the user doesn't need a password */
+int user_nopassword(char *user){
+ char *c_grp;
+ list *group=find_groups(user);
+ struct group *grp;
+ if(!group)
+ return 0; //user doesn't exist
+ while(group){
+ c_grp=group->key;
+ grp=list_find(groups,c_grp);
+ if(grp->nopassword)
+ return 1;
+ group=group->next;
+ }
+ return 0;
+}