This is auth.c in view mode; [Download] [Up]
#ifndef lint static char *sccsid = "@(#)$Header: auth.c,v 1.2 90/08/10 22:59:08 sob Exp $"; #endif /* * Simple user/password authentication * * client must supply "authinfo user <userid>" * followed by "authinfo pass <password>" * which will be looked up in the server machine's password file. * Password must match userid, userid must have gid matching the * /etc/group entry for "nntp" * * note that passwords travel over the network in plaintext. This * can be a problem but isn't easy to remedy. At least it's as safe * as logging in over the network would be * */ #include "common.h" #include <grp.h> extern timeout(); extern char *crypt(); #ifdef AUTH extern int Needauth; extern char User[]; doauth(argc,argv) int argc; char *argv[]; { if (argc != 3) { printf("%d Syntax error\r\n", ERR_CMDSYN); fflush(stdout); return; } if (!strcasecmp(argv[0],"authcap")) { printf("%d authcap not implemented\r\n", ERR_COMMAND); fflush(stdout); return; } if (!strcasecmp(argv[0],"authsys")) { printf("%d authsys not implemented\r\n", ERR_COMMAND); fflush(stdout); return; } /* fall through into 'authinfo' */ if (strcasecmp(argv[0],"authinfo")) { printf("%d command not recognized\r\n", ERR_COMMAND); fflush(stdout); return; } if (!Needauth) { printf("%d Authorization already completed\r\n", ERR_AUTHREJ); fflush(stdout); return; } if (!strcasecmp(argv[1],"user")) { if (strlen(User)) { printf("%d USER already specified\r\n", ERR_AUTHREJ); fflush(stdout); return; } getuser(argv[2]); return; } if (!strcasecmp(argv[1],"pass")) { if (strlen(User) < 1) { printf("%d USER required first\r\n", ERR_AUTHREJ); fflush(stdout); return; } getpass(argv[2]); return; } } /* get userid and prompt for password */ getuser(p) char *p; { strncpy(User,p,8); User[8] = 0; /* get the password */ printf("%d PASS required\r\n", NEED_AUTHDATA); fflush(stdout); } /* password */ getpass(p) char *p; { static char pass[10]; char *cp, *namep; struct passwd *pwd; struct group *grp; int i; int nntpgid; strncpy(pass,p,8); pass[8] = 0; /* check for valid login */ pwd = getpwnam(User); namep = NULL; if (pwd != NULL) namep = crypt(pass, pwd->pw_passwd); grp = getgrnam("nntp"); if (grp == NULL || pwd == NULL || namep == NULL || strcmp(namep, pwd->pw_passwd) || pwd->pw_gid != grp->gr_gid) { #ifdef SYSLOG syslog(LOG_ERR, "AUTHENTICATION ERROR"); #endif printf("%d Authentication error\r\n",ERR_ACCESS); (void) fflush(stdout); (void) fflush(stdout); exit(1); } #ifdef SYSLOG #ifdef LOG syslog(LOG_INFO, "user %s", User); #endif #endif printf("%d Authentication accepted\r\n",OK_AUTH); fflush(stdout); Needauth = 0; } #endif AUTH
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.