- 主题:有没有人研究过注册id的这段代码的?
register.c文件
new_register() 函数中,
{
...
allocid = getnewuserid2(newuser.userid);
if (allocid > MAXUSERS || allocid <= 0) {
prints("抱歉, 由于某些系统原因, 无法注册新的帐号.\n\r");
oflush();
sleep(2);
exit(1);
}
newbbslog(BBSLOG_USIES, "APPLY: %s uid %d from %s", newuser.userid, allocid, getSession()->fromhost);
update_user(&newuser, allocid, 1);
...
}
其中update_user()函数 实现的是 把newuser 结构体 所存储的新用户的 信息 copy 到内存中uidshm->passwd[allocid-1] 的位置,
所以,allocid 是存储新注册用户 id 的位置参数。
而它是通过getnewuserid2 函数获得的,而getnewuserid2调用了getnewuserid3函数,其中是通过返回一个select(m_socket + 1, &rfds, NULL, NULL, &tv); 获得的。
但是我不明白,为什么新注册用户的 存储位置 是和socket 产生,而不是 从passwds 文件中 信息 去获得。 请研究过的 大侠 给与指教。小弟感激不尽...
--
FROM 222.28.73.*
是连接userd获取的
【 在 hanxuema (汗血马) 的大作中提到: 】
: register.c文件
: new_register() 函数中,
: {
: ...................
--
FROM 211.151.89.*
请说清楚些啊
我不够聪明...
连接user 的socket 描述符等等 作为参数 产生 的值 就可以作为 uidshm->passwd[] 的位置吗?
合理吗?
【 在 pig2532 (猪猪猪) 的大作中提到: 】
: 是连接userd获取的
--
FROM 222.28.73.*
不是socket描述符
是从socket读取一个数据
这个数据是userd传送过来的
【 在 hanxuema (汗血马) 的大作中提到: 】
: 请说清楚些啊
: 我不够聪明...
: 连接user 的socket 描述符等等 作为参数 产生 的值 就可以作为 uidshm->passwd[] 的位置吗?
: ...................
--
FROM 211.151.89.*
你的意思是 是用户进程 决定 该新id在passwd里面的位置了?
【 在 pig2532 (猪猪猪) 的大作中提到: 】
: 不是socket描述符
: 是从socket读取一个数据
: 这个数据是userd传送过来的
--
FROM 222.28.73.*
userd是daemon/miscd.c启动的
【 在 hanxuema (汗血马) 的大作中提到: 】
: 你的意思是 是用户进程 决定 该新id在passwd里面的位置了?
--
FROM 128.12.150.*
是啊
这个位置序号是由userd决定的
【 在 hanxuema@newsmth.net-SPAM.no (汗血马) 的大作中提到: 】
: 你的意思是 是用户进程 决定 该新id在passwd里面的位置了?
--
FROM 59.66.172.*