/*! \file hesiod.h * WSHelper DNS/Hesiod Library * * This file contains the function declaration for: \n * hes_to_bind() \n * hes_resolve() \n * hes_error() \n * hes_free() \n * hes_getmailhost() \n * hes_getservbyname() \n * hes_getpwnam() \n * hes_getpwuid() \n */ #ifndef _HESIOD_ #define _HESIOD_ #include /*! \def HESIOD_CONF * name of the hesiod configuration file. We will look at the file to determine the RHS AND LHS value before using the default. * Here is a sample hesiod.cfg file: \n * lhs .ns \n * rhs .ATHENA.MIT.EDU \n */ #define HESIOD_CONF "c:\\net\\tcp\\hesiod.cfg" /*! \def DEF_RHS * default RHS value is the hesiod configuration file is not present */ #define DEF_RHS ".Athena.MIT.EDU" /*! \def DEF_LHS * default LHS value is the hesiod configuration file is not present */ #define DEF_LHS ".ns" /*! \def HES_ER_UNINIT * HES error code: uninitialized */ #define HES_ER_UNINIT -1 /*! \def HES_ER_OK * HES error code: no error */ #define HES_ER_OK 0 /*! \def HES_ER_NOTFOUND * HES error code: Hesiod name not found by server */ #define HES_ER_NOTFOUND 1 /*! \def HES_ER_CONFIG * HES error code: local problem (no config file?) */ #define HES_ER_CONFIG 2 /*! \def HES_ER_NET * HES error code: network problem */ #define HES_ER_NET 3 #ifdef __cplusplus extern "C" { #endif /*! \fn LPSTR WINAPI hes_to_bind(LPSTR HesiodName, LPSTR HesiodNameType) * hes_to_bind function use the LHS and RHS values and * binds them with the parameters so that a well formed DNS query may * be performed. * * defined in hesiod.c * * \param[in] HesiodName The Hesiod name such as a username or service name * \param[in] HesiodNameType The Hesiod name type such as pobox, passwd, or sloc * \retval Returns NULL if there was an error. Otherwise the pointer to a string containing a valid query is returned. * */ LPSTR WINAPI hes_to_bind( LPSTR HesiodName, LPSTR HesiodNameType ); /*! \fn LPSTR * WINAPI hes_resolve(LPSTR HesiodName, LPSTR HesiodNameType) * This function calls hes_to_bind to form a valid hesiod query, then queries the dns database. * * defined in hesiod.c * * \param[in] HesiodName The Hesiod name such as a username or service name * \param[in] HesiodNameType The Hesiod name type such as pobox, passwd, or sloc * \retval returns a NULL terminated vector of strings (a la argv), * one for each resource record containing Hesiod data, or NULL if * there is any error. If there is an error call hes_error() to get * further information. You will need to call hes_free to free the result * */ LPSTR * WINAPI hes_resolve( LPSTR HesiodName, LPSTR HesiodNameType ); /*! \fn int WINAPI hes_error(void) * The function hes_error may be called to determine the * source of the error. It does not take an argument. * * defined in hesiod.c * * \retval return one of the HES_ER_* codes defined in hesiod.h. */ int WINAPI hes_error( void ); /*! \fn void WINAPI hes_free(LPSTR* hesinfo) * The function hes_free should be called to free up memeory returned by hes_resolve * * defined in hesiod.c * * \param[in] hesinfo a NULL terminiated array of strings returned by hes_resolve */ void WINAPI hes_free( LPSTR* hesinfo ); /*! \struct hes_postoffice * For use in getting post-office information. */ struct hes_postoffice { /*! The post office type, e.g. POP, IMAP */ LPSTR po_type; /*! The post office host, e.g. PO10.MIT.EDU */ LPSTR po_host; /*! The account name on the post office, e.g. tom */ LPSTR po_name; }; /*! \fn struct hes_postoffice * WINAPI hes_getmailhost(LPSTR user) * This call is used to obtain a user's type of mail account and the location of that * account. E.g. POP PO10.MIT.EDU or IMAP IMAP-TEST.MIT.EDU * * defined in hesmailh.c * * \param[in] user The username to be used when querying for the Hesiod Name Type POBOX. * \retval NULL if there was an error or if there was no entry for the * username. Otherwise a pointer to a hes_postoffice structure is * returned. The caller must never attempt to modify this structure or to free * any of its components. Furthermore, only one copy of this structure is allocated per call per thread, so the application should copy any information it needs before * issuing another getmailhost call */ struct hes_postoffice * WINAPI hes_getmailhost(LPSTR user); /*! \fn struct servent * WINAPI hes_getservbyname(LPSTR name, LPSTR proto) * This function will query a Hesiod server for a servent structure given * a service name and protocol. This is a replacement for the Winsock * getservbyname function which normally just uses a local services * file. This allows a site to use a centralized database for adding new * services. * * defined in hesservb.c * * \param[in] name pointer to the official name of the service, eg "POP3". * \param[in] proto pointer to the protocol to use when contacting the service, e.g. "TCP" * \retval NULL if there was an error or a pointer to a servent structure. The caller must * never attempt to modify this structure or to free any of its components. * Furthermore, only one copy of this structure is allocated per call per thread, so the application should copy any information it needs before * issuing another hes_getservbyname call * */ struct servent * WINAPI hes_getservbyname(LPSTR name, LPSTR proto); /*! \fn struct passwd * WINAPI hes_getpwnam(LPSTR nam) * Given a username this function will return the pwd information, eg * username, uid, gid, fullname, office location, phone number, home * directory, and default shell * * defined in hespwnam.c * * \param nam a pointer to the username * \retval NULL if there was an error or a pointer to the passwd structure. The caller must * never attempt to modify this structure or to free any of its components. * Furthermore, only one copy of this structure is allocated per call per thread, so the application should copy any information it needs before * issuing another hes_getpwnam call * */ struct passwd * WINAPI hes_getpwnam(LPSTR nam); /*! struct passwd * WINAPI hes_getpwuid(int uid) * Given a UID this function will return the pwd information, eg username, uid, * gid, fullname, office location, phone number, home directory, and default shell * * defined in hespwnam.c * * \param uid The user ID * \retval NULL if there was an error or a pointer to the passwd structure. The caller must * never attempt to modify this structure or to free any of its components. * Furthermore, only one copy of this structure is allocated per call per thread, so the application should copy any information it needs before * issuing another hes_getpwuid call */ struct passwd * WINAPI hes_getpwuid(int uid); #ifdef __cplusplus } #endif #endif /* _HESIOD_ */