/*
+ * Portions of this code are
* Copyright (c) 1985 Regents of the University of California.
* All rights reserved.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- *
- * $Id$
*/
#include <h/mh.h>
+#include <h/utils.h>
#include <pwd.h>
#include <errno.h>
static int token(void);
-int
+void
ruserpass(char *host, char **aname, char **apass)
{
char *hdir, buf[BUFSIZ];
int t, usedefault = 0;
struct stat stb;
- extern int errno;
hdir = getenv("HOME");
if (hdir == NULL)
/*
* Allow match either for user's host name.
*/
- if (strcasecmp(host, tokval) == 0)
+ if (mh_strcasecmp(host, tokval) == 0)
goto match;
continue;
}
switch(t) {
case LOGIN:
if (token() && *aname == 0) {
- *aname = malloc((size_t) strlen(tokval) + 1);
+ *aname = mh_xmalloc((size_t) strlen(tokval) + 1);
strcpy(*aname, tokval);
}
break;
case PASSWD:
if (fstat(fileno(cfile), &stb) >= 0 &&
(stb.st_mode & 077) != 0) {
- fprintf(stderr, "Error - .netrc file not correct mode.\n");
- fprintf(stderr, "Remove password or correct mode.\n");
- goto bad;
+ /* We make this a fatal error to force the user to correct it */
+ advise(NULL, "Error - ~/.netrc file must not be world or group readable.");
+ adios(NULL, "Remove password or correct file permissions.");
}
if (token() && *apass == 0) {
- *apass = malloc((size_t) strlen(tokval) + 1);
+ *apass = mh_xmalloc((size_t) strlen(tokval) + 1);
strcpy(*apass, tokval);
}
break;
myname = tmp;
}
- *aname = malloc((size_t) strlen(myname) + 1);
+ *aname = mh_xmalloc((size_t) strlen(myname) + 1);
strcpy (*aname, myname);
}
char *mypass;
snprintf(prompt, sizeof(prompt), "Password (%s:%s): ", host, *aname);
- mypass = (char *)getpass (prompt);
+ mypass = nmh_getpass(prompt);
if (*mypass == '\0') {
mypass = *aname;
}
- *apass = malloc((size_t) strlen(mypass) + 1);
+ *apass = mh_xmalloc((size_t) strlen(mypass) + 1);
strcpy (*apass, mypass);
}
- return(0);
-bad:
- fclose(cfile);
- return(-1);
}
static int