auth.h
上传用户:s81996212
上传日期:2007-01-04
资源大小:722k
文件大小:6k
源码类别:

WEB邮件程序

开发平台:

C/C++

  1. #ifndef auth_h
  2. #define auth_h
  3. /*
  4. ** Copyright 1998 - 1999 Double Precision, Inc.  See COPYING for
  5. ** distribution information.
  6. */
  7. #if HAVE_CONFIG_H
  8. #include "config.h"
  9. #endif
  10. #include <sys/types.h>
  11. #ifdef __cplusplus
  12. extern "C" {
  13. #endif
  14. static const char auth_h_rcsid[]="$Id: auth.h,v 1.6 2000/02/28 05:02:27 mrsam Exp $";
  15. /*
  16. ** authcopyargv prepares the arguments to execv for a module that receives
  17. ** the next program to run, in a chain, via the command line.
  18. **
  19. ** execv is documented to require a terminating null char **.  The fact
  20. ** that argv is also null char ** is not always documented, and we can't
  21. ** assume that.
  22. **
  23. ** authcopyargv receives the new argc/argv arguments, and allocates a
  24. ** new argv array.  argv[0] is stripped of any path, and the original
  25. ** argv[0] is returned separately.
  26. */
  27. extern char **authcopyargv(int, /* argc */
  28. char **, /* argv */
  29. char **); /* original argv[0] */
  30. /*
  31. ** authchain - chain to the next authentication module via exec.
  32. **
  33. ** Runs the next authentication module, and passes it a copy of the
  34. ** authentication request on file descriptor 3.
  35. **
  36. ** authchain sets up a pipe on file descriptor 3, and forks.  The parent
  37. ** runs the next authentication module.  The child sends the authentication
  38. ** information down the pipe, and terminates.
  39. */
  40. extern void authchain(int, /* argc */
  41. char **, /* argv */
  42. const char *); /* Authentication request */
  43. /*
  44. ** The following functions are used by root to reset its user and group id
  45. ** to the authenticated user's.  Various functions are provided to handle
  46. ** various situations.
  47. */
  48. void authchangegroup(gid_t); /* Set the group id only.  Also clear any
  49. ** auxiliary group ids */
  50. void authchangeuidgid(uid_t, gid_t);
  51. /* Set both user id and group id.  Also clear
  52. ** aux group ids */
  53. void authchangeusername(const char *, const gid_t *);
  54. /*
  55. ** Set the userid to the indicate user's.  If second argument is
  56. ** not null, it points to the groupid to set.  If it's null, the
  57. ** group id is taken from the passwd file.  Auxiliary IDs are set
  58. ** to any aux IDs set for the user in the group file.  If there are
  59. ** no aux group IDs for the user, any AUX ids are cleared.
  60. */
  61. /*
  62. ** Authentication functions must call authsuccess if the authentication
  63. ** request succeeds, and provide the following parameters.
  64. */
  65. void authsuccess(
  66. const char *, /* home directory */
  67. const char *, /* username */
  68. const uid_t *, /* userid */
  69. const gid_t *, /* group id */
  70. const char *, /* AUTHADDR */
  71. const char *); /* AUTHFULLNAME */
  72. /*
  73. ** EITHER username or userid can be specified (leave the other pointer null).
  74. ** authmod_success changes to the home directory, and initializes the
  75. ** process's uid and gid.  gid can be null if username is provided, in which
  76. ** case gid will be picked up from the password file. gid CANNOT be null
  77. ** if username is null.
  78. */
  79. /* authcheckpassword is the general password validation routine.
  80. ** It returns 0 if the password matches the encrypted password.
  81. */
  82. int authcheckpassword(const char *, /* password */
  83.  const char *); /* encrypted password */
  84. /* Stub function */
  85. extern void authexit(int);
  86. /*
  87. LOW LEVEL AUTHENTICATION DRIVERS.
  88. Each low level authentication driver provides three functions:
  89. 1) Primary authentication function.  This function is used to build a
  90.    standalone authentication module based on the mod.h template (see mod.h).
  91.    This function takes an authentication request.  If its valid, it
  92.    changes its userid/groupid to the one for the authenticated user,
  93.    changes the current directory to the authenticated user's home directory,
  94.    and sets the following environment variables:
  95.              MAILDIR - nondefault mailbox location (optional).
  96. 2) User lookup function.  This function is prototyped as follows:
  97.      int functionname(const char *userid, const char *service,
  98. int (*callback)(struct authinfo *, void *),
  99. void *);
  100.      This function populates the following structure:
  101. */
  102. struct authinfo {
  103. const char *sysusername;
  104. const uid_t *sysuserid;
  105. gid_t sysgroupid;
  106. const char *homedir;
  107. const char *address;
  108. const char *fullname;
  109. const char *maildir;
  110. const char *quota;
  111. const char *passwd;
  112. const char *clearpasswd; /* For authldap */
  113. unsigned staticindex; /* When statically-linked functions are
  114. ** called, this holds the index of the
  115. ** authentication module in authstaticlist */
  116. } ;
  117. /*
  118. Either sysusername or sysuserid may be NULL, but not both of them.
  119. They, and sysgroupid, specify the authenticated user's system
  120. userid and groupid.  homedir points to the authenticated user's
  121. home directory.  address, fullname, and maildir, are obvious.
  122. quota is populated with any maildir quota (see
  123. maildir/README.maildirquota).
  124. After populating this tructure, the lookup function calls the
  125. callback function that's specified in its second argument.  The
  126. callback function receives a pointer to the authinfo structure.
  127. The callback function also receives a context pointer, which is
  128. the third argument to the lookup function.
  129. The lookup function should return a negative value if he userid
  130. does not exist, a positive value if there was a temporary error
  131. looking up the userid, or whatever is the return code from the
  132. callback function, if the user exists.
  133. NOTE: the passwd field is used internally by modules which implement
  134. the primary authentication function by sharing code with the lookup function.
  135. 3) Cleanup function.  This function should close any resources that were
  136.    opened by the lookup function.  Note that in applications which have a
  137.    daemon process that uses this library it is possible for the lookup
  138.    function to be called multiple times, before the cleanup function is
  139.    called.
  140. */
  141. #ifdef __cplusplus
  142. }
  143. #endif
  144. #endif