DLZ_LIST_INIT(*dir_list);
if (create_path(zone, NULL, NULL, cd, &basepath) != ISC_R_SUCCESS) {
- return (ISC_R_NOTFOUND);
+ result = ISC_R_NOTFOUND;
+ goto complete_allnds;
}
/* remove path separator at end of path so stat works properly */
cd->log(ISC_LOG_ERROR,
"Filesystem driver requires "
"6 command line args.");
- return (ISC_R_FAILURE);
+ result = ISC_R_FAILURE;
+ goto free_cd;
}
if (strlen(argv[5]) > 1) {
cd->log(ISC_LOG_ERROR,
"Filesystem driver can only "
"accept a single character for separator.");
- return (ISC_R_FAILURE);
+ result = ISC_R_FAILURE;
+ goto free_cd;
}
/* verify base dir ends with '/' or '\' */
"Base dir parameter for filesystem driver "
"should end with %s",
"either '/' or '\\' ");
- return (ISC_R_FAILURE);
+ result = ISC_R_FAILURE;
+ goto free_cd;
}
/* determine and save path separator for later */
"filesystem_dynamic: Filesystem driver unable to "
"allocate memory for config data.");
+ free_cd:
/* if we allocated a config data object clean it up */
if (cd != NULL)
dlz_destroy(cd);
cd->log(ISC_LOG_ERROR,
"DLZ Perl '%s': Missing script argument.",
dlzname);
+ free(cd);
return (ISC_R_FAILURE);
}
cd->log(ISC_LOG_ERROR,
"DLZ Perl '%s': Missing class name argument.",
dlzname);
+ free(cd);
return (ISC_R_FAILURE);
}
perl_class_name = argv[2];