Port from trunk: bug #23167: sbr/ruserpass.c (ruserpass): make bad
authorPeter Maydell <pmaydell@chiark.greenend.org.uk>
Sun, 4 May 2008 21:00:18 +0000 (21:00 +0000)
committerPeter Maydell <pmaydell@chiark.greenend.org.uk>
Sun, 4 May 2008 21:00:18 +0000 (21:00 +0000)
permissions on .netrc be an instantly fatal error. Previously we returned an
error value; however, no caller was checking it. So now ruserpass() has a
void return type.

ChangeLog
h/prototypes.h
sbr/ruserpass.c

index bf19730..fcac069 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,6 +2,11 @@
 
        * Fixes ported from trunk:
 
+       * bug #23167: sbr/ruserpass.c (ruserpass): make bad permissions
+       on .netrc be an instantly fatal error. Previously we returned
+       an error value; however, no caller was checking it. So now
+       ruserpass() has a void return type.
+
        * bug #23163: various minor fixes for the benefit of
        older Unixes (specifically SunOS 4):
        reintroduce strerror() substitute implementation
index 2f4f651..52fab3a 100644 (file)
@@ -98,7 +98,7 @@ char *pwd (void);
 char *r1bindex(char *, int);
 void readconfig (struct node **, FILE *, char *, int);
 int refile (char **, char *);
-int ruserpass(char *, char **, char **);
+void ruserpass(char *, char **, char **);
 int remdir (char *);
 int seq_addmsg (struct msgs *, char *, int, int, int);
 int seq_addsel (struct msgs *, char *, int, int);
index 36605be..5ed6fde 100644 (file)
@@ -61,7 +61,7 @@ static struct toktab toktabs[] = {
 static int token(void);
 
 
-int
+void
 ruserpass(char *host, char **aname, char **apass)
 {
     char *hdir, buf[BUFSIZ];
@@ -108,9 +108,9 @@ match:
                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 = mh_xmalloc((size_t) strlen(tokval) + 1);
@@ -173,10 +173,6 @@ done:
        strcpy (*apass, mypass);
     }
 
-    return(0);
-bad:
-    fclose(cfile);
-    return(-1);
 }
 
 static int