cygwin下ht www问题的解决方案

本文给出了dinger@YTHT在YTHT WWW cygwin下的几个问题解决方案,包括用户登陆错误、WEB方式注册写不上.PASSWDS文件、刷新同一page出现Error等问题,详细分析了问题原因并给出了相应的代码修改方案,目前这些方案未见异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下面几个问题是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);      

本解决方案目前未见异常

C:\Users\Lenovo>pip install astra-toolbox Looking in indexes: https://mirrors.sustech.edu.cn/pypi/simple/ Collecting astra-toolbox Using cached https://mirrors.sustech.edu.cn/pypi/packages/f8/c2/a6a53a7aef3c08f93fa3efe427dc15a3b379cce5d8ec6f2b80f63e98845d/astra-toolbox-1.8b5.tar.gz (452 kB) Preparing metadata (setup.py) ... done Requirement already satisfied: numpy in d:\anaconda3\envs\ctimage\lib\site-packages (from astra-toolbox) (2.0.2) Requirement already satisfied: six in d:\anaconda3\envs\ctimage\lib\site-packages (from astra-toolbox) (1.17.0) Collecting scipy (from astra-toolbox) Using cached https://mirrors.sustech.edu.cn/pypi/packages/3e/77/dab54fe647a08ee4253963bcd8f9cf17509c8ca64d6335141422fe2e2114/scipy-1.13.1-cp39-cp39-win_amd64.whl (46.2 MB) Collecting cython (from astra-toolbox) Using cached https://mirrors.sustech.edu.cn/pypi/packages/6d/c8/66c63e895f6f2fea8e769c3a56ade2140403904fc63ab2e3e5b6443a5e8f/Cython-3.0.12-cp39-cp39-win_amd64.whl (2.8 MB) Building wheels for collected packages: astra-toolbox Building wheel for astra-toolbox (setup.py) ... error error: subprocess-exited-with-error × python setup.py bdist_wheel did not run successfully. │ exit code: 1 ╰─> [12 lines of output] Traceback (most recent call last): File "<string>", line 2, in <module> File "<pip-setuptools-caller>", line 34, in <module> File "C:\Users\Lenovo\AppData\Local\Temp\pip-install-s84ervbh\astra-toolbox_8d0413dcee024a51b783bba1086333a4\setup.py", line 76, in <module> subprocess.call(['./autogen.sh']) File "D:\anaconda3\envs\ctimage\lib\subprocess.py", line 349, in call with Popen(*popenargs, **kwargs) as p: File "D:\anaconda3\envs\ctimage\lib\subprocess.py", line 951, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, File "D:\anaconda3\envs\ctimage\lib\subprocess.py", line 1436, in _execute_child hp, ht, pid, tid = _winapi.CreateProcess(exec
最新发布
03-26
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值