关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » MySQL »MySQL filter的实际配置

    MySQL filter的实际配置

    2010-05-14 16:03:00 出处:ITJS
    分享

    以下的文章主要介绍的是qmailadmin+vpopmail+MySQL filter的实际配置,如果你对其相关的实际操作有兴趣的话,你就可以对以下的文章点击观看了。希望会给你带来一些帮助在MySQL filter的实际配置方面。

    作用于qmail-local(即MDA)的方法。

    这里有几个问题,需要解决。

    1.如何在建用户的时候自动的初始化用户的初始MySQL filter文件.

    2.webmail定义的filter如何起作用。

    3.还有一些是解决这些问题的过程中遇到的问题。

    针对第一个问题,研究了一下qmailadmin,看了代码之后才发现,

    qmailadmin支持插件似的配置文件,在操作用户后,

    运行在插件配置文件中定义的脚本。脚本是针对每个域的,即放在域的目录下面。

    呵呵,网上都没有介绍哦,估计是inter7 unleased.

    域的目录通过/var/qmail/users/assign来定位。例如,assign的内容如下:

    +foo.com-:foo.com:515:511:/home/vpopmail/domains/foo.com:-::  

    则在/home/vpopmail/domains/foo.com下定义一个配置文件.qmailadmin-hooks。注意属

    主和属性,这个配置文件格式如下:

    #....   op: cmd 

    其中到qmailadmin-1.06,op支持以下一些操作

    "adduser",   "deluser",   "moduser",   "addmaillist",   "delmaillist",   "modmaillist",   "listadduser",   "listdeluser"  

    例如:你想在增加用户以后干些事情,就以增加MySQL filter为例,.qmailadmin-hooks

    就可以这么配:

    adduser: /home/vpopmail/bin/inituser.sh

    inituser.sh脚本如下:

    #!/bin/bash   Domain=$1   User=$3   Passwd=$2   DomainPath=/home/vpopmail/domains/$Domain   umask 0177   exec 1> /tmp/adduser.log   exec 2> /tmp/adduser.log   echo $DomainPath   cat>$DomainPath/.qmail-$User <|maildrop $DomainPath/$User/.mailfilter   EOF   cat>$DomainPath/$User/.mailfilter <include $User/.userfilter   EOF   cat>$DomainPath/$User/.userfilter <#MFMAILDROP=2   #   # DO NOT EDIT THIS FILE. This is an automatically generated filter.   FROM='$User@$Domain'   import SENDER   if ($SENDER ne "")   {   FROM=$SENDER   }   to "$DomainPath/$User/Maildir/."   EOF   cat>$DomainPath/$User/Maildir/maildirfilterconfig <MAILDIRFILTERMAILDIRFILTER=../.userfilter   MAILDIR=$DomainPath/$User/Maildir   EOF   

    针对第二个问题,实际上上面inituser.sh已经提供了解决方法,也就是sqwebmail通过

    maildirfilterconfig来查找MySQL filter文件,这里定义的是../.userfilter,它有包含在.mailfiter中,

    而点.mailfilter则是maildrop调用的规则文件。

    这里有几个地方需要解释,

    1..userfilter中的前几行comment是起作用的,是sqwebmail的标记,不能去掉,否则sqwebmail会报错

    2.MAILDIRFILTER为什么不指向.mailfiter,而是.userfilter,一句话方便扩充。可以在.mailfilter中加入

    其它的MySQL filter rule, 而这些rule并不需要用户编辑。

    3..qmailadmin-hook中的脚本是qmailadmin fork出的子进程执行的,qmailadmin由于是以http的用户运行

    所以建立这些文件的时候会有错误。因此,我们改了一点源代码,位置在源码包的qmailadmin*/user.c的

    函数call_hooks的fork之前, 如下:

    + setuid(0);   + setgid(VPOPMAILGID);   + setuid(VPOPMAILUID);   pid = fork();  .

    编译之后qmailadmin后,并替换cgi目录下的文件,注意属主是root和setuid位.

    4.为什么不在inituser.sh中用su来执行,这样就不用改代码了 首先,apache(Unix平台最流行的WEB服务器平台)重定向了stdin,而su是检查

    stdin是不是tty,如果不是,就不会执行。其次,fork出来的子进程是exec的方式执行MySQL filter的配置中指定的命令,

    而exec是不复制euid和egid的,所以如果不用su,就需要用自己编一个suid的程序。这又麻烦了.

    .qmailadmin-hooks如下:

    adduser: /home/vpopmail/bin/inituser.sh   deluser: /home/vpopmail/bin/deluser.sh  

    /var/vpopmail/bin/deluser.sh如下

    #!/bin/bash   Domain=$1   User=$3   Passwd=$2   DomainPath=/home/vpopmail/domains/$Domain   rm -f $DomainPath/.qmail-$User  

    注:原来qmailadmin有bug.

    在源码包的qmailadmin*/user.c的函数call_hooks的这行

    error = execl(cmd, Newu, Domain, Password1, Gecos, NULL);

    这里明显有问题,execl的第二个参数是arg0,实际上不起作用。而Gecos是用户的真实

    用户名,只有在新建的时候才有值,不填就是Newu,所以我以为用户名是$3.

    但是moduser和deluser的时候,操作的用户名都不在Newu里面,而是在ActionUser里面。

    所以hook中定义的deluser和moduser脚本取不到用户名.

    所以需要将这行改为

    if (Newu %26amp;%26amp; *Newu) {   error = execl(cmd, cmd, Newu, Domain, Password1, Gecos, NULL);   } else {   error = execl(cmd, cmd, ActionUser, Domain, Password1, Gecos, NULL);   }  

    而且,如果要方便扩展的话,可以将op也放在execl的参数中,这样,hook中定义的

    脚本就可以用一个。根据op类型来操作。就不像我这样分成好多脚本了。

    所以user.c最终该过后,如下,call_hooks函数的fork附近:

    setuid(0);   setgid(VPOPMAILGID);   setuid(VPOPMAILUID);   pid = fork();   #ifdef DEBUG   fprintf(actout,"Where the parameters are: %s, "%s", %s, %s, %s, %s, NULL); ",   cmd, hooks[hook_type], Newu, Domain, Password1, Gecos);   #endif   if (pid == 0) {   // error = execl(cmd, Newu, Domain, Password1, Gecos, NULL);   if (Newu %26amp;%26amp; *Newu) {   error = execl(cmd, cmd, Newu, Domain, Password1, Gecos, NULL);   } else {   error = execl(cmd, cmd, ActionUser, Domain, Password1, Gecos, NULL);   }   

    而inituser.sh和deluser也需要相应的改参数位置,我只贴上修改的头几行如下:

    #!/bin/sh   User=$1   Domain=$2   Passwd=$3   RealName=$4    

    上面说了这么多内容,是关于对qmailadmin+vpopmail+MySQL filter的配置的介绍,不知道各位对MySQL的认识是不是更上一层楼了,时时关注ITJS,学习最新Mysql技术。

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    帝国CMS7.5编辑器上传图片取消宽高的三种方法

    帝国cms如何自动生成缩略图的实现方法

    Windows 12即将到来,将彻底改变人机交互

    帝国CMS 7.5忘记登陆账号密码怎么办?可以phpmyadmin中重置管理员密码

    帝国CMS 7.5 后台编辑器换行,修改回车键br换行为p标签

    Windows 11 版本与 Windows 10比较,新功能一览

    Windows 11激活产品密钥收集及专业版激活方法

    如何从 Windows 11 中完全删除/卸载 OneNote?无解!

    抖音安全与信任开放日:揭秘推荐算法,告别单一标签依赖

    ultraedit编辑器打开文件时,总是提示是否转换为DOS格式,如何关闭?

    IT头条

    华为Pura80系列新机预热,余承东力赞其复杂光线下的视频拍摄实力

    01:28

    阿里千问3开源首战告捷:全球下载破千万,国产AI模型崛起新高度!

    01:22

    DeepSeek R1小版本试升级:网友实测编程能力已达到国际一线水平

    23:15

    NVIDIA 与 Dell 合作,大规模交付 Blackwell AI 系统

    20:52

    Cerebras 以最快的 Llama 4 Maverick 性能引领 LLM 推理竞赛

    20:51

    技术热点

    PHP中的随机性——你觉得自己幸运吗?

    搞定Ubuntu Linux下WPA无线上网

    Java使用内存映射实现大文件的上传

    MySQL安全性指南

    MySQL两项性能的基本测试浅谈

    教您使用UniqueIdentifier选取SQL Server主键

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。