/* 创建以username为名,以passwd为密码的用户 */ void add_bbsid(char *username, char *passwd) { struct userec *newuser; int unum; char path[PATHLEN]; char buf[PATHLEN]; unum = getnewuserid(username); if (unum > MAXUSERS || unum <= 0) { clean_ipc(); error("%s: unum error", username); } strcpy(buf, username); unum = getuser(buf, &newuser); setpasswd(passwd, newuser); if (!strcmp(username, "SYSOP")) { newuser->flags = (char)1; strcpy(newuser->username, "系统管理员"); newuser->userdefine[0] = (unsigned int)3221224447U; newuser->userdefine[1] = (unsigned int)4294967295U; newuser->userlevel = (unsigned int)0xDAFFDFFF; } else if (!strcmp(username, "guest")) { newuser->flags = (char)9; newuser->userlevel = (unsigned int)536879104U; strcpy(newuser->username, "和谐"); newuser->userdefine[0] = (unsigned int)3221224447U; newuser->userdefine[1] = (unsigned int)4294967295U; } update_user(newuser, unum, 1); newbbslog(BBSLOG_USIES, "APPLY: %s uid %d from %s", newuser->userid, unum, "127.0.0.1"); bbslog("user", "%s", "new account"); usage("add user %s", username); sethomepath(path, newuser->userid); sprintf(buf, "/bin/mv -f %s %s/homeback/%s", path, BBSHOME, newuser->userid); system(buf); sprintf(buf, "/bin/mv -f %s %s/mailback/%s", path, BBSHOME, newuser->userid); system(buf); if (strcmp(username, "guest")) /* 不给 guest 发信 */ mail_file(DELIVER, "etc/tonewuser", newuser->userid, "致新注册用户的信", 0, NULL); }
void userd() { int m_socket; #ifdef HAVE_IPV6_SMTH struct sockaddr_in6 sin; #else struct sockaddr_in sin; #endif int sinlen = sizeof(sin); int opt = 1; bzero(&sin, sizeof(sin)); #ifdef HAVE_IPV6_SMTH if ((m_socket = socket(PF_INET6, SOCK_STREAM, IPPROTO_TCP)) < 0) #else if ((m_socket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) #endif { bbslog("3system", "userd:socket %s", strerror(errno)); exit(-1); } setsockopt(m_socket, SOL_SOCKET, SO_REUSEADDR, &opt, 4); memset(&sin, 0, sinlen); #ifdef HAVE_IPV6_SMTH sin.sin6_family = AF_INET6; sin.sin6_port = htons(USERD_PORT); inet_pton(AF_INET6, "::1", &sin.sin6_addr); #else sin.sin_family = AF_INET; sin.sin_port = htons(USERD_PORT); #ifdef HAVE_INET_ATON inet_aton("127.0.0.1", &sin.sin_addr); #elif defined HAVE_INET_PTON inet_pton(AF_INET, "127.0.0.1", &sin.sin_addr); #else /* Is it OK? */ my_inet_aton("127.0.0.1", &sin.sin_addr); #endif #endif /* IPV6 */ if (0 != bind(m_socket, (struct sockaddr *) &sin, sizeof(sin))) { bbslog("3system", "userd:bind %s", strerror(errno)); exit(-1); } if (0 != listen(m_socket, 5)) { bbslog("3system", "userd:listen %s", strerror(errno)); exit(-1); } while (1) { int sock, id; sock = getrequest(m_socket); #ifndef SECONDSITE if (!strcmp(cmd, "NEW")) id = getnewuserid(username); else #endif if (!strcmp(cmd, "SET")) { setuserid2(num, username); id = 0; } else if (!strcmp(cmd, "DEL")) { setuserid2(num, ""); id = 0; } else continue; putrequest(sock, id); } return; }
void new_register(void) { char userid[IDLEN + 1], passwd[PASSLEN], passbuf[PASSLEN], log[STRLEN]; #ifndef FDQUAN char code[IDLEN+1]; const char *verify_num; int sec; #endif if (dashf("NOREGISTER")) { ansimore("NOREGISTER", NA); pressreturn(); return; } ansimore("etc/register", NA); #ifndef FDQUAN if (!askyn("���Ƿ�ͬ�ⱾվAnnounce�澫����x-3Ŀ¼����վ��?", false, false)) return 0; #endif int tried = 0; prints("\n"); while (1) { if (++tried >= 9) { prints("\n�ݰݣ���̫���� <Enter> ��...\n"); refresh(); return; } #ifndef FDQUAN verify_num = generate_verify_num(); getdata(0, 0, "������������ʾ������: ", code, IDLEN + 1, DOECHO, YEA); #endif getdata(0, 0, "�������ʺ����� (Enter User ID, \"0\" to abort): ", userid, sizeof(userid), DOECHO, YEA); if (userid[0] == '0') return; const char *errmsg = invalid_userid(userid); if (errmsg != NULL) { outs(errmsg); continue; } #ifndef FDQUAN sec = random() % 5; prints("Ϊ����������ע���߳�ͻ...�����ĵȺ� %d ��...\n", sec); oflush(); sleep(sec); if (strcmp(verify_num, code)) { snprintf(log, sizeof(log), "verify '%s' error with code %s!=%s from %s", userid, verify_num, code, fromhost); report(log, currentuser.userid); prints("��Ǹ, ���������֤�벻��ȷ.\n"); continue; } snprintf(log, sizeof(log), "verify '%s' with code %s from %s ", userid, code, fromhost); report(log, currentuser.userid); #endif char path[HOMELEN]; sethomepath(path, userid); if (dosearchuser(userid, ¤tuser, &usernum) || dashd(path)) prints("���ʺ��Ѿ�����ʹ��\n"); else break; } for (tried = 0; tried <= MAX_SET_PASSWD_TRIES; ++tried) { passbuf[0] = '\0'; getdata(0, 0, "���趨�������� (Setup Password): ", passbuf, sizeof(passbuf), NOECHO, YEA); if (strlen(passbuf) < 4 || !strcmp(passbuf, userid)) { prints("����̫�̻���ʹ���ߴ�����ͬ, ����������\n"); continue; } strlcpy(passwd, passbuf, PASSLEN); getdata(0, 0, "��������һ���������� (Reconfirm Password): ", passbuf, PASSLEN, NOECHO, YEA); if (strncmp(passbuf, passwd, PASSLEN) != 0) { prints("�����������, ��������������.\n"); continue; } passwd[8] = '\0'; break; } if (tried > MAX_SET_PASSWD_TRIES) return; struct userec newuser; #ifdef ALLOWSWITCHCODE fill_new_userec(&newuser, userid, passwd, !convcode); #else fill_new_userec(&newuser, userid, passwd, true); #endif /* added by roly */ sprintf(genbuf, "/bin/rm -fr %s/mail/%c/%s", BBSHOME, toupper(newuser.userid[0]), newuser.userid) ; system(genbuf); sprintf(genbuf, "/bin/rm -fr %s/home/%c/%s", BBSHOME, toupper(newuser.userid[0]), newuser.userid) ; system(genbuf); /* add end */ int allocid = getnewuserid(); if (allocid > MAXUSERS || allocid <= 0) { prints("No space for new users on the system!\n\r"); return; } setuserid(allocid, newuser.userid); if (substitut_record(PASSFILE, &newuser, sizeof(newuser), allocid) == -1) { prints("too much, good bye!\n"); return; } if (!dosearchuser(newuser.userid, ¤tuser, &usernum)) { prints("User failed to create\n"); return; } snprintf(log, sizeof(log), "new account from %s", fromhost); report(log, currentuser.userid); prints("�����µ�¼ %s ����дע����Ϣ\n", newuser.userid); pressanykey(); return; }