- case LOGIN:
- if (token() && *aname == 0) {
- *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;
- }
- if (token() && *apass == 0) {
- *apass = mh_xmalloc((size_t) strlen(tokval) + 1);
- strcpy(*apass, tokval);
- }
- break;
- case ACCOUNT:
- break;
-
- case MACDEF:
- goto done_close;
- break;
- default:
- fprintf(stderr, "Unknown .netrc keyword %s\n", tokval);
- break;
+ case DEFAULT:
+ usedefault = 1;
+ /* FALL THROUGH */
+
+ case MACH:
+ if (!usedefault) {
+ if (token() != ID)
+ continue;
+ /*
+ * Allow match either for user's host name.
+ */
+ if (mh_strcasecmp(host, tokval) == 0)
+ goto match;
+ continue;
+ }
+match:
+ while ((t = token()) && t != MACH && t != DEFAULT) {
+ switch(t) {
+ case LOGIN:
+ if (token() && *aname == 0) {
+ *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) {
+ /*
+ ** 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);
+ strcpy(*apass, tokval);
+ }
+ break;
+ case ACCOUNT:
+ break;
+
+ case MACDEF:
+ goto done_close;
+ break;
+ default:
+ fprintf(stderr, "Unknown .netrc keyword %s\n", tokval);
+ break;
+ }
+ }
+ goto done;