免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6446 | 回复: 0
打印 上一主题 下一主题

[Mail] 平安夜礼物,让 qmail+vpopmail 禁止弱密码发送邮件的patch [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-12-25 11:00 |只看该作者 |倒序浏览
详细安装操作请见下面的地址:

http://bbs.igenus.org/discuz/vie ... &extra=page%3D1
  1. --- vpopmail-5.4.17/vchkpw.c        2006-05-08 01:07:13.000000000 +0800
  2. +++ vpopmail-5.4.17_new/vchkpw.c        2010-12-24 20:16:34.000000000 +0800
  3. @@ -89,6 +89,7 @@
  4. void login_virtual_user();
  5. void login_system_user();
  6. void read_user_pass();
  7. +void check_weak_passwd();
  8. void vlog(int verror, char *TheUser, char *TheDomain, char *ThePass, char *TheName, char *IpAddr, char *LogLine);
  9. void vchkpw_exit(int err);
  10. void run_command(char *prog);
  11. @@ -200,6 +201,7 @@
  12.     */
  13.    if ( (vpw = vauth_getpw(TheUser, TheDomain)) != NULL ) {
  14.      vget_assign(TheDomain,NULL,0,&pw_uid,&pw_gid);
  15. +    if (ConnType == SMTP_CONN) check_weak_passwd();
  16.      login_virtual_user();

  17. #ifdef ENABLE_PASSWD
  18. @@ -218,7 +220,6 @@
  19.      vchkpw_exit(3);
  20.    }
  21.    vclose();
  22. -
  23.    /* The user is authenticated, now setup the environment */

  24.    /* Set the programs effective group id */
  25. @@ -330,6 +331,46 @@

  26. }

  27. +void check_weak_passwd()
  28. +{
  29. +  char weak[MAX_PW_PASS+1];
  30. +  char path[MAX_BUFF];
  31. +  int dlen, eof, i, weak_flag;
  32. +  FILE *fs;
  33. +
  34. +  weak_flag = 0;
  35. +  dlen = strlen(ThePass);
  36. +  for (i = 1; i < dlen; i++) {
  37. +    if (ThePass[0] != ThePass[i]) {weak_flag++; };
  38. +  }
  39. +
  40. +  if (weak_flag == 0 || strcmp(ThePass, TheUser) == 0) {
  41. +    snprintf(LogLine, sizeof(LogLine), "%s: weak password (pass: '%s') %s@%s:%s",
  42. +      VchkpwLogName, ThePass, TheUser, TheDomain, IpAddr);
  43. +    vlog(VLOG_ERROR_PASSWD, TheUser, TheDomain, ThePass, TheName, IpAddr, LogLine);
  44. +    vchkpw_exit(20);
  45. +  }
  46. +
  47. +  weak[0] = '\0';
  48. +  snprintf (path, sizeof(path), "%s/etc/weakpasswd", VPOPMAILDIR);
  49. +
  50. +  fs = fopen (path, "r");
  51. +  if (fs == NULL) return 0;
  52. +  do {
  53. +    eof = (fgets (weak, sizeof(weak), fs) == NULL);
  54. +    dlen = strlen(weak) - 1;
  55. +    if (weak[dlen] == '\n') { weak[dlen] = '\0'; }
  56. +    if (strcmp(ThePass, weak) == 0) {
  57. +      fclose (fs);
  58. +      snprintf(LogLine, sizeof(LogLine), "%s: weak password (pass: '%s') %s@%s:%s",
  59. +        VchkpwLogName, ThePass, TheUser, TheDomain, IpAddr);
  60. +      vlog(VLOG_ERROR_PASSWD, TheUser, TheDomain, ThePass, TheName, IpAddr, LogLine);
  61. +      vchkpw_exit(20);
  62. +    }
  63. +  }while (!eof);
  64. +  fclose (fs);
  65. +}
  66. +
  67. void read_user_pass()
  68. {
  69.   int i,j,l;
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP