荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: zzt (好好学习,天天向上), 信区: InstallBBS
标  题: [转载] 用户信箱容量的限制(转寄)
发信站: BBS 荔园晨风站 (Tue Jan 25 10:07:38 2000), 转信

【 以下文字转载自 zzt 的信箱 】
【 原文由 zhuzutao.bbs@smth.org 所发表 】
发信人: yanglc (有点累了~~), 信区: BBSMan_Dev
标  题: 用户信箱容量的限制
发信站: BBS 水木清华站 (Wed Jan 19 14:11:28 2000)

在firebird2.65下编译通过,别的版本没试过。
修改其中的"W 特殊权限 1"为"W 大信箱",具有该权限的用户信箱大小为200K,
版主信箱大小为100K,普通用户40K,未通过注册用户为5K。当信箱超过容量时
不能发信,超过容量的两倍时不能收信。
由于修改的文件太多,可能有个别修改了的地方忘了贴上来,要是有编译或使用
不对的,请和我联系,我再检查一下。

1.bbs.c

在int post_reply()的switch (do_send(uid,title))中,加入
  case -4: prints("使用者 '%s' 无法收信,信箱已满\n",uid);break;

2.mail.c

在int do_send()中,加入
if(getmailboxsize(lookupuser)*2<getmailsize(lookupuser))
  return -4;

在int m_send()的switch (do_send(uident,NULL))中,加入
  case -4: prints("[%s] 信箱已满,无法收信\n",uident);break;

修改void mailtitle()为
void mailtitle()
{
    int total,used;
    total=getmailboxsize(currentuser) ;
    used=getmailsize(currentuser);
    showtitle( "邮件选单    ", BoardName );
    prints( "离开[^[[1;32m←^[[m,^[[1;32me^[[m]  选择[^[[1;32m↑^[[m,
       ^[[1;32m↓^[[m]  阅读信件[^[[1;32m→^[[m,^[[1;32mRtn^[[m]  回
       信[^[[1;32mR^[[m]  砍信/清除旧信[^[[1;32md^[[m,^[[1;32mD^[[m]
       求助[^[[1;32mh^[[m]^[[m\n" );
/*这四行应该为一行*/
    prints("^[[1;44m编号   发信者       日 期      标题      您的信箱
       容量为[%4dK],当前已用[%4dK]^[[m\n",total,used);
/*这两行应该为一行*/
    clrtobot() ;
}

添加下面两个函数

int getmailboxsize(user)
struct userec user;
{
    if(user.userlevel&(PERM_LARGEMAIL)) return 200;
    if(user.userlevel&(PERM_BOARDS)) return 100;
    if(user.userlevel&(PERM_LOGINOK)) return 40;
    return 5;
}

int getmailsize(user)
struct userec user;
{
    FILE *tempfile;
    int size;
    char filename[256],cmd[256],mailpath[256];
    sprintf(mailpath,"mail/%c/%s/",toupper(user.userid[0]),user.userid);
    sprintf(filename,"tmp/size.%s.%d",user.userid,uinfo.pid);
    sprintf(cmd,"du %s > %s",mailpath,filename);
    system(cmd);
    if((tempfile=fopen(filename,"r"))==NULL) return 0;
    if((fscanf(tempfile,"%d",&size))==0) return 0;
    fclose(tempfile);
    unlink(filename);
    return size;
}

在int mail_reply()的switch (do_send(uid,title))中,加入
  case -4: prints("[%s] 信箱已满,无法收信\n", uid); break;

在int doforward()的sprintf( genbuf, "确定将文章寄给 %s 吗", address );
前,加入
if(!strpbrk(address,"@."))
if(getmailboxsize(lookupuser)*2<getmailsize(lookupuser)){
   prints("[%s] 信箱已满,无法收信。\n",address);
return -4;
}

在int do_send()的if (!(lookupuser.userlevel & PERM_READMAIL))后,加入
if(getmailboxsize(lookupuser)*2<getmailsize(lookupuser))
  return -4;

3.main.c

在int check_maxmail()中,return(0);前加入
if(getmailboxsize(currentuser)<getmailsize(currentuser)){
  prints("\n\n您的信箱总容量为 %d K,已经使用了 %d K,超出限制。\n",
getmailboxsize(currentuser),getmailsize(currentuser));
  prints("您无法继续寄信。请删除 %d K信件后再寄信。\n",
getmailsize(currentus)-getmailboxsize(currentuser));
  return -4;
}

4.permission.h

修改#define PERM_SPECIAL1 020000000为
#define PERM_LARGEMAIL 020000000

修改"特殊权限 1",               /* PERM_SPECLAI1*/为
"大信箱",               /* PERM_LARGEMAIL*/


--
http://www2.cs.uestc.edu.cn/~yanglc

※ 修改:·yanglc 於 Jan 21 22:20:12 修改本文·[FROM:  162.105.22.146]
※ 来源:·BBS 水木清华站 smth.org·[FROM: 162.105.11.122]
--
※ 转载:·BBS 荔园晨风站 bbs.szu.edu.cn·[FROM: 192.168.1.11]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店