BBS水木清华站∶精华区
发信人: adoal (阿豆·98柔情篇·玩仙剑爱上林月如), 信区: Linux
标 题: 改造FreeBSD ftpd
发信站: BBS 水木清华站 (Thu Mar 11 16:49:42 1999)
FreeBSD的小ftpd在控制上不灵活,
偶一怒之下把它改了改,
让它用login.access的user/host pair
来控制登录许可。
真是easy的不得了。ftpd里有个
INTERNAL_LS的例子,参考着一改就改出来了。
下面是ftpd.diff
X-----Cut Here
diff -r -u ftpd.orig/Makefile ftpd/Makefile
--- ftpd.orig/Makefile Thu Mar 11 14:11:58 1999
+++ ftpd/Makefile Thu Mar 11 14:19:39 1999
@@ -19,6 +19,13 @@
CFLAGS+=-DINTERNAL_LS -Dmain=ls_main -I${.CURDIR}/${LSDIR}
.endif
+.ifdef FTPD_LOGIN_ACCESS
+LADIR= ../../usr.bin/login
+.PATH: ${.CURDIR}/${LADIR}
+SRCS+= login_access.c
+CFLAGS+=-DLOGIN_ACCESS
+.endif
+
.if exists(${DESTDIR}/usr/lib/libkrb.a) && defined(MAKE_KERBEROS4)
.PATH: ${.CURDIR}/../../usr.bin/login
SRCS+= klogin.c
diff -r -u ftpd.orig/ftpd.c ftpd/ftpd.c
--- ftpd.orig/ftpd.c Thu Mar 11 14:11:58 1999
+++ ftpd/ftpd.c Thu Mar 11 14:16:09 1999
@@ -250,6 +250,10 @@
static void reapchild __P((int));
static void logxfer __P((char *, long, long));
+#ifdef LOGIN_ACCESS
+int login_access(char*, char*);
+#endif
+
static char *
curdir()
{
@@ -816,7 +820,11 @@
break;
endusershell();
+#ifdef LOGIN_ACCESS
+ if (cp == NULL || !login_access(name, remotehost)) {
+#else
if (cp == NULL || checkuser(_PATH_FTPUSERS, name, 1)) {
+#endif
reply(530, "User %s access denied.", name);
if (logging)
syslog(LOG_NOTICE,
X-----Cut Here
--
我是花 你是谁 瓶中只有泪没有水
我是风 你是谁 那风筝无风怎么去飞
我是雪 你是谁 冬去春来就化成了水
我是月 你是谁 是谁无偿地伴你度过漫漫长夜
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 210.32.137.16]
BBS水木清华站∶精华区