SWITCH_DECLARE(switch_status_t) switch_file_rename(const char *from_path, const char *to_path, switch_memory_pool_t *pool) { return apr_file_rename(from_path, to_path, pool); }
static void * APR_THREAD_FUNC deploymentAdmin_poll(apr_thread_t *thd, void *deploymentAdmin) { deployment_admin_pt admin = deploymentAdmin; /*first poll send framework started audit event, note this will register the target in Apache ACE*/ deploymentAdmin_updateAuditPool(admin, DEPLOYMENT_ADMIN_AUDIT_EVENT__FRAMEWORK_STARTED); while (admin->running) { //poll ace array_list_pt versions = NULL; deploymentAdmin_readVersions(admin, &versions); char *last = arrayList_get(versions, arrayList_size(versions) - 1); if (last != NULL) { if (admin->current == NULL || strcmp(last, admin->current) > 0) { char *request = NULL; if (admin->current == NULL) { request = apr_pstrcat(admin->pool, admin->pollUrl, "/", last, NULL); } else { // We do not yet support fix packages //request = apr_pstrcat(admin->pool, VERSIONS, "/", last, "?current=", admin->current, NULL); request = apr_pstrcat(admin->pool, admin->pollUrl, "/", last, NULL); } char inputFile[256]; inputFile[0] = '\0'; char *test = inputFile; celix_status_t status = deploymentAdmin_download(request, &test); if (status == CELIX_SUCCESS) { bundle_pt bundle = NULL; bundleContext_getBundle(admin->context, &bundle); char *entry = NULL; bundle_getEntry(bundle, "/", &entry); // Handle file char tmpDir[256]; char uuidStr[128]; apr_uuid_t tmpUuid; apr_uuid_get(&tmpUuid); apr_uuid_format(uuidStr, &tmpUuid); sprintf(tmpDir, "%s%s", entry, uuidStr); apr_dir_make(tmpDir, APR_UREAD|APR_UWRITE|APR_UEXECUTE, admin->pool); // TODO: update to use bundle cache DataFile instead of module entries. unzip_extractDeploymentPackage(test, tmpDir); char *manifest = apr_pstrcat(admin->pool, tmpDir, "/META-INF/MANIFEST.MF", NULL); manifest_pt mf = NULL; manifest_createFromFile(manifest, &mf); deployment_package_pt source = NULL; deploymentPackage_create(admin->pool, admin->context, mf, &source); char *name = NULL; deploymentPackage_getName(source, &name); char *repoDir = apr_pstrcat(admin->pool, entry, "repo", NULL); apr_dir_make(repoDir, APR_UREAD|APR_UWRITE|APR_UEXECUTE, admin->pool); char *repoCache = apr_pstrcat(admin->pool, entry, "repo/", name, NULL); deploymentAdmin_deleteTree(repoCache, admin->pool); apr_status_t stat = apr_file_rename(tmpDir, repoCache, admin->pool); if (stat != APR_SUCCESS) { printf("No success\n"); } deployment_package_pt target = hashMap_get(admin->packages, name); if (target == NULL) { // target = empty package } deploymentAdmin_stopDeploymentPackageBundles(admin, target); deploymentAdmin_updateDeploymentPackageBundles(admin, source); deploymentAdmin_startDeploymentPackageCustomizerBundles(admin, source, target); deploymentAdmin_processDeploymentPackageResources(admin, source); deploymentAdmin_dropDeploymentPackageResources(admin, source, target); deploymentAdmin_dropDeploymentPackageBundles(admin, source, target); deploymentAdmin_startDeploymentPackageBundles(admin, source); deploymentAdmin_deleteTree(repoCache, admin->pool); deploymentAdmin_deleteTree(tmpDir, admin->pool); remove(test); admin->current = strdup(last); hashMap_put(admin->packages, name, source); } } } sleep(5); } apr_thread_exit(thd, APR_SUCCESS); return NULL; }
apr_status_t modsecurity_request_body_clear(modsec_rec *msr, char **error_msg) { *error_msg = NULL; /* Release memory we used to store request body data. */ if (msr->msc_reqbody_chunks != NULL) { msc_data_chunk **chunks = (msc_data_chunk **)msr->msc_reqbody_chunks->elts; int i; for(i = 0; i < msr->msc_reqbody_chunks->nelts; i++) { if (chunks[i]->data != NULL) { free(chunks[i]->data); chunks[i]->data = NULL; } } } if (msr->msc_reqbody_storage == MSC_REQBODY_DISK) { int keep_body = 0; /* Should we keep the body? This normally happens when a PUT method was used, which * means the body is actually a file. */ if ((msr->upload_remove_files == 0) && (strcasecmp(msr->request_method, "PUT") == 0)) { if (msr->txcfg->upload_dir != NULL) { keep_body = 1; } else { *error_msg = apr_psprintf(msr->mp, "Input filter: SecUploadDir is undefined, " "unable to store PUT file."); } } /* Deal with a request body stored in a file. */ if (msr->msc_reqbody_filename != NULL) { if (keep_body) { /* Move request body (which is a file) to the storage area. */ const char *put_filename = NULL; const char *put_basename = NULL; /* Construct the new filename. */ put_basename = file_basename(msr->msc_reqbody_mp, msr->msc_reqbody_filename); if (put_basename == NULL) { *error_msg = apr_psprintf(msr->mp, "Input filter: Failed to generate basename " "to PUT file \"%s\"", log_escape(msr->msc_reqbody_mp, msr->msc_reqbody_filename)); return -1; } put_filename = apr_psprintf(msr->msc_reqbody_mp, "%s/%s", msr->txcfg->upload_dir, put_basename); if (put_filename == NULL) { *error_msg = apr_psprintf(msr->mp, "Input filter: Failed to generate filename " "to PUT file \"%s\"", log_escape(msr->msc_reqbody_mp, msr->msc_reqbody_filename)); return -1; } if (apr_file_rename(msr->msc_reqbody_filename, put_filename, msr->msc_reqbody_mp) != APR_SUCCESS) { *error_msg = apr_psprintf(msr->mp, "Input filter: Failed to rename file from " "\"%s\" to \"%s\".", log_escape(msr->msc_reqbody_mp, msr->msc_reqbody_filename), log_escape(msr->msc_reqbody_mp, put_filename)); return -1; } else { msr_log(msr, 4, "Input filter: Moved file from \"%s\" to \"%s\".", log_escape(msr->msc_reqbody_mp, msr->msc_reqbody_filename), log_escape(msr->msc_reqbody_mp, put_filename)); } } else { /* make sure it is closed first */ if (msr->msc_reqbody_fd > 0) { close(msr->msc_reqbody_fd); msr->msc_reqbody_fd = -1; } /* We do not want to keep the request body. */ if (apr_file_remove(msr->msc_reqbody_filename, msr->msc_reqbody_mp) != APR_SUCCESS) { *error_msg = apr_psprintf(msr->mp, "Input filter: Failed to delete temporary file: %s", log_escape(msr->mp, msr->msc_reqbody_filename)); return -1; } msr_log(msr, 4, "Input filter: Removed temporary file: %s", msr->msc_reqbody_filename); } msr->msc_reqbody_filename = NULL; } } if (msr->msc_reqbody_mp != NULL) { apr_pool_destroy(msr->msc_reqbody_mp); msr->msc_reqbody_mp = NULL; } return 1; }
///////////////////////////////////////////////////////////////////////////////// // // Function: // // Purpose: // // Parameters: // // Return value: // // Author: Komatsu Yuji(Zheng Chuyu) // ///////////////////////////////////////////////////////////////////////////////// int jhklog_rotate(void) { char errmsg[100]; char logfile_old[MAX_STRING_LEN]; int rename_flag; apr_status_t rv; apr_finfo_t finfo, finfo_log; if (jx_log == NULL) return -1; rv = apr_file_info_get(&finfo, APR_FINFO_INODE, jx_log->fp); if (rv != APR_SUCCESS) return -1; // no rotate if (jx_log->logsize == 0) { rv = apr_stat(&finfo_log, jx_log->logfile, APR_FINFO_INODE, jx_log->pool); if (rv == APR_SUCCESS) { if (finfo.inode == finfo_log.inode) return 0; } jhklog_unlock(); jhklog_close(); jhklog_open(); jhklog_lock(); return 0; } // don't rotate if (finfo.size < jx_log->logsize) return 0; // create new log file rename_flag = 0; snprintf(logfile_old, sizeof(logfile_old), "%s.old", jx_log->logfile); rv = apr_stat(&finfo_log, logfile_old, APR_FINFO_INODE, jx_log->pool); if (rv == APR_SUCCESS) { if (finfo.inode != finfo_log.inode) { rename_flag = 1; } } else { rename_flag = 1; } if (rename_flag == 1) { rv = apr_file_rename(jx_log->logfile, logfile_old, jx_log->pool); if (rv != APR_SUCCESS) { apr_strerror(rv, errmsg, sizeof(errmsg)); fprintf(stderr, "can not rename [%s] to [%s]. %s\n", jx_log->logfile, logfile_old, errmsg); return -1; } } jhklog_unlock(); jhklog_close(); jhklog_open(); jhklog_lock(); return 0; }