diff options
author | Rob Austein <sra@hactrn.net> | 2006-09-25 15:24:51 +0000 |
---|---|---|
committer | Rob Austein <sra@hactrn.net> | 2006-09-25 15:24:51 +0000 |
commit | b9a242e722533040d51e10b6e1843a9338dd45b1 (patch) | |
tree | 36d0024c4ae907d9ea2b164dec848abbbbddedaa | |
parent | be2036cc409d94afc58a5a64afe649f66fb89173 (diff) |
Checkpoint
svn path=/rcynic/rcynic.c; revision=317
-rw-r--r-- | rcynic/rcynic.c | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/rcynic/rcynic.c b/rcynic/rcynic.c index cba131a3..fc2db6c6 100644 --- a/rcynic/rcynic.c +++ b/rcynic/rcynic.c @@ -131,13 +131,13 @@ static int mkdir_maybe(char *name) if (strlen(name) >= sizeof(buffer)) return 0; strcpy(buffer, name); - if ((b = strrchr(buffer, '/')) == NULL) - return 1; - *b = '\0'; + if ((b = strrchr(buffer, '/')) != NULL) { + *b = '\0'; + if (!mkdir_maybe(buffer)) + return 0; + } if (!access(buffer, F_OK)) return 1; - if (!mkdir_maybe(buffer)) - return 0; return mkdir(name, 0777) == 0; } @@ -385,6 +385,8 @@ static int rsync(char *args, ...) pid_t pid; FILE *f; + memset(argv, 0, sizeof(argv)); + for (argc = 0; argc < sizeof(rsync_cmd)/sizeof(*rsync_cmd); argc++) argv[argc] = rsync_cmd[argc]; argv[argc] = args; @@ -683,7 +685,7 @@ static int check_crl(char *uri, !access(path, R_OK)) return 1; - rsync(uri); + rsync(uri, NULL); if ((crl = check_crl_1(uri, path, sizeof(path), unauthenticated, trusted_certs)) || @@ -944,7 +946,7 @@ int main(int argc, char *argv[]) logmsg("Couldn't create CONF opbject"); goto done; } - + if (NCONF_load(cfg_handle, cfg_file, &eline) <= 0) { if (eline <= 0) logmsg("Couldn't load config file %s", cfg_file); @@ -984,12 +986,18 @@ int main(int argc, char *argv[]) goto done; } - if (rename(authenticated, old_authenticated) < 0) { + if (rename(authenticated, old_authenticated) < 0 && + errno != ENOENT) { logmsg("Couldn't rename %s to %s, giving up", old_authenticated, authenticated); goto done; } + if (!access(authenticated, F_OK) || !mkdir_maybe(authenticated)) { + logmsg("Couldn't prepare directory %s, giving up", authenticated); + goto done; + } + for (i = 0; i < sk_CONF_VALUE_num(cfg_section); i++) { CONF_VALUE *val = sk_CONF_VALUE_value(cfg_section, i); certinfo_t ta_info; @@ -1038,7 +1046,9 @@ int main(int argc, char *argv[]) sk_X509_CRL_pop_free(crls, X509_CRL_free); sk_X509_pop_free(certs, X509_free); sk_pop_free(rsync_cache, free); +#if 0 /* double frees memory? */ NCONF_free(cfg_handle); +#endif EVP_cleanup(); ERR_free_strings(); free(authenticated); |