aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Austein <sra@hactrn.net>2006-09-25 15:24:51 +0000
committerRob Austein <sra@hactrn.net>2006-09-25 15:24:51 +0000
commitb9a242e722533040d51e10b6e1843a9338dd45b1 (patch)
tree36d0024c4ae907d9ea2b164dec848abbbbddedaa
parentbe2036cc409d94afc58a5a64afe649f66fb89173 (diff)
Checkpoint
svn path=/rcynic/rcynic.c; revision=317
-rw-r--r--rcynic/rcynic.c26
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);