source
twoprocess.c
line
171 - 241
処理の流れ
171 static void
172 process_login_req(struct vsf_session* p_sess)
173 {
174 enum EVSFPrivopLoginResult e_login_result = kVSFLoginNull;
175 char cmd;
176 vsf_sysutil_unblock_sig(kVSFSysUtilSigCHLD);
177 /* Blocks */
178 cmd = priv_sock_get_cmd(p_sess);
179 vsf_sysutil_block_sig(kVSFSysUtilSigCHLD);
180 if (cmd != PRIV_SOCK_LOGIN)
181 {
182 die("bad request");
183 }
184 /* Get username and password - we must distrust these */
185 {
186 struct mystr password_str = INIT_MYSTR;
187 priv_sock_get_str(p_sess, &p_sess->user_str);
188 priv_sock_get_str(p_sess, &password_str);
189 e_login_result = vsf_privop_do_login(p_sess, &password_str);
190 str_free(&password_str);
191 }
192 switch (e_login_result)
193 {
194 case kVSFLoginFail:
195 priv_sock_send_result(p_sess, PRIV_SOCK_RESULT_BAD);
196 return;
197 break;
198 case kVSFLoginAnon:
199 str_alloc_text(&p_sess->user_str, tunable_ftp_username);
200 common_do_login(p_sess, &p_sess->user_str, 1, 1);
201 break;
202 case kVSFLoginReal:
203 {
204 int do_chroot = 0;
205 if (tunable_chroot_local_user)
206 {
207 do_chroot = 1;
208 }
209 if (tunable_chroot_list_enable)
210 {
211 struct mystr chroot_list_file = INIT_MYSTR;
212 int retval = str_fileread(&chroot_list_file,
213 tunable_chroot_list_file,
214 VSFTP_CONF_FILE_MAX);
215 if (vsf_sysutil_retval_is_error(retval))
216 {
217 die2("could not open chroot() list file:",
218 tunable_chroot_list_file);
219 }
220 if (str_contains_line(&chroot_list_file, &p_sess->user_str))
221 {
222 if (do_chroot)
223 {
224 do_chroot = 0;
225 }
226 else
227 {
228 do_chroot = 1;
229 }
230 }
231 str_free(&chroot_list_file);
232 }
233 common_do_login(p_sess, &p_sess->user_str, do_chroot, 0);
234 }
235 break;
236 default:
237 bug("weird state in process_login_request");
238 break;
239 }
240 /* NOTREACHED */
241 }
function
171 static void
172 process_login_req(struct vsf_session* p_sess)
173 {
174 enum EVSFPrivopLoginResult e_login_result = kVSFLoginNull;
175 char cmd;
176 vsf_sysutil_unblock_sig(kVSFSysUtilSigCHLD);
177 /* Blocks */
178 cmd = priv_sock_get_cmd(p_sess);
179 vsf_sysutil_block_sig(kVSFSysUtilSigCHLD);
180 if (cmd != PRIV_SOCK_LOGIN)
181 {
182 die("bad request");
183 }
184 /* Get username and password - we must distrust these */
185 {
186 struct mystr password_str = INIT_MYSTR;
187 priv_sock_get_str(p_sess, &p_sess->user_str);
188 priv_sock_get_str(p_sess, &password_str);
189 e_login_result = vsf_privop_do_login(p_sess, &password_str);
190 str_free(&password_str);
191 }
192 switch (e_login_result)
193 {
194 case kVSFLoginFail:
195 priv_sock_send_result(p_sess, PRIV_SOCK_RESULT_BAD);
196 return;
197 break;
198 case kVSFLoginAnon:
199 str_alloc_text(&p_sess->user_str, tunable_ftp_username);
200 common_do_login(p_sess, &p_sess->user_str, 1, 1);
201 break;
202 case kVSFLoginReal:
203 {
204 int do_chroot = 0;
205 if (tunable_chroot_local_user)
206 {
207 do_chroot = 1;
208 }
209 if (tunable_chroot_list_enable)
210 {
211 struct mystr chroot_list_file = INIT_MYSTR;
212 int retval = str_fileread(&chroot_list_file,
213 tunable_chroot_list_file,
214 VSFTP_CONF_FILE_MAX);
215 if (vsf_sysutil_retval_is_error(retval))
216 {
217 die2("could not open chroot() list file:",
218 tunable_chroot_list_file);
219 }
220 if (str_contains_line(&chroot_list_file, &p_sess->user_str))
221 {
222 if (do_chroot)
223 {
224 do_chroot = 0;
225 }
226 else
227 {
228 do_chroot = 1;
229 }
230 }
231 str_free(&chroot_list_file);
232 }
233 common_do_login(p_sess, &p_sess->user_str, do_chroot, 0);
234 }
235 break;
236 default:
237 bug("weird state in process_login_request");
238 break;
239 }
240 /* NOTREACHED */
241 }
最終更新:2009年03月04日 01:04