Date: 2001/4/5 Preceding press: 2001/3/31
使用者帳號資料以使用者識別代號(userid)做為鍵值,透過一定的資料庫存取 介面,存於代稱為 PASSFILE 的資料庫中。
應透過 bbslib 2 的 db_i 介面存取。
資料內容應存於符號 PASSFILE 所設定的檔案中。
每個使用者都必須有一個使用者識別代號,稱作 userid ,且是唯一的;而 使用時,則不區分 userid 的大小寫。
userid 的合法格式以 REGEX 表示為 "[A-Za-z][A-Za-z0-9]+" ;且其長度 最短為 3 個字元,最長為 IDLEN-1 個字元。
userid 不等於使用者名稱,且多數網路應用協定對於 userid 的內容亦多有限制,因 此不應使用其他字元組之字元於 userid 中。 故只使用 ASCII 中的字元 A-Z, a-z 及 0-9 。
每個使用者,也都具有一個密碼 (password) ,和 userid 搭配用於身份認證。 基於習慣用法, password 的欄位名稱是 "passwd" 。
密碼可接受由任何字元所組成的任意長度字串,但有兩個字串被視為特殊密碼。 其一是 "*" ,這個密碼表示此帳號不可簽入; 其二為 "" (空白字串) ,這個密碼表示此帳號不需密碼即可簽入, 由於這個密碼嚴重影嚮安全性,一般只有 guest 這個特別帳號使用此密碼, 而在實作帳號管理工具時,通常不允許使用者輸入空白字串做為密碼。
key 的內容是全以小寫表示的 userid ,並包含字串結尾的 null 字元。
-> strlen(lower_case(userid))+1
使用者帳號的資料內容,應以 markup language 的方式表示。
-> <userid>userid</userid>
以下欄位名稱,為系統所使用,並有特殊意義:
userid, username, passwd, level, group 。
每筆資料得有不定數目的欄位,但不得省略 userid 欄位。
應用程式開發者得自定欄位名稱及用途。
欄位名稱得使用 ASCII 字碼以外的字元組;但必須自行處理字元組識別的問題。
字元組識別的問題:若一欄位名稱使用 Big5 碼,而另一欄位名稱使用 GB 碼,則應 用程式開發者必須自行處理判定欄位名稱是用什麼字元組的問題,以及潛在的內碼衝突。
若欄位名稱所用之字元組,有大小寫之分,為便於使用及辨識,欄位名稱應 全為小寫。
PASSFILE 慣例設為 ".PASSWDS" 。
IDLEN 建議長度為 80 個字元 (含結尾字元)。合宜的長度介於 32 到 256 間。
bbslib 2 將 PASSFILE 定義在 userec.h 中,而 IDLEN 定義在 bbsdefs.h 中。
Rule_4: user_data = "<userid>userid</userid> <username>User name</username> <passwd>XXXXXXXX</passwd>" userid = get_field(user_data, "userid"); Rule_2: if( strlen(userid) < 3 || strlen(userid) >= IDLEN || strcmp_regex(userid, "^[A-Za-z][A-Za-z0-9]+") != 0 ) { invalid userid; } Rule_3: userid = lower_case(userid); key.data = userid; key.size = strlen(userid)+1; data.data = user_data; data.size = strlen(user_data)+1; Rule_1: userdb = dbi_open(PASSFILE, DBI_WRITER); dbi_put(userdb, key, data); dbi_close(userdb);