diff options
-rw-r--r-- | alpine/imap.c | 2 | ||||
-rw-r--r-- | pith/pine.hlp | 2 | ||||
-rw-r--r-- | pith/smime.c | 16 |
3 files changed, 14 insertions, 6 deletions
diff --git a/alpine/imap.c b/alpine/imap.c index 45cc860a..497801b5 100644 --- a/alpine/imap.c +++ b/alpine/imap.c @@ -2351,7 +2351,7 @@ read_passfile(pinerc, l) if(tmp2[0]){ /* not empty, UNencrypted password file */ if(ps_global->pwdcert == NULL) rv = setup_pwdcert(&ps_global->pwdcert); - if(rv == 0 && ps_global->pwdcert == NULL) + if((rv == 0 || rv == -5) && ps_global->pwdcert == NULL) ps_global->pwdcert = (void *) ALPINE_self_signed_certificate(NULL, 0, ps_global->pwdcertdir, MASTERNAME); if(ps_global->pwdcert == NULL){ q_status_message(SM_ORDER, 3, 3, diff --git a/pith/pine.hlp b/pith/pine.hlp index 0a8e2ef7..a4f67718 100644 --- a/pith/pine.hlp +++ b/pith/pine.hlp @@ -140,7 +140,7 @@ with help text for the config screen and the composer that didn't have any reasonable place to be called from. Dummy change to get revision in pine.hlp ============= h_revision ================= -Alpine Commit 173 2016-10-05 01:10:48 +Alpine Commit 174 2016-10-05 19:05:20 ============= h_news ================= <HTML> <HEAD> diff --git a/pith/smime.c b/pith/smime.c index 9ee83340..d219ba03 100644 --- a/pith/smime.c +++ b/pith/smime.c @@ -203,9 +203,14 @@ load_key_and_cert(char *pathkeydir, char *pathcertdir, char **keyfile, * Ok, that should do it. * * return values: 0 - everything is normal - * 1 - User could not unlock key + * 1 - User could not unlock key or no key in directory. * 2 - User cancelled to create self signed certificate - * -1 - a not normal value. + * -1 - we do not know which directory to use + * -2 - "-pwdcertdir" was given by user, but directory does not exist + * -3 - "DF_PASSWORD_DIR" exists but it is not a directory!!?? + * -4 - we tried to create DF_PASSWORD_DIR but failed. + * -5 - password directory exists, but it is empty + * */ int setup_pwdcert(void **pwdcert) @@ -233,19 +238,22 @@ setup_pwdcert(void **pwdcert) strncpy(pathdir, ps_global->pwdcertdir, sizeof(pathdir)); pathdir[sizeof(pathdir)-1] = '\0'; } + else rv = -2; } else { smime_path(DF_PASSWORD_DIR, pathdir, sizeof(pathdir)); if(our_stat(pathdir, &sbuf) == 0){ if((sbuf.st_mode & S_IFMT) == S_IFDIR) setup_dir++; + else rv = -3; } else if(can_access(pathdir, ACCESS_EXISTS) != 0 && our_mkpath(pathdir, 0700) == 0) setup_dir++; + else rv = -4; } if(setup_dir == 0){ was_here = 0; - return -1; + return rv; } if(load_key_and_cert(pathdir, pathdir, &keyfile, &certfile, &pkey, &pcert) < 0){ @@ -275,7 +283,7 @@ setup_pwdcert(void **pwdcert) */ if(setup_certdir){ /* if we are here, pwdcertdir failed */ was_here = 0; - return -1; + return -5; } /* look to see if there are any certificates lying around, first |