void
-ruserpass(char *host, char **aname, char **apass)
+ruserpass(const char *host, char **aname, char **apass, int flags)
{
int t, usedefault = 0;
struct stat stb;
while ((t = token(tokval)) && t != MACH && t != DEFAULT) {
switch(t) {
case LOGIN:
- if (token(tokval) && *aname == 0) {
- *aname = mh_xmalloc((size_t) strlen(tokval) + 1);
- strcpy(*aname, tokval);
- }
+ if (token(tokval) && *aname == 0)
+ *aname = mh_xstrdup(tokval);
break;
case PASSWD:
- if (fstat(fileno(cfile), &stb) >= 0 &&
+ if (!credentials_no_perm_check &&
+ fstat(fileno(cfile), &stb) >= 0 &&
(stb.st_mode & 077) != 0) {
/* We make this a fatal error to force the
user to correct it. */
adios(NULL, "Remove password or correct file "
"permissions.");
}
- if (token(tokval) && *apass == 0) {
- *apass = mh_xmalloc((size_t) strlen(tokval) + 1);
- strcpy(*apass, tokval);
- }
+ if (token(tokval) && *apass == 0)
+ *apass = mh_xstrdup(tokval);
break;
case ACCOUNT:
}
}
- if (!*aname) {
+ if (!*aname && ! (flags & RUSERPASS_NO_PROMPT_USER)) {
char tmp[80];
char *myname;
if (fgets(tmp, sizeof(tmp) - 1, stdin) == NULL) {
advise ("tmp", "fgets");
}
- tmp[strlen(tmp) - 1] = '\0';
+ TrimSuffixC(tmp, '\n');
if (*tmp != '\0' || myname == NULL) {
myname = tmp;
}
- *aname = mh_xmalloc((size_t) strlen(myname) + 1);
- strcpy (*aname, myname);
+ *aname = mh_xstrdup(myname);
}
- if (!*apass) {
+ if (!*apass && ! (flags & RUSERPASS_NO_PROMPT_PASSWORD)) {
char prompt[256];
char *mypass;
mypass = *aname;
}
- *apass = mh_xmalloc((size_t) strlen(mypass) + 1);
- strcpy (*apass, mypass);
+ *aname = mh_xstrdup(mypass);
}
}