pop_rpop.c
上传用户:dayuan858
上传日期:2007-01-04
资源大小:194k
文件大小:2k
源码类别:

网络编程

开发平台:

Unix_Linux

  1. /*
  2.  * Copyright (c) 1989 Regents of the University of California.
  3.  * All rights reserved.  The Berkeley software License Agreement
  4.  * specifies the terms and conditions for redistribution.
  5.  */
  6. /*
  7.  * Copyright (c) 1997 by Qualcomm Incorporated.
  8.  */
  9. #include <config.h>
  10. #include <stdio.h>
  11. #include <sys/types.h>
  12. #include <string.h>
  13. #if HAVE_STRINGS_H
  14. #include <strings.h>
  15. #endif
  16. #include <pwd.h>
  17. #include <netinet/in.h> /* For IPPORT_RESERVED */
  18. #include "popper.h"
  19. /*
  20.  * Use /etc/hosts.equiv and the users .rhost file to validate the user.
  21.  */
  22. int pop_rpop (p)
  23.      POP     *   p;
  24. {
  25.   struct passwd  *   pw;
  26.     if (p->ipport >= IPPORT_RESERVED || p->ipport < IPPORT_RESERVED/2)  {
  27.       pop_log(p,POP_PRIORITY,
  28.       "RPOP command from %s (%s) on illegal port.",p->client,p->ipaddr);
  29.         return (pop_msg(p,POP_FAILURE,
  30.             "Permission denied.",p->user));
  31.     }
  32.     if (ruserok(p->client, 0, p->pop_parm[1], p->user) != 0)
  33.         return (pop_msg(p,POP_FAILURE,
  34.             "Permission denied.",p->user));
  35. #ifdef NONAUTHFILE
  36.     if (checknonauthfile(p->user) != 0)
  37.         return (pop_msg(p,POP_FAILURE,
  38.             "Permission denied.",p->user));
  39. #endif
  40. #ifdef AUTHFILE
  41.     if (checkauthfile(p->user) != 0)
  42.         return (pop_msg(p,POP_FAILURE,
  43.             "Permission denied.",p->user));
  44. #endif
  45.     if ((pw = getpwnam(p->user)) == NULL)  /* "Can't happen" */
  46.         return (pop_msg(p,POP_FAILURE,
  47.             "Permission denied.",p->user));
  48.     if (pw->pw_uid <= BLOCK_UID)
  49. return (pop_msg(p,POP_FAILURE, "Permission denied", p->user));
  50.     /*  Build the name of the user's maildrop */
  51.     if (genpath(p) < 0)
  52. return(pop_msg(p, POP_FAILURE, "Unable to create temporary drop name"));
  53.     /*  Make a temporary copy of the user's maildrop */
  54.     /*    and set the group and user id */
  55.     if (pop_dropcopy(p, pw) != POP_SUCCESS) return (POP_FAILURE);
  56.     /*  Get information about the maildrop */
  57.     /* if (pop_dropinfo(p) != POP_SUCCESS) return(POP_FAILURE); */
  58.     /*  Initialize the last-message-accessed number */
  59.     p->last_msg = 0;
  60.     /*  Authorization completed successfully */
  61.     return (pop_msg (p,POP_SUCCESS,
  62.         "%s has %d message(s) (%d octets).",
  63.             p->user,p->msg_count,p->drop_size));
  64. }