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水木清华站∶精华区