Nov 29

[原]把boblog博客的用户导入proftpd用户认证数据库 不指定

linuxing , 13:15 , 编程 » Python , 评论(1) , 引用(0) , 阅读(27745) , Via 本站原创 | |
   其实之前的工作都是为了实现这个目的:把boblog博客的用户导入proftpd用户认证数据库。这样,所有博客的用户都可以登陆到FTP上,而我也不用打开匿名FTP了。当然,我也写了一个脚本,让其自动运行。这样,如果用户改了密码,也能及时的反应到proftpd的认证数据库中,挺方便的。

一、前提
在使用下面的脚本前,需要以下前提条件:
引用
1、当然是需要按照前面几篇日志的介绍,搭建好proftpd使用的用户认证数据库,以及安装MySQLdb模块;
2、为支持使用中文的用户名,boblog及proftpd的数据库都应使用UTF-8编码。

二、脚本
该脚本实现的功能比较简单:
引用
1、把boblog中的用户和密码导入proftpd的认证数据库中;
2、当boblog中的用户修改密码后,也会修改proftpd认证数据库中的密码。

内容如下:
引用
#!/bin/env python
# --*-- coding: utf-8 --*--
# 上面这句告诉python用UTF-8编码
# 2007-11-28 11:00
# Author: linuxing#linuxfly.org

import MySQLdb
import sys

host = 'localhost'

# 定义进入boblog数据库的用户名和密码
sourcedb = 'boblog'
s_user = 'linuxing'
s_pwd = 'redflag'

# 定义进入proftpd认证数据库的用户名和密码
targetdb = 'proftp'
t_user = 'linuxing'
t_pwd = 'redflag'

# 定义这些用户的默认uid和gid
t_uid = 1000
t_gid = 1000

# 当进入数据库的信息错误时,捕捉异常并处理
try:
   #使用utf8编码连接
   s_conn = MySQLdb.Connection(host,s_user,s_pwd,sourcedb,use_unicode=1,charset='utf8')
   t_conn = MySQLdb.Connection(host,t_user,t_pwd,targetdb,use_unicode=1,charset='utf8')
except:
   print '''Open source or target database fail.\nPlease confirm content of scripts.'''
   sys.exit(1)

#修正sys的默认编码,否则若把脚本输出导入管道会报UnicodeEncodeError错误的
reload(sys)
sys.setdefaultencoding('gb2312')

s_cur = s_conn.cursor()
s_cur.execute('select username,userpsw from boblog_user');
s_row = s_cur.fetchall()
# 使用for循环得到每一行的tuple
for rowone in s_row:
   ftpuser,ftppwd = rowone
   t_cur = t_conn.cursor()
   sqlstring = "select userid from FTPUSERS where userid='%s'" % ftpuser
   t_cur.execute(sqlstring)
   #这里其实可以用简单的判断execute方法返回的值是否为0L即可
   t_row = t_cur.fetchone()
   if t_row == None:
       sqlstring = "insert into FTPUSERS(userid,passwd,uid,gid,lastime) values ('%s','%s',%i,%i,%s)" %(ftpuser,ftppwd,t_uid,t_gid,'now()')
       t_cur.execute(sqlstring)
       print 'insert ftp user: %s.' %ftpuser
       t_conn.commit()
   else:
       sqlstring = "update FTPUSERS set passwd ='%s' where userid ='%s'" %(ftppwd,ftpuser)
       t_cur.execute(sqlstring)
       print 'update ftp user %s.' %ftpuser
       t_conn.commit()
print 'Everything is OK.'

源码下载:

把这个脚本放到计划任务中定时运行即可。

三、参考资料
http://bbs.chinaunix.net/archiver/?tid-833164.html
Tags: , ,
xiaobian Homepage
2009/05/15 15:06
谢谢。
分页: 1/1 第一页 1 最后页
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]