Nov
29
[原]把boblog博客的用户导入proftpd用户认证数据库
其实之前的工作都是为了实现这个目的:把boblog博客的用户导入proftpd用户认证数据库。这样,所有博客的用户都可以登陆到FTP上,而我也不用打开匿名FTP了。当然,我也写了一个脚本,让其自动运行。这样,如果用户改了密码,也能及时的反应到proftpd的认证数据库中,挺方便的。
一、前提
在使用下面的脚本前,需要以下前提条件:
二、脚本
该脚本实现的功能比较简单:
内容如下:
源码下载:
把这个脚本放到计划任务中定时运行即可。
三、参考资料
http://bbs.chinaunix.net/archiver/?tid-833164.html
一、前提
在使用下面的脚本前,需要以下前提条件:
引用
1、当然是需要按照前面几篇日志的介绍,搭建好proftpd使用的用户认证数据库,以及安装MySQLdb模块;
2、为支持使用中文的用户名,boblog及proftpd的数据库都应使用UTF-8编码。
2、为支持使用中文的用户名,boblog及proftpd的数据库都应使用UTF-8编码。
二、脚本
该脚本实现的功能比较简单:
引用
1、把boblog中的用户和密码导入proftpd的认证数据库中;
2、当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.'
# --*-- 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
xiaobian
2009/05/15 15:06
谢谢。
分页: 1/1 1