精華區beta PttNewhand 關於我們 聯絡資訊
2015/02/08 定期更新 1. [使用者條款] 因應新使用者條款實施,登入後必須同意過一次才能使用服務。         這個流程可能造成手機 APP 出現無法登入之情形,請嘗試使用一般         telnet 程式登入操作。 pttbbs.conf /* 若定義, 在使用者註冊之前, 會先顯示出該檔案, 經使用者確認後才能註冊 */ #define HAVE_USERAGREEMENT "etc/UserAgreement" #define HAVE_USERAGREEMENT_VERSION "etc/UserAgreementVersion" #define HAVE_USERAGREEMENT_ACCEPTABLE "etc/UserAgreementAcceptable" pttstruct.h uint8_t ua_version; /* Applicable user agreement version */   register.c static uint8_t get_system_user_agreement_version() { unsigned int version = 0; #ifdef HAVE_USERAGREEMENT_VERSION FILE *fp = fopen(HAVE_USERAGREEMENT_VERSION, "r"); if (fp != NULL) { fscanf(fp, "%u", &version); fclose(fp); } if (version > 255) version = 0; #endif return version; } #define UAVER_OK (0) #define UAVER_UNKNOWN (-1) #define UAVER_OUTDATED (-2) static int check_user_agreement_version(uint8_t version) { #ifdef HAVE_USERAGREEMENT_ACCEPTABLE FILE *fp = fopen(HAVE_USERAGREEMENT_ACCEPTABLE, "r"); if (fp == NULL) return UAVER_UNKNOWN; int result = UAVER_OUTDATED; unsigned int acceptable; while (fscanf(fp, "%u", &acceptable) == 1) { if (version == acceptable) { result = UAVER_OK; break; } } fclose(fp); return result; #else return UAVER_OK; #endif } static int accept_user_aggrement() { #ifdef HAVE_USERAGREEMENT int haveag = more(HAVE_USERAGREEMENT, YEA); while (haveag != -1) { int c = vans("請問您接受這份使用者條款嗎? (yes/no) "); if (c == 'y') break; else if (c == 'n') return 0; vmsg("請輸入 y表示接受, n表示不接受"); } #endif return 1; } void ensure_user_agreement_version() { switch (check_user_agreement_version(cuser.ua_version)) { case UAVER_OK: return; case UAVER_UNKNOWN: vmsg("系統錯誤, 暫時無法登入"); break; case UAVER_OUTDATED: vmsg("使用者條款已經更新, 請重新檢視."); uint8_t version = get_system_user_agreement_version(); if (!accept_user_aggrement()) { vmsg("抱歉, 您須要接受使用者條款才能繼續使用我們的服務唷!"); break; } pwcuSetUserAgreementVersion(version); return; } exit(1); } ///////////////////////////////////////////////////////////////////////////// // New Registration (Phase 1: Create Account) ///////////////////////////////////////////////////////////////////////////// void new_register(void) { userec_t newuser; char passbuf[STRLEN]; int try, id, uid; char *errmsg = NULL; uint8_t ua_version = get_system_user_agreement_version(); if (!accept_user_aggrement()) { vmsg("抱歉, 您須要接受使用者條款才能註冊帳號享受我們的服務唷!"); exit(1); } // setup newuser memset(&newuser, 0, sizeof(newuser)); newuser.version = PASSWD_VERSION; newuser.userlevel = PERM_DEFAULT; newuser.uflag = UF_BRDSORT | UF_ADBANNER | UF_CURSOR_ASCII; newuser.firstlogin = newuser.lastlogin = now; newuser.pager = PAGER_ON; newuser.numlogindays = 1; newuser.ua_version = ua_version; strlcpy(newuser.lasthost, fromhost, sizeof(newuser.lasthost)); #ifdef DBCSAWARE newuser.uflag |= UF_DBCS_AWARE | UF_DBCS_DROP_REPEAT; #endif