aboutsummaryrefslogtreecommitdiff
path: root/src/appl/popper/pop_pass.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/appl/popper/pop_pass.c')
-rw-r--r--src/appl/popper/pop_pass.c253
1 files changed, 0 insertions, 253 deletions
diff --git a/src/appl/popper/pop_pass.c b/src/appl/popper/pop_pass.c
deleted file mode 100644
index 30f6b6d..0000000
--- a/src/appl/popper/pop_pass.c
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
- * Copyright (c) 1989 Regents of the University of California.
- * All rights reserved. The Berkeley software License Agreement
- * specifies the terms and conditions for redistribution.
- */
-
-#ifndef lint
-static char copyright[] = "Copyright (c) 1990 Regents of the University of California.\nAll rights reserved.\n";
-/* based on @(#)pop_pass.c 2.3 4/2/91 */
-#endif
-
-#include <stdio.h>
-#include <sys/types.h>
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#else
-#include <string.h>
-#endif
-#include <pwd.h>
-#include "popper.h"
-
-#ifdef KERBEROS
-#ifdef KRB4
-#ifdef KRB5
- #error you can only use one of KRB4, KRB5
-#endif
-#include <krb.h>
-extern AUTH_DAT kdata;
-#endif /* KRB4 */
-#ifdef KRB5
-#include "krb5.h"
-#include "com_err.h"
-extern krb5_principal ext_client;
-extern krb5_context pop_context;
-extern char *client_name;
-#endif /* KRB5 */
-#endif /* KERBEROS */
-
-#ifdef POP_PASSFILE
-struct passwd * our_getpwnam();
-#endif
-
-/*
- * pass: Obtain the user password from a POP client
- */
-
-int pop_pass (p)
-POP * p;
-{
-#ifdef KERBEROS
-#ifdef KRB4
- char lrealm[REALM_SZ];
- int status;
-#endif /* KRB4 */
-#ifdef KRB5
- char *lrealm;
- krb5_data *tmpdata;
-#endif /* KRB5 */
-#else
- register struct passwd * pw;
- char *crypt();
-#endif /* KERBEROS */
-
-#ifdef KERBEROS
-#ifdef KRB4
- if ((status = krb_get_lrealm(lrealm,1)) == KFAILURE) {
- pop_log(p, POP_WARNING, "%s: (%s.%s@%s) %s", p->client, kdata.pname,
- kdata.pinst, kdata.prealm, krb_err_txt[status]);
- return(pop_msg(p,POP_FAILURE,
- "Kerberos error: \"%s\".", krb_err_txt[status]));
- }
-
- if (strcmp(kdata.prealm,lrealm)) {
- pop_log(p, POP_WARNING, "%s: (%s.%s@%s) realm not accepted.",
- p->client, kdata.pname, kdata.pinst, kdata.prealm);
- return(pop_msg(p,POP_FAILURE,
- "Kerberos realm \"%s\" not accepted.", kdata.prealm));
- }
-
- if (strcmp(kdata.pinst,"")) {
- pop_log(p, POP_WARNING, "%s: (%s.%s@%s) instance not accepted.",
- p->client, kdata.pname, kdata.pinst, kdata.prealm);
- return(pop_msg(p,POP_FAILURE,
- "Must use null Kerberos(tm) instance - \"%s.%s\" not accepted.",
- kdata.pname, kdata.pinst));
- }
-
-#endif /* KRB4 */
-#ifdef KRB5
-#ifdef NO_CROSSREALM
- {
- krb5_error_code retval;
-
- if (retval = krb5_get_default_realm(pop_context, &lrealm)) {
- pop_log(p, POP_WARNING, "%s: (%s) %s", p->client, client_name,
- error_message(retval));
- return(pop_msg(p,POP_FAILURE,
- "Kerberos error: \"%s\".", error_message(retval)));
- }
- }
-
- tmpdata = krb5_princ_realm(pop_context, ext_client);
- if (strncmp(tmpdata->data, lrealm, tmpdata->length)) {
- pop_log(p, POP_WARNING, "%s: (%s) realm not accepted.",
- p->client, client_name);
- return(pop_msg(p,POP_FAILURE,
- "Kerberos realm \"%*s\" not accepted.",
- tmpdata->length, tmpdata->data));
- }
-#endif
- /* only accept one-component names, i.e. realm and name only */
- if (krb5_princ_size(pop_context, ext_client) > 1) {
- pop_log(p, POP_WARNING, "%s: (%s) instance not accepted.",
- p->client, client_name);
- return(pop_msg(p,POP_FAILURE,
- "Must use null Kerberos(tm) \"instance\" - \"%s\" not accepted.",
- client_name));
- }
-
- /*
- * be careful! we are assuming that the instance and realm have been
- * checked already! I used to simply copy the pname into p->user
- * but this causes too much confusion and assumes p->user will never
- * change. This makes me feel more comfortable.
- */
- tmpdata = krb5_princ_component(pop_context, ext_client, 0);
- if(strncmp(p->user, tmpdata->data, tmpdata->length))
- {
- pop_log(p, POP_WARNING, "%s: auth failed: %s vs %s",
- p->client, client_name, p->user);
- return(pop_msg(p,POP_FAILURE,
- "Wrong username supplied (%*s vs. %s).\n", tmpdata->length,
- tmpdata->data,
- p->user));
- }
-#endif /* KRB5 */
-
- /* Build the name of the user's maildrop */
- (void)sprintf(p->drop_name,"%s/%s",MAILDIR,p->user);
-
- /* Make a temporary copy of the user's maildrop */
- if (pop_dropcopy(p, NULL) != POP_SUCCESS) return (POP_FAILURE);
-
-#else /* KERBEROS */
-
- /* Look for the user in the password file */
-#ifdef POP_PASSFILE
- our_setpwent(POP_PASSFILE);
-
- if ((pw = our_getpwnam(p->user)) == NULL)
-#else
- if ((pw = getpwnam(p->user)) == NULL)
-#endif
- return (pop_msg(p,POP_FAILURE,
- "Password supplied for \"%s\" is incorrect.",p->user));
-
- /* We don't accept connections from users with null passwords */
- if (pw->pw_passwd == NULL)
- return (pop_msg(p,POP_FAILURE,
- "Password supplied for \"%s\" is incorrect.",p->user));
-
- /* Compare the supplied password with the password file entry */
- if (strcmp (crypt (p->pop_parm[1], pw->pw_passwd), pw->pw_passwd) != 0)
- return (pop_msg(p,POP_FAILURE,
- "Password supplied for \"%s\" is incorrect.",p->user));
-
- /* Build the name of the user's maildrop */
- (void)sprintf(p->drop_name,"%s/%s",MAILDIR,p->user);
-
- /* Make a temporary copy of the user's maildrop */
- /* and set the group and user id */
- if (pop_dropcopy(p,pw) != POP_SUCCESS) return (POP_FAILURE);
-
-#endif /* KERBEROS */
-
- /* Get information about the maildrop */
- if (pop_dropinfo(p) != POP_SUCCESS) return(POP_FAILURE);
-
- /* Initialize the last-message-accessed number */
- p->last_msg = 0;
-
- /* Authorization completed successfully */
- return (pop_msg (p,POP_SUCCESS,
- "%s has %d message(s) (%d octets).",
- p->user,p->msg_count,p->drop_size));
-}
-
-#ifdef POP_PASSFILE
-
-/*
- * I'm getting myself deeper and deeper
- */
-
-static char *pwfile = "/etc/passwd";
-
-our_setpwent(file)
- char *file;
-{
- if(file)
- {
- pwfile = (char *) malloc(strlen(file) + 1);
- if(pwfile)
- strcpy(pwfile, file);
- else
- return(-1);
- return(0);
- }
- return(-1);
-}
-
-struct passwd *
-our_getpwnam(user)
- char *user;
-{
- FILE *fp;
- char buf[BUFSIZ];
- register char *c;
- register char *d;
- static struct passwd p;
-
- if(!(fp = fopen(pwfile, "r")))
- return(NULL);
-
- memset(&p, 0, sizeof(p));
- while(fgets(buf, sizeof(buf), fp))
- {
- if(!(c = (char *) strchr(buf, ':')))
- continue;
-
- *c++ = '\0';
- if(strcmp(buf, user))
- continue;
-
- p.pw_name = strdup(buf);
-
-#if defined(hpux) || defined(__hpux)
- if (!(d = (char *) strchr(c, ':')))
- return(&p);
-#else
- if(!((d = (char *) strchr(c, ':')) && (c = (char *) strchr(++d, ':')) &&
- (d = (char *) strchr(++c, ':'))))
- return(&p);
-#endif
- *d = '\0';
-
- p.pw_passwd = strdup(c);
- return(&p);
- }
-
- return(NULL);
-}
-
-#endif /* POP_PASSFILE */