Functional Specifications for the Network Information Database (NID) - 6/07/96
							last updated - 9/28/98
------------------------------------------------------------------------------

The NID will replace the NAD (Network Administrative Database) currently
maintained by DCS to resolve a number of difficulties listed below:

    1. Its primary key information is volatile.
    2. It does not manage which accounts are active or not.
    3. It does not check campus-wide list names with userids to ensure they
          are unique.
    4. It can not activate an alias at a specific date.
    5. Half MTU's uids are already used and we need tighter management
          of them. The NAD cannot expire old (unused) userids and uids and
          then reuse them.
    6. Its client tools are not year 2000 compliant.
    7. It is maintained separately from the Administrative System
          and therefore duplicates efforts and resources.
    8. It is used as an entrance to the administrative system
          by departments and access. It should be formally managed similar
          to other administrative systems.

The target users of the NID are MTU systems administrators and their support
personnel. Ningning Han will be the custodian of the data.

Data that should be stored:

    Login information:
        - login
        - uid
        - owner of the login
        - date of expiration for the login
        - whether the login is primary or secondary
        - optional name associated with the login (e.g. "The Daily Bull")
	- optional person responsible for the login
        - date when the login was created/modified
        - person who created/modified the login

        - domain where the login is valid
        - whether the login is active in a domain
        - date of expiration for the login in a domain
	- date the login status information was created/modified
	- person who created/modified the login status information
        - date the domain information was created/modified
        - person who created/modified the domain information
	- person(s) allowed to modify the domain information
	- date the manager information was created/modified
        - person who created/modified the manager information
	- whether the manager can grant authority for this domain
	- text description of the login's related information (e.g. login shell)

    E-mail alias information:
	- alias
        - location of the login's/special current maildrop 
          (e.g. pop@cs.mtu.edu/kerberos-request@tcm.mtu.edu)
        - person who created/modified the current maildrop
        - date the current maildrop was created/modified
        - location of the login's/special future maildrop
        - date of start for the future maildrop
        - person who submitted the future maildrop
        - date the future maildrop was submitted
        - whether the alias can be changed/deleted by others

How data would be accessed:

    The NID data would be accessible locally and remotely via SQL*Plus
    and the NID client tools, which have been implementing by DCS. the NID
    client tools will replace the NAD client tools currently in production
    and maintained by DCS. The NID client tools specifications are described
    in a separate document.
    
    There would be a set of standard NID library routines between the NID
    and NID client tools. The client tools would call the library routines
    to access the data in NID. The list of standard NID library routines
    is given below.

Standard NID library routines:

CLIENT *nid_init(char **errmsg);
int nid_dblogin(char *login, char *passwd, char **errmsg, CLIENT *clnt);
int nid_dblogout(char **errmsg, CLIENT *clnt);
void nid_shutdown(CLIENT *clnt);
int nid_chg_passwd(char *new_passwd, char **errmsg, CLIENT *clnt);

int nid_commit(char **errmsg, CLIENT *clnt);
int nid_rollback(char **errmsg, CLIENT *clnt);

int nid_add_domain(char *domain, long *num_rows, char **errmsg, CLIENT *clnt);
int nid_delete_domain(char *domain, long *num_rows, char **errmsg, CLIENT *clnt);
int nid_change_domain(char *old_domain, char *new_domain, long *num_rows,
		char **errmsg, CLIENT *clnt);
int nid_query_domain(domain_st query, int in_flags, list_st **query_res,
		int out_flags, long *num_rows, char **errmsg, CLIENT *clnt);

int nid_add_manager(manager_st new_manager, long *num_rows, char **errmsg,
		CLIENT *clnt);
int nid_delete_manager(manager_st old, int flags, long *num_rows, char **errmsg,
		CLIENT *clnt);
int nid_change_manager(manager_st old, int old_flags, manager_st new_manager,
		int new_flags, long *num_rows, char **errmsg, CLIENT *clnt);
int nid_query_manager(manager_st query, int in_flags, list_st **query_res,
		int out_flags, long *num_rows, char **errmsg, CLIENT *clnt);

int nid_add_login(login_st new_login, passwd_st **pw_fields, long *num_rows,
		char **errmsg, CLIENT *clnt);
int nid_delete_login(login_st old, int flags, long *num_rows, char **errmsg,
		CLIENT *clnt);
int nid_change_login(login_st old, int old_flags, login_st new_login,
		int new_flags, long *num_rows, char **errmsg, CLIENT *clnt);
int nid_query_login(login_st query, int in_flags, list_st **query_res,
		int out_flags, long *num_rows, char **errmsg, CLIENT *clnt);

int nid_add_active(list_st *new_list, long *num_rows, err_ls **errors,
		CLIENT *clnt);
int nid_delete_active(list_st *old, int flags, long *num_rows, err_ls **errors,
		CLIENT *clnt);
int nid_change_active(active_st old, int old_flags, active_st new_active,
		int new_flags, long *num_rows, char **errmsg, CLIENT *clnt);
int nid_query_active(active_st query, int in_flags, list_st **query_res,
		int out_flags, long *num_rows, char **errmsg, CLIENT *clnt);

int nid_query_alias(alias_st query, int in_flags, list_st **query_res,
		int out_flags, long *num_rows, char **errmsg, CLIENT *clnt);

int nid_add_alias_job(alias_job_st new_alias_job, long *num_rows, char **errmsg,
		CLIENT *clnt);
int nid_delete_alias_job(alias_job_st old, int flags, long *num_rows
		char **errmsg, CLIENT *clnt);
int nid_change_alias_job(alias_job_st old, int old_flags,
		alias_job_st new_alias_job, int new_flags, long *num_rows,
		char **errmsg, CLIENT *clnt);
int nid_query_alias_job(alias_job_st query, int in_flags, list_st **query_res,
		int out_flags, long *num_rows, char **errmsg, CLIENT *clnt);

int nid_query_class(class_st query, int in_flags, list_st **query_res,
		int out_flags, long *num_rows, char **errmsg, CLIENT *clnt);
int nid_query_major(major_st query, int in_flags, list_st **query_res,
		int out_flags, long *num_rows, char **errmsg, CLIENT *clnt);
int nid_query_spriden(name_st query, int in_flags, list_st **query_res,
		int out_flags, long *num_rows, char **errmsg, CLIENT *clnt);

© Copyright 2001 Information Technology 
@ Michigan Technological University