cygwin下ht www问题的解决方案

下面几个问题是dinger@YTHT在YTHT WWW cygwin下的几个解决方案

1. 解决用户登陆时的错误问题                                           
问题:用户登陆时Error
应急解决:nju09/bbslogin.c
static char *
check_multi(char *id, int uid)
{
       int i, uent, nsearch;
       if (uid <= 0 || uid > MAXUSERS)
               return NULL;
       if (1 && strcasecmp(id, "guest")) {
               //这种算法, wwwlogin必须限制登录窗口数目, 否则
               //上线名单会被轻易冲爆
               for (i = 3; i < 6; i++) {
                       uent = uindexshm->user[uid - 1][i]/* - 1*/;   

2现象:使用WEB方式注册写不上.PASSWDS文件
分析:
adduser()[bbsdoreg.c]在打开.PASSWDS文件并加锁的的情况下
调用save_user_rec()[BBSLIB.c]
后者再次打开该文件,并试图写入 导致写入失败
其实adduser()在调用save_user_rec()之后
已经不再访问文件
所以解决方法是在调用save_user_rec()之前关闭该文件
此改法目前未见异常
解决:[bbsdoreg.c]
int
adduser(struct userec *x)
{
       int i;
       FILE *fp;
       fp = fopen(".PASSWDS", "r+");
       flock(fileno(fp), LOCK_EX);
       if (getuser(x->userid)) {
               flock(fileno(fp), LOCK_UN);
               fclose(fp);
               return -1;
       }
       flock(fileno(fp), LOCK_UN);                          
       fclose(fp);                                                         

       for (i = 0; i < MAXUSERS; i++) {
               if (shm_ucache->userid[i][0] == 0) {
                       if (i + 1 > shm_ucache->number)
                               shm_ucache->number = i + 1;
                       strncpy(shm_ucache->userid[i], x->userid, 13);
                       insertuseridhash(uidhashshm->uhi, UCACHE_HASH_SIZE,
                                        x->userid, i + 1);
                       save_user_rec(x);
                       break;
               }
       }
     //flock(fileno(fp), LOCK_UN);                                         
     //fclose(fp);                                                         
       return 0;
       //utime(FLUSH, NULL);
}

3现象:刷新同一page有时出现Error

分析:cache_header()[BBSLIB.c]中
调用strptime()时使用了不被支持的"%Z"
导致strptime()失败

解决:定位cache_header()[BBSLIB.c]
修改前:
strptime(old, "%a, %d %b %Y %H:%M:%S %Z", &tm);
修改后:
strptime(old, "%a, %d %b %Y %H:%M:%S GMT", &tm);      

本解决方案目前未见异常

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值